| 本帖最后由 hyycq 于 2013-4-12 15:57 编辑 
 你这段代码有两个地方错误。
 1. rhino.GetPointCoordinates("strPt1",(rhino.SelectObject(strPt1)))
 getpointcoordinates(str,bln)格式是这样的,你第一个给了message,后面给了个str,明显输入就是错的。如果是pre-select 的话 你就应该改成getpointcoordinates(strpt1,true)
 2. 你对getpointcoordinates的输出没有正确理解。
 他输出的是an array of 3D-points,你看清楚了是points,而且是个array。也就是说你一组array(x,y,z)数据。所以你应该选出你要的第一组,也就是要加上(0).
 我建议你还是用pointcoordinate比较方便,他输出的是一个array,单个坐标数据。
 
 根据你的思路我帮你吧小错误改了一下,仅供参考。你应该写个伪代码,或者说一下你这个是干什么的,否则我只能根据语法来修改,至于结果是不是你想要的,我没空仔细看你的代码了。
 
 问题3. 你说为什么只有两个圆, 我没仔细看你的程序,但是你的问题是一看是就定了了2次循环,当然只有两个圆了!如果你要有n多个圆的话,还得再定义一个计数,用for或者其他的循环加进去,这个的话你输入多少就出来多少圆了。
 
 以下是我修改的代码
 Call Main()
 Sub Main()
 Dim arrayX(),arrayY(),arrayZ()
 Dim s,i
 s = 10000
 For i = 0 To 1 Step 1
 Randomize
 ReDim Preserve arrayX(i),arrayY(i),arrayZ(i)
 arrayX(i) = rnd()*s + 1
 arrayY(i) = rnd()*s + 1
 arrayZ(i) = rnd()*s + 1
 Next
 Dim strPt1,strPt2
 strPt1 = rhino.AddPoint(array(arrayX(0),arrayY(0),arrayZ(0)))
 strPt2 = rhino.AddPoint(array(arrayX(1),arrayY(1),arrayZ(1)))
 Dim dblSphere1,dblSphere2
 dblSphere1 = rhino.AddSphere(array(arrayX(0),arrayY(0),arrayZ(0)),1000)
 dblSphere2 = rhino.AddSphere(array(arrayX(1),arrayY(1),arrayZ(1)),1000)
 Do
 Dim dblDistance2Pt
 Dim arrPt1Coordinates,arrPt2Coordinates
 dblDistance2Pt = rhino.Distance(array(arrayX(0),arrayY(0),arrayZ(0)),array(arrayX(1),arrayY(1),arrayZ(1)))
 If  dblDistance2Pt > 5000 Then
 If IsNull(dblDistance2Pt)Then Exit Do
 '选择点1,点2,得到点1,点2的坐标
 Call rhino.SelectObject(strPt1)
 arrPt1Coordinates = rhino.GetPointCoordinates(strPt1,True)
 Call rhino.SelectObject(strPt2)
 arrPt2Coordinates = rhino.GetPointCoordinates(strPt2,True)
 '移动点1,
 Call rhino.MoveObject(strPt1,arrPt1Coordinates(0),arrPt2Coordinates(0))
 Call rhino.MoveObject(dblsphere1,arrPt1Coordinates(0),arrPt2Coordinates(0))
 Call rhino.Sleep(1000)
 ElseIf      dblDistance2Pt < 5000 Then
 If IsNull(dblDistance2Pt)Then Exit Do
 '选择点1,点2,得到点1,点2的坐标
 Call rhino.SelectObject(strPt1)
 arrPt1Coordinates = rhino.GetPointCoordinates(strPt1,True)
 Call rhino.SelectObject(strPt2)
 arrPt2Coordinates = rhino.GetPointCoordinates(strPt2,True)
 '移动点1,
 Call rhino.MoveObject(strPt1,arrPt2Coordinates(0),arrPt1Coordinates(0))
 Call rhino.MoveObject(dblsphere1,arrPt2Coordinates(0),arrPt1Coordinates(0))
 Call rhino.Sleep(1000)
 End If
 
 Loop  While dblDistance2Pt = 2000
 End Sub
 |