本帖最后由 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 |