logo

HOTLAVA

Option Explicit

'Script written by Luis Quinones

'Script copyrighted by [n]igma + studioBoom + computational matter

'www.luisquinonesdesign.com

'www.studioboomdesign.com

'www.computationalmatter.com

'Script version Sunday, March 20, 2011 8:08:03 PM



Call Main()

Sub Main()

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    Call Rhino.MessageBox("Code Generates Mesh OffSets and Frames Based on Luminance Values -

         coming from Geometry Painted with PaintVertex Tool in Maya")

    'layer to store base mesh

    Dim strMainLayer : strMainLayer = Rhino.AddLayer("MainMesh")

    'pick Mesh which is unwelded at 0

    Dim strObject : strObject = Rhino.GetObject("Select mesh", 32)

    'store mesh in base layer

    Call Rhino.ObjectLayer(strObject,strMainLayer)

    ' get the face vertices of the mesh

    Dim arrFaces : arrFaces = Rhino.MeshFaces(strObject, True)

    'get the vertex colors of the mesh

    Dim color : color = Rhino.MeshVertexColors(strObject)

    'Dynamic + Fixed Arrays

    Dim arrFace(3),arrHLS(3),arrFace2(3)

    Dim arrFaceVertices2(0)

    Dim arrFaceVerts(0)

    Dim lengthCheck()

    Dim lengthCheck2()

    'Create Layers 

    Dim strLayer6 : strLayer6 = Rhino.AddLayer("BaseCrvs",RGB(255,0,0))

    Dim strLayer2 : strLayer2 = Rhino.AddLayer("OffsetCrv",RGB(255,0,0))

    Dim strLayer9 : strLayer9 = Rhino.AddLayer("OffsetCrv_Fillet",RGB(255,0,0))

    Dim strLayer : strLayer   = Rhino.AddLayer("OffSetMesh",RGB(255,0,0))

    Dim strLayer8 : strLayer8 = Rhino.AddLayer("OffSetMesh_Fillet",RGB(255,0,0))

    Dim strLayer3 : strLayer3 = Rhino.AddLayer("FrameDog",RGB(255,255,255))

    Dim strLayer11 : strLayer11 = Rhino.AddLayer("FrameDog2",RGB(255,255,255))

    Dim strLayer5 : strLayer5 = Rhino.AddLayer("0_ValueOffSet",RGB(120,120,120))

    Dim strLayer4 : strLayer4 = Rhino.AddLayer("Color_Vert_Info",RGB(255,255,0))

    Dim strLayer7 : strLayer7 = Rhino.AddLayer("TempStuff",RGB(255,255,0))

    Dim strLayer10 : strLayer10 = Rhino.AddLayer("Offset_SOLO",RGB(255,255,0))

    Dim strLayer12 : strLayer12 = Rhino.AddLayer("StrandyDandy",RGB(255,255,255))

    Dim strLayer13 : strLayer13 = Rhino.AddLayer("0.99ScaledCrv",RGB(255,255,255))

    Dim strLayer14 : strLayer14 = Rhino.AddLayer("SkinnyFrame",RGB(255,255,255))

    Dim i,j

    Dim count2

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    If IsArray(arrFaces) Then

        Rhino.EnableRedraw False

        i = 0

        count2 = 0

        Do While i <= UBound(arrFaces)

            arrFace2(0) = arrFaces(i)            

            arrFace2(1) = arrFaces(i+1)

            arrFace2(2) = arrFaces(i+2)

            arrFace2(3) = arrFaces(i+3)        

            If arrFace2(2)(0) = arrFace2(3)(0) And arrFace2(2)(1) = arrFace2(3)(1) And arrFace2(2)(2) = arrFace2(3)(2) Then            

                '    Call Rhino.MessageBox("SHIT")                

                arrHLS(0) = Rhino.ColorRGBToHLS(color(count2))

                'Call Rhino.Print(arrHLS(0)(1)/240)            

                arrHLS(1) = Rhino.ColorRGBToHLS(color(count2+1))

                'Call Rhino.Print(arrHLS(1)(1)/240)        

                arrHLS(2) = Rhino.ColorRGBToHLS(color(count2+2))

                'Call Rhino.Print(arrHLS(2)(1)/240)        

                arrHLS(3) = Rhino.ColorRGBToHLS(color(count2+2))

                'Call Rhino.Print(arrHLS(3)(1)/240)            

                Dim sum : sum = Rhino.Sum(array(arrHLS(0)(1)/240,arrHLS(1)(1)/240,arrHLS(2)(1)/240))    

                Dim ave : ave = sum/3    

                arrFaceVerts(0) = Array(0,1,2,2)        

                Dim arrMeshVerts : arrMeshVerts = Array(arrFace2(0),arrFace2(1),arrFace2(2),arrFace2(3))

                Dim arrVerticesNEW : arrVerticesNEW = arrMeshVerts            

                Dim newMesh : newMesh = Rhino.AddMesh(arrMeshVerts,arrFaceVerts)

                Dim meshCent : meshCent = Rhino.MeshAreaCentroid(newMesh)                



                count2 = count2 + 3                        

            Else                

                arrHLS(0) = Rhino.ColorRGBToHLS(color(count2))

                'Call Rhino.Print(arrHLS(0)(1)/240)            

                arrHLS(1) = Rhino.ColorRGBToHLS(color(count2+1))

                'Call Rhino.Print(arrHLS(1)(1)/240)        

                arrHLS(2) = Rhino.ColorRGBToHLS(color(count2+2))

                'Call Rhino.Print(arrHLS(2)(1)/240)

                arrHLS(3) = Rhino.ColorRGBToHLS(color(count2+3))

                'Call Rhino.Print(arrHLS(3)(1)/240)                

                sum = Rhino.Sum(Array(arrHLS(0)(1)/240,arrHLS(1)(1)/240,arrHLS(2)(1)/240,arrHLS(3)(1)/240))

                ave = sum/4        

                arrFaceVerts(0) = Array(0,1,2,3)            

                arrMeshVerts = Array(arrFace2(0),arrFace2(1),arrFace2(2),arrFace2(3))

                arrVerticesNEW = arrMeshVerts            

                newMesh = Rhino.AddMesh(arrMeshVerts,arrFaceVerts)

                meshCent = Rhino.MeshAreaCentroid(newMesh)    

                count2 = count2 + 4            

            end if            

            Dim baseScaledAction : baseScaledAction = Rhino.ScaleObject(newMesh,meshCent,array(0.98,0.98,0.98))

            'Store the scaled baseMesh in the proper layer

            Call Rhino.ObjectLayer(baseScaledAction,strLayer5)

            'Create a polyline around the meshFace to avoid a tolerance issue

            Dim strPolyBase : strPolyBase = Rhino.AddPolyline(arrVerticesNEW)

            'Store the polyline in the proper layer

            Call Rhino.ObjectLayer(strPolyBase,strLayer6)

            'Create a new polyline(A) around the meshFace to avoid a tolerance issue

            Dim strPoly : strPoly = Rhino.AddPolyline(arrVerticesNEW)

            'Scale the polyline by 0.98 to create an edge ridge condition before any transformations are made

            strPoly = Rhino.ScaleObject(strPoly,meshCent,array(0.98,0.98,0.98))

            'Store the scaled polyLine in the proper layer

            Call Rhino.ObjectLayer(strPoly,strLayer13)

            'Create a copy of the new polyline(B) around the meshFace to avoid a tolerance issue

            Dim strPoly2 : strPoly2 = Rhino.AddPolyline(arrVerticesNEW)

            'Scale the polyline by 0.98 to create an edge ridge condition before any transformations are made

            strPoly2 = Rhino.ScaleObject(strPoly2,meshCent,array(0.98,0.98,0.98))

            'Store the scaled new polyLine in the proper layer

            Call Rhino.ObjectLayer(strPoly2,strLayer13)

            'Create another copy of the new polyline(C) around the meshFace to avoid a tolerance issue

            Dim strPoly3 : strPoly3 = Rhino.AddPolyline(arrVerticesNEW)

            'Scale the polyline by 0.98 to create an edge ridge condition before any transformations are made

            strPoly3 = Rhino.ScaleObject(strPoly3,meshCent,array(0.98,0.98,0.98))

            'Store the scaled new polyLine in the proper layer

            Call Rhino.ObjectLayer(strPoly3,strLayer13)

            '/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    

                        'FUNCTION INFORMATION ------------------------------------------------------------------------------------------

            '/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////        

            'Create Array to Store the BasePolyline(0.98 Scaled) and The SkinnyFrame Layer to pass to Function

            Dim arrCurveFrameOut : arrCurveFrameOut = array(strPolyBase,strPoly3)

            'Call the Quad Mesh Generating Function to Create the Skinny Frame (reason there is a 0,98 offset above)

            Call QuadUnfilletMeshGenerator(arrCurveFrameOut,strLayer14)    

            'Call StrandyPipe Function that makes the Radiant Cooling Pipes

            'Dim strandy : strandy = strandyPipeyAction(strPoly3,ave)

            'Put the Return from the function(Curves) and store them in the "StrandyDandy" Layer

            'Call Rhino.ObjectLayer(strandy,strLayer12)    

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            'if the luminance value is greater than 0 and less than 0,9 then do this

            If ave > 0 And ave < 0.9 Then

                'Scale the new Mesh over top of each existing mesh face

                Dim scaleMesh : scaleMesh = Rhino.ScaleObject(newMesh,meshCent,Array(ave,ave,ave))

                'store it in the offsetMesh Layer

                Call Rhino.ObjectLayer(scaleMesh,strLayer)

                'Get the meshFaceArea

                Dim meshArea1 : meshArea1 = Rhino.MeshArea(scaleMesh)

                'Call Rhino.Print(meshArea1(1))

                'scale the polyline(A) from the centroid by the luminance value

                Dim basescaleSrf : basescaleSrf = Rhino.ScaleObject(strPoly,meshCent,Array(ave,ave,ave))

                '/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                'POLYLINE MOVING ALONG MeshFace NORMAL BASED ON PAINT LUMINANCE VALUES

                                '/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                'VECTOR RELOCATION SET ------------------------------------------------

                'Get the meshfaceNormal

                Dim normal : normal = Rhino.MeshFaceNormals(newMesh)

                'Set the Move value at half the Luminance Value

                Dim pushValue : pushValue = ave * 0.5

                'Scale the vector to 0,5 units

                Dim normal2 : normal2 = Rhino.VectorScale(normal(0),-pushValue)

                'Add the point at the scaled vector

                Dim newVec : newVec = Rhino.PointAdd(meshCent,normal2)

                'Move the (0,98) scaled polyline from the centroid of the base meshface to the newVector Position

                Dim scaleSrf : scaleSrf = Rhino.MoveObject(basescaleSrf,meshCent,newVec)

                Call Rhino.ObjectLayer(scaleSrf,strLayer2)

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                'Create a temp polyline(A) copy to explode the hell out of

                Dim scaleSrfTemp : scaleSrfTemp = Rhino.ScaleObject(strPoly,meshCent,Array(1,1,1))

                Call Rhino.ObjectLayer(scaleSrfTemp,strLayer7)

                'Explode that hotness

                Dim explodeTest : explodeTest = Rhino.ExplodeCurves(scaleSrfTemp)    

'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                'loop through the exploded hotness to store all the lenght values of the curve segments

                Dim z 

                For z = 0 To Ubound(explodeTest)    

                    ReDim Preserve lengthCheck(z)

                    lengthCheck(z) = Rhino.CurveLength(explodeTest(z))

                    'Call Rhino.Print(lengthCheck(z))

                Next

'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                'If the length of a segment is less than 0,2 then do not fillet the curve 

                If lengthCheck(0) < 0.2 Or lengthCheck(1) < 0.2 Or lengthCheck(2) < 0.2 Or lengthCheck(3) < 0.2 Then

                    'Array containing polyline(B) and the moved along normal polyline to build out the meshFrame

                    Dim arrLoftCrvsB : arrLoftCrvsB = array(strPoly2,scaleSrf)

                    'Call the Quad Mesh Generating Function to Create the unfilleted meshFrame and put in the FrameDog2 Layer

                    Call QuadUnfilletMeshGenerator(arrLoftCrvsB,strLayer11)

                    'Create the infill Window for the frames that are unfilled

                    Dim offsetSolo : offsetSolo = Rhino.MeshPolyline(scaleSrfTemp)

                    'Store the window in the "OffsetSolo" Layer

                    Call Rhino.ObjectLayer(offsetSolo,strLayer10)

                Else

                    'If the length of a segment is greater than 0,2 then do this

'//////////////////////////////////////////////////////////////////////////////        

                    Dim arrLoftCrvs : arrLoftCrvs = array(scaleSrf,strPoly2)

                    'FUNCTION to FILLET-----------------------------------------------------------

                    Dim hotFillet : hotFillet = HotFilletAction(arrLoftCrvs,strLayer8,meshArea1(1),strLayer11)

'//////////////////////////////////////////////////////////////////////////////        

                    Call Rhino.DeleteObject(scaleSrf)

                    'Dim strlofty : strlofty = Rhino.AddLoftSrf(Array(hotFillet,strPoly2),,,0,0)

                    'Call Rhino.ObjectLayer(hotMeshAction,strLayer3)

                    Call Rhino.ObjectLayer(hotFillet,strLayer9)

                    'Call Rhino.SurfaceIsocurveDensity(hotSeamage,-1)

                End If

                Erase lengthCheck

            End If

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            'if the luminance value is greater than 0,9 Then

            If ave >= 0.9  Then

                'Scale the new Mesh over top of each existing mesh face

                Dim scaleMesh3 : scaleMesh3 = Rhino.ScaleObject(newMesh,meshCent,Array(ave-0.05,ave-0.05,ave-0.05))

                'store it in the offsetMesh Layer

                Call Rhino.ObjectLayer(scaleMesh3,strLayer)

                Dim meshArea2 : meshArea2  = Rhino.MeshArea(scaleMesh3)

                Dim basescaleSrf2 : basescaleSrf2 = Rhino.ScaleObject(strPoly,meshCent,Array(ave-0.05,ave-0.05,ave-0.05))

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                'VECTOR RELOCATION SET ------------------------------------------------

                Dim normal2A : normal2A = Rhino.MeshFaceNormals(newMesh)

                Dim pushValue2 : pushValue2 = (ave - 0.05) * 0.5

                Dim normal22 : normal22 = Rhino.VectorScale(normal2A(0),-pushValue2)

                Dim newVec2 : newVec2 = Rhino.PointAdd(meshCent,normal22)

                Dim scaleSrf3 : scaleSrf3 = Rhino.MoveObject(basescaleSrf2,meshCent,newVec2)

                Call Rhino.ObjectLayer(scaleSrf3,strLayer2)

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

'/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

                scaleSrfTemp = Rhino.ScaleObject(strPoly,meshCent,Array(1,1,1))

                Call Rhino.ObjectLayer(scaleSrfTemp,strLayer7)            

                explodeTest = Rhino.ExplodeCurves(scaleSrfTemp)        

                Dim y 

                For y = 0 To Ubound(explodeTest)            

                    ReDim Preserve lengthCheck2(y)            

                    lengthCheck2(y) = Rhino.CurveLength(explodeTest(y))

                    'Call Rhino.Print(lengthCheck(z))            

                Next        

                If lengthCheck2(0) < 0.2 Or lengthCheck2(1) < 0.2 Or lengthCheck2(2) < 0.2 Or lengthCheck2(3) < 0.2 Then            

                    arrLoftCrvsB = array(strPoly2,scaleSrf3)                

                    Call QuadUnfilletMeshGenerator(arrLoftCrvsB,strLayer11)                

                    offsetSolo = Rhino.MeshPolyline(scaleSrfTemp)

                    Call Rhino.ObjectLayer(offsetSolo,strLayer10)                                    

                    'Call Rhino.ObjectLayer(scaleMesh,strLayer10)            

                    'Dim movedBase2 : movedBase2 = Rhino.MoveObject(scaleMesh3,meshCent,newVec)

                    'Call Rhino.ObjectLayer(movedBase2,strLayer10)

                    'strlofty = Rhino.AddLoftSrf(Array(strPoly2,scaleSrf3))

                    'Call Rhino.ObjectLayer(strLofty,strLayer11)

                    'Call Rhino.SurfaceIsocurveDensity(strlofty,-1)

                    'Call Rhino.ObjectLayer(scaleMesh3,strLayer10)                

                Else                            

                    'Dim hotFillet2 : hotFillet2 = HotFilletAction(scaleSrf3)            

                    'Call Rhino.DeleteObject(scaleSrf3)                

'/////////////////////////////////////////////////////////////////////////////    

                    arrLoftCrvs = array(scaleSrf3,strPoly2)

                    hotFillet = HotFilletAction(arrLoftCrvs,strLayer8,meshArea2(1),strLayer11)

                    'hotMeshAction = DirtyDirtyMeshGenerator(arrLoftCrvs)

                    'hotSeamage = HotSeamageAction(arrLoftCrvs)

'/////////////////////////////////////////////////////////////////////////////

                    Call Rhino.DeleteObject(scaleSrf3)

                    'strlofty = Rhino.AddLoftSrf(Array(strPoly2,scaleSrf3))

                    'Call Rhino.ObjectLayer(hotMeshAction,strLayer3)

                    Call Rhino.ObjectLayer(hotFillet,strLayer9)

                    'Call Rhino.SurfaceIsocurveDensity(hotSeamage,-1)

                    'Call Rhino.DeleteObjects(join3)                

                End If                

            End If                

            i = i + 4

            Erase arrFaceVertices2        

        Loop

'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

'////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        Rhino.EnableRedraw True

    End If

    Call Rhino.LayerVisible(strLayer2,False)

    Call Rhino.LayerVisible(strLayer4,False)

    Call Rhino.LayerVisible(strMainLayer,False)

    Call Rhino.LayerVisible(strLayer6,False)

    Call Rhino.LayerVisible(strLayer,False)

    Call Rhino.LayerVisible(strLayer7,False)

    Call Rhino.LayerVisible(strLayer9,False)

End Sub



Function HotFilletAction(arrCrvs,layer,area,strLayer11)

    Dim curves

    Dim strOutterCrv

    curves = arrCrvs(0)

    strOutterCrv = arrCrvs(1)

    Dim arrOutterCrvPts : arrOutterCrvPts = Rhino.CurvePoints(strOutterCrv)

    Dim explodeAction : explodeAction = Rhino.ExplodeCurves(curves)

    Dim strNewLayer : strNewLayer = Rhino.AddLayer("fillet")

    Dim i

    Dim startPoints()

    Dim midPoints()

    Dim endPoints()

    Dim startPoints2()

    Dim endPoints2()

    Dim filletStorage()

    Dim arrFaceVertices2(0)

    Dim arrFaceVertices3(0)

    Dim arrVertForMesh

    Dim testArray

    'Rhino.Print area

    If area > 10 Then    

        Dim dblRadValue : dblRadValue = area/120    

    End If

    If area <= 10 And area > 6 Then

        dblRadValue = area/30

    End If

    If area <=  6 Then

        dblRadValue = area/40

    End If

    'Rhino.Print dblRadValue

    For i = 0 To Ubound(explodeAction)                

        arrFaceVertices2(0) = Array(0,1,2,2)    

        arrFaceVertices3(0) = Array(0,1,2,3)        

        If i = 3 Then        

            ReDim Preserve filletStorage(i)        

            filletStorage(i) = Rhino.AddFilletCurve(explodeAction(i),explodeAction(0),dblRadValue)

            'Call Rhino.ObjectLayer(fillet,strNewLayer)    

            ReDim Preserve startPoints(i)

            ReDim Preserve endPoints(i)        

            startPoints(i) = Rhino.CurveStartPoint(    filletStorage(i))        

            endPoints(i) = Rhino.CurveEndPoint(    filletStorage(i))        

'///////////////////////////////////////////////////////////////////////////////////////////

            Dim arrFilletDiv : arrFilletDiv = Rhino.DivideCurve(filletStorage(i),5)

            'Call Rhino.Print(arrFilletDiv(0)(0))

            Dim w

            For w = 0 To Ubound(arrFilletDiv) -1    

                'Call Rhino.AddLine(arrFilletDiv(y),arrOutterCrvPts(1))    

                arrVertForMesh = array(arrFilletDiv(w),arrFilletDiv(w+1),arrOutterCrvPts(0))    

                Dim FrameMesh : FrameMesh = Rhino.AddMesh(arrVertForMesh,arrFaceVertices2)    

                Call Rhino.ObjectLayer(FrameMesh,strLayer11)    

            Next

'///////////////////////////////////////////////////////////////////////////////////////////

        Else    

            ReDim Preserve filletStorage(i)    

            filletStorage(i) = Rhino.AddFilletCurve(explodeAction(i),explodeAction(i+1),dblRadValue)            

            If IsNull (filletStorage(i)) Then            

                Rhino.Print "something is fucked up"            

            End If        

            'Call Rhino.ObjectLayer(fillet,strNewLayer)        

'//////////////////////////////////////////////////////////////////////////////////////////

            arrFilletDiv = Rhino.DivideCurve(filletStorage(i),5)            

            'Call Rhino.Print(arrFilletDiv(0)(0))                

            Dim y

            For y = 0 To Ubound(arrFilletDiv) -1        

                'Call Rhino.AddLine(arrFilletDiv(y),arrOutterCrvPts(1))        

                If i = 0 Then            

                    arrVertForMesh = array(arrFilletDiv(y),arrFilletDiv(y+1),arrOutterCrvPts(1))            

                End If        

                If i = 1 Then            

                    arrVertForMesh = array(arrFilletDiv(y),arrFilletDiv(y+1),arrOutterCrvPts(2))        

                End If                

                If i = 2 Then                    

                    arrVertForMesh = array(arrFilletDiv(y),arrFilletDiv(y+1),arrOutterCrvPts(3))                

                End If                

                FrameMesh = Rhino.AddMesh(arrVertForMesh,arrFaceVertices2)                

                Call Rhino.ObjectLayer(FrameMesh,strLayer11)            

            Next    

'//////////////////////////////////////////////////////////////////////////////////////////    

            ReDim Preserve startPoints(i)        

            ReDim Preserve midPoints(i)            

            ReDim Preserve endPoints(i)                        

            startPoints(i) = Rhino.CurveStartPoint(filletStorage(i))            

            midPoints(i) = Rhino.CurveMidPoint(filletStorage(i))            

            'Call Rhino.AddTextDot(i,midPoints(i))        

            endPoints(i) = Rhino.CurveEndPoint(    filletStorage(i))    

        End If    

    Next

    Dim j    

    For j = 0 To Ubound(startPoints)    

        If j = 3 Then        

            ReDim Preserve filletStorage(i+j)        

            filletStorage(i+j) = Rhino.AddLine(endPoints(j),startPoints(0))

            'Call Rhino.ObjectLayer(newLine,strNewLayer)        

            testArray = array(endPoints(j),startPoints(0),arrOutterCrvPts(1),arrOutterCrvPts(0))

            'Call Rhino.ObjectLayer(newLine,strNewLayer)        

            Dim FrameMesh2 : FrameMesh2 = Rhino.AddMesh(testArray,arrFaceVertices3)

            Call Rhino.ObjectLayer(FrameMesh2,strLayer11)        

        Else    

            ReDim Preserve filletStorage(i+j)        

            filletStorage(i+j) = Rhino.AddLine(endPoints(j),startPoints(j+1))        

            testArray = array(endPoints(j),startPoints(j+1),arrOutterCrvPts(j+2),arrOutterCrvPts(j+1))

            'Call Rhino.ObjectLayer(newLine,strNewLayer)        

            FrameMesh2 = Rhino.AddMesh(testArray,arrFaceVertices3)        

            Call Rhino.ObjectLayer(FrameMesh2,strLayer11)

        End If        

    Next

    'Call Rhino.Print(Ubound(filletStorage))

    Dim strNewJoined : strNewJoined = Rhino.JoinCurves(filletStorage,True)

    Dim conv : conv = Rhino.ConvertCurveToPolyline(strNewJoined(0))

    'Call Rhino.ReverseCurve(conv)

    Call Rhino.DeleteObject(explodeAction(0))

    Call Rhino.DeleteObject(explodeAction(1))

    Call Rhino.DeleteObject(explodeAction(2))

    Call Rhino.DeleteObject(explodeAction(3))

    Call Rhino.DeleteObject(strNewJoined(0))

    Dim newOffsetFillet : newOffsetFillet = Rhino.MeshPolyline(conv)

    Call Rhino.ObjectLayer(newOffsetFillet,layer)

    HotFilletAction = conv

End Function



Function HotSeamageAction(hotFillet)

    

    Dim strObject(1),arrDomain, dblParameter,strObject2

    strObject(0) = hotFillet(0) 

    strObject(1) = hotFillet(1) 

    '    If Rhino.IsCurveClosed(strObject) Then

    arrDomain = Rhino.CurveDomain(hotFillet(0))

    dblParameter  = (arrDomain(0) + arrDomain(1)) / 2

    Dim eval : eval = Rhino.EvaluateCurve(hotFillet(0) ,dblParameter)    

    Call Rhino.AddPoint(eval)    

    Dim param2 : param2 = Rhino.CurveClosestPoint(hotFillet(1) ,eval)    

    Dim eval2 : eval2 = Rhino.EvaluateCurve(hotFillet(1) ,param2)    

    Call Rhino.AddPoint(eval2)    

    Rhino.CurveSeam hotFillet(0) , dblParameter    

    Rhino.CurveSeam hotFillet(1) , param2    

    'Dim crvCont : crvCont = array(strObject,strObject2)

    'End If

    Dim loftedAction : loftedAction = Rhino.AddLoftSrf(strObject)

    HotSeamageAction = loftedAction

End Function



Function QuadUnfilletMeshGenerator(meshCrvs,layer)

    Dim i,j,z,k

    Dim arrMeshVerts()

    Dim arrFaceVerts(0)

    arrFaceVerts(0) = array(0,1,2,3)

    Dim pts : pts = Rhino.CurvePoints(meshCrvs(0))

    Dim pts2 : pts2 = Rhino.CurvePoints(meshCrvs(1))

    For k = 0 To Ubound(pts)-1

        Dim meshArray : meshArray = array(pts(k),pts2(k),pts2(k+1),pts(k+1))

        Dim quadMeshy : quadMeshy = Rhino.AddMesh(meshArray,arrFaceVerts)    

        Call Rhino.ObjectLayer(quadMeshy,layer)    

    Next

End Function

Function reparameterize(crvy)

    'If Rhino.IsCurve(strSrfID) = True Then
    Call rhino.SelectObject(crvy)
    Call rhino.Command("reparameterize 0 1")
    Call rhino.UnselectAllObjects()
    'End If
End Function

Function strandyPipeyAction(strCrv,ave)
    Dim arrExp : arrExp = Rhino.ExplodeCurves(strCrv)
    Call Rhino.DeleteObjects(array(arrExp(2),arrExp(3)))
    If ave <= 0.5 Then    
        Call Rhino.DeleteObject(arrExp(2))
    End If

    If ave > 0.5 Then
        Call Rhino.DeleteObject(arrExp(0))
    End If
    strandyPipeyAction = arrExp
End Function
  • Share