Difference between revisions of "MakeTree Revision-ssss"
From scripting
(Created page with "Direct: http://ssssociety.blogspot.com/2008/09/maketree-revision.html Option Explicit 'Author: YukiukiH 'Date: 08/10/03 'compatibility: Rhino4 'branching using vector...") |
(No difference)
|
Latest revision as of 07:22, 22 April 2017
Direct: http://ssssociety.blogspot.com/2008/09/maketree-revision.html
Option Explicit 'Author: YukiukiH 'Date: 08/10/03 'compatibility: Rhino4 'branching using vector 'first things first... '---------------------------------------------------------------------------------------------- Dim strRtPts strRtPts = Rhino.GetObjects ("select root points", 1) Call Rhino.AddLayer ("ptCloudRT", RGB(0,0,0)) 'black Call Rhino.ObjectLayer (strRtPts, "ptCloudRT") Dim strALLREFPts strALLREFPts = Rhino.GetObjects ("select reference points", 1) Call Rhino.AddLayer ("ptCloudREF", RGB(105,105,105)) 'gray Call Rhino.ObjectLayer (strALLREFPts, "ptCloudREF") Dim dblNumber dblNumber = 7 '4 Dim dblBoundary dblBoundary = 100 '100 Call Rhino.Print ("minimize rhino window") 'call function Dim arrResultBranchs arrResultBranchs = branch (strRtPts, strALLREFPts, dblNumber, dblBoundary) Dim arrResultTrees, i, j For j = 0 To UBound(arrResultBranchs) 'call function ReDim Preserve arrResultTrees(j) arrResultTrees(j) = tree (20, arrResultBranchs(j)) Dim arrResult01, arrResult02, dblS, dblT If dblNumber Mod 2 = 1 Then dblS = dblNumber/2+0.5 dblT = dblNumber-dblS Else dblS = dblNumber/2 dblT = dblNumber/2 End If ReDim arrResult01(dblS-1) ReDim arrResult02(dblT-1) Rhino.print("dblS = " & CStr(dblS)) Rhino.print("dblT = " & CStr(dblT)) For i = 0 To (dblS-1) arrResult01(i) = arrResultTrees(j)(i) Next For i = 0 To (dblT-1) arrResult02(i) = arrResultTrees(j)(i+dblS) Next 'call function Call tree (10, arrResult01) Call tree (10, arrResult02) Next Call Rhino.print("execution completed") '---------------------------------------------------------------------------------------------- '---------------------------------------------------------------------------------------------- Function branch (strRtPts, strALLREFPts, dblNumber, dblBoundary) refer branch function End Function '---------------------------------------------------------------------------------------------- '---------------------------------------------------------------------------------------------- '---------------------------------------------------------------------------------------------- '---------------------------------------------------------------------------------------------- Function tree (dblStemLength, arrBranches) Dim arrResult() 'length of given branches '------------------------- -------------- Dim i Dim blnFlag blnFlag = False For i=0 To UBound(arrBranches) Dim dblCurveLength dblCurveLength = Rhino.CurveLength (arrBranches(i)) Call Rhino.print("length = "& CStr(dblCurveLength)) If dblCurveLength > dblStemLength Then blnFlag = True End If Next 'get average if branches are too long, '--------------------------------------- If blnFlag Then Rhino.print("blnFlag = true") Dim arrEdPt, arrStPt Dim arrAvgPt(2), dblX, dblY, dblZ dblX = 0 dblY = 0 dblZ = 0 For i = 0 To UBound(arrBranches) arrEdPt = Rhino.CurveEndPoint (arrBranches(i)) dblX = dblX + arrEdPt(0) dblY = dblY + arrEdPt(1) dblZ = dblZ + arrEdPt(2) Next arrAvgPt(0) = dblX /(UBound(arrBranches)+1) arrAvgPt(1) = dblY /(UBound(arrBranches)+1) arrAvgPt(2) = dblZ /(UBound(arrBranches)+1) arrStPt = Rhino.CurveStartPoint (arrBranches(0)) Dim arrDiff arrDiff = Rhino.VectorSubtract (arrAvgPt, arrStPt) Dim dblDiff dblDiff = Rhino.VectorLength (arrDiff) Dim k k = dblStemLength / dblDiff arrDiff = Rhino.VectorScale (arrDiff, k) Dim arrSeed arrSeed = Rhino.VectorAdd (arrStPt, arrDiff) 'shorter branches '--------------------------------------- Dim strNewBranches ReDim strNewBranches(UBound(arrBranches)) For i = 0 To UBound(arrBranches) Dim arrLeaf arrLeaf = Rhino.CurveEndPoint(arrBranches(i)) Dim strLine strLine = Rhino.AddLine(arrSeed, arrLeaf) ReDim Preserve arrResult(i) arrResult(i) = strLine Next Dim strStem strStem = Rhino.AddLine (arrStPt, arrSeed) Call Rhino.DeleteObjects (arrBranches) Else Rhino.print("blnFlag = false") End If '--------------------------------------- Call Rhino.CurrentLayer ("0") tree = arrResult End Function '---------------------------------------------------------------------------------------------- '----------------------------------------------------------------------------------------------