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