logo

BrainZap

"""Recreates a series of polylines based on an animated series of deformed geometry. Post deformation the geometry is in very bad shape, this script rebuilds the base polylines to reInput into the next scripts"""

import rhinoscriptsyntax as rs
strNewLayer = rs.AddLayer("Plines",[255,255,255])
layerChoose = rs.GetLayer("ChooseLayer")
strMesh = rs.ObjectsByLayer(layerChoose)

print len(strMesh)
#rs.EnableRedraw (False)
faceVert = [0,1]
newPts = []
faceVert[0] = [0,1,2,3]
faceVert[1] = [0,3,4,4]

for z in range (len(strMesh)):
        #print layerName
        strLayer = rs.AddLayer('frame'+ str(z+1),[255,255,255])
        arrFaces = rs.MeshFaces(strMesh[z],True)
        print (len(arrFaces))
        i = 0
        while (i < len(arrFaces)):
            face = arrFaces[i],arrFaces[i+1],arrFaces[i+2],arrFaces[i+3]
            #face[0] = arrFaces[i]
            #face[1] = arrFaces[i+1]
            #face[2] = arrFaces[i+2]
            #face[3] = arrFaces[i+3]
            newLine = rs.AddLine(face[0],face[1])
            rs.ObjectLayer(newLine,strLayer)
            i += 4
        crvs = rs.ObjectsByLayer(strLayer,True)      

        if not crvs:
            print "negative" 
        rs.Command("Join")
        rs.UnselectAllObjects()     
        arrCrvTest = rs.ObjectsByLayer(strLayer)
        if arrCrvTest:        
            for curve in arrCrvTest :

                newPts2 = []
                crvPts = rs.CurvePoints(curve)
                #print crvPts[0]
                #crvPts.pop(-1)

                if crvPts :            
                    meshTest = rs.AddMesh(crvPts,faceVert)
                    areatest = rs.MeshArea(meshTest)
                    #print areatest[1]
                    if areatest[1] == 0:                 
                        print "One Failed"
                        rs.DeleteObject(curve)           
                    rs.DeleteObject(meshTest)
        rs.UnselectAllObjects()

        arrCrvs = rs.ObjectsByLayer(strLayer)
        if arrCrvs:         
            for curves in arrCrvs:           
                crvPts = rs.CurvePoints(curves)     
                if crvPts:              
                    meshTest = rs.AddMesh(crvPts,faceVert)
                    centroid = rs.MeshAreaCentroid(meshTest)
                    newPts2.append(centroid)
                    newPts.append(rs.AddPoint(centroid))
                    rs.DeleteObject(meshTest)              
        rs.DeleteObjects(newPts)
        if newPts:
            pline = rs.AddPolyline(newPts2)
        else:
            print" RIGHT--->WROONGG!"       
        if pline:
            rs.RebuildCurve(pline,2,40)
            print "rebuilt @ 2,40"
            rs.ObjectLayer(pline,strNewLayer)

        rs.LayerVisible(strLayer,False)
rs.LayerVisible(layerChoose,False)
#rs.EnableRedraw (True)
Update
  • Share