| 
 | 
 
经过不懈努力,终于看完了101的上篇,虽然好多东西还不是很懂,不过也算是把面向过程看完了。怀着激动的心情开始看下篇,刚开始就遇到了问题。希望高手们能解答一下。下面上代码: 
Call main() 
Sub main() 
 Dim strcurveid 
 strcurveid=rhino.GetObject("select a curve to sample",4,True,True) 
 If isnull(strcurveid) Then Exit Sub 
 Dim t 
 Call rhino.EnableRedraw(False) 
 For t=0.0 To 1.0 Step 0.002 
  Call addpointatr1parameter(strcurveid,t) 
 Next 
 Call rhino.EnableRedraw(True) 
End Sub 
 
 
 
Function addpointatr1parameter(strcurveid,dblunitparameter) 
 addpointatr1parameter=Null 
 Dim crvdomain 
 crvdomain=rhino.CurveDomain(strcurveid) 
 If isnull(crvdomain) Then Exit Function 
 Dim dblr1param 
 dblr1param=crvdomain(0)+dblunitparameter*(crvdomain(1)-crvdomain(0)) 
 Dim arrr3point 
 arrr3point=rhino.EvaluateCurve(strcurveid,dblr1param) 
 If Not isarray(arrr3point) Then Exit Function 
 Dim strpointid 
 strpointid=rhino.AddPoint(arrr3point) 
 Call rhino.ObjectColor(strpointid,parametercolour(dblunitparameter)) 
 addpointatr1parameter=strpointid 
End Function 
 
 
 
Function parametercolour(dblparam) 
 Dim redcomponent 
 redcomponent=255*dblparam 
 If(redcomponent<0) Then redcomponent=0 
 If(redcomponent>255) Then redcomponent=255 
  
 parametercolour=rgb(redcomponent,0,255-redcomponent) 
End Function 
 
这个代码运行起来没有问题,基本逻辑我也懂,但是在一个细节的地方我不是很懂,就是在第二部分Function addpointatr1parameter(strcurveid,dblunitparameter)的dblr1param=crvdomain(0)+dblunitparameter*(crvdomain(1)-crvdomain(0))这一行代码。我知道下面的rhino.evaluatecurve的返回值是一系列点,而这个添加点的方法应该和grasshopper一样,就是根据曲线上的t值来添加,所以evaluatecurve需要的是一个曲线,就是strcurveid和一系列t值,就是dblr1param。但是上面的代码,dblr1param=crvdomain(0)+dblunitparameter*(crvdomain(1)-crvdomain(0))这里的crvdomain(0)和后面的加法是用来干什么的呢,希望高手能给指点一下。 |   
 
 
 
 |