logo

[B]onnie..+..Clyde

Projects details

Code creates Meshes and Colors Vertixes Based on Structural Analysis Information – Algor – Python Research V.1 [29.March.2012] – via Python + Algor
“”” The input is a Text File containing XYZ info as well as deformation values. The code rebuilds the geometry from scratch based on XYZ coordinates, these coordinates are used to re-create the mesh in 3D and paint the vertices based on the value range. This is very useful in recreating and making the structural color maps as drivers in actual geometry instead of simple Textures┬áTHIS IS ONLY A SETUP PROCESS, ONCE YOU HAVE THE MESH VERTEX INFORMATION YOU CAN DO WHATEVER YOU WANT WITH IT”””
. Process
. Create Geometry
. Export STL, Bring into ALGOR
. Assign Analysis Type
. Establish Fixed Support Points (If Any)
. Assign Nodal Forces + Other Stuff ­čÖé
. Run Analysis
. Use Information to Rebuild Geometry and Paint
. Use the Mesh Vertex Information as a DRIVER FOR ANYTHING YOU WANT

[Input Data Text File – Shortened List.]

CODE

Part# 1, Element# 1, Element Node# 1, Node# 4452, X = 4.87821, Y = 0.5763, Z = -7.71481, Val 574.277
Part# 1, Element# 1, Element Node# 2, Node# 4454, X = 4.87186, Y = 0.655312, Z = -7.71344, Val 574.277
Part# 1, Element# 1, Element Node# 3, Node# 4455, X = 4.96378, Y = 0.660614, Z = -7.70957, Val 574.277
Part# 1, Element# 2, Element Node# 1, Node# 4453, X = 4.97955, Y = 0.578781, Z = -7.71002, Val 482.997
Part# 1, Element# 2, Element Node# 2, Node# 4452, X = 4.87821, Y = 0.5763, Z = -7.71481, Val 482.997
Part# 1, Element# 2, Element Node# 3, Node# 4455, X = 4.96378, Y = 0.660614, Z = -7.70957, Val 482.997
Part# 1, Element# 3, Element Node# 1, Node# 4452, X = 4.87821, Y = 0.5763, Z = -7.71481, Val 558.239
Part# 1, Element# 3, Element Node# 2, Node# 4454, X = 4.87186, Y = 0.655312, Z = -7.71344, Val 558.239
Part# 1, Element# 3, Element Node# 3, Node# 4471, X = 4.7784, Y = 0.661259, Z = -7.7059, Val 558.239
Part# 1, Element# 4, Element Node# 1, Node# 4379, X = 4.88078, Y = 0.493439, Z = -7.71126, Val 533.003
Part# 1, Element# 4, Element Node# 2, Node# 4452, X = 4.87821, Y = 0.5763, Z = -7.71481, Val 533.003
Part# 1, Element# 4, Element Node# 3, Node# 4407, X = 4.98532, Y = 0.493795, Z = -7.70596, Val 533.003
Part# 1, Element# 5, Element Node# 1, Node# 4452, X = 4.87821, Y = 0.5763, Z = -7.71481, Val 491.162
Part# 1, Element# 5, Element Node# 2, Node# 4453, X = 4.97955, Y = 0.578781, Z = -7.71002, Val 491.162
Part# 1, Element# 5, Element Node# 3, Node# 4407, X = 4.98532, Y = 0.493795, Z = -7.70596, Val 491.162
Part# 1, Element# 6, Element Node# 1, Node# 4379, X = 4.88078, Y = 0.493439, Z = -7.71126, Val 524.449
Part# 1, Element# 6, Element Node# 2, Node# 4452, X = 4.87821, Y = 0.5763, Z = -7.71481, Val 524.449
Part# 1, Element# 6, Element Node# 3, Node# 4378, X = 4.7766, Y = 0.493905, Z = -7.70432, Val 524.449
Part# 1, Element# 7, Element Node# 1, Node# 4455, X = 4.96378, Y = 0.660614, Z = -7.70957, Val 558.002
Part# 1, Element# 7, Element Node# 2, Node# 4454, X = 4.87186, Y = 0.655312, Z = -7.71344, Val 558.002
Part# 1, Element# 7, Element Node# 3, Node# 4456, X = 4.86309, Y = 0.726358, Z = -7.70627, Val 558.002
Part# 1, Element# 8, Element Node# 1, Node# 4472, X = 4.77661, Y = 0.579158, Z = -7.70766, Val 479.377
Part# 1, Element# 8, Element Node# 2, Node# 4452, X = 4.87821, Y = 0.5763, Z = -7.71481, Val 479.377
Part# 1, Element# 8, Element Node# 3, Node# 4471, X = 4.7784, Y = 0.661259, Z = -7.7059, Val 479.377
Part# 1, Element# 9, Element Node# 1, Node# 4452, X = 4.87821, Y = 0.5763, Z = -7.71481, Val 489.208
Part# 1, Element# 9, Element Node# 2, Node# 4472, X = 4.77661, Y = 0.579158, Z = -7.70766, Val 489.208
Part# 1, Element# 9, Element Node# 3, Node# 4378, X = 4.7766, Y = 0.493905, Z = -7.70432, Val 489.208
Part# 1, Element# 10, Element Node# 1, Node# 4454, X = 4.87186, Y = 0.655312, Z = -7.71344, Val 614.989
Part# 1, Element# 10, Element Node# 2, Node# 4456, X = 4.86309, Y = 0.726358, Z = -7.70627, Val 614.989
Part# 1, Element# 10, Element Node# 3, Node# 4471, X = 4.7784, Y = 0.661259, Z = -7.7059, Val 614.989
Part# 1, Element# 11, Element Node# 1, Node# 4379, X = 4.88078, Y = 0.493439, Z = -7.71126, Val 524.033
Part# 1, Element# 11, Element Node# 2, Node# 4407, X = 4.98532, Y = 0.493795, Z = -7.70596, Val 524.033
Part# 1, Element# 11, Element Node# 3, Node# 4380, X = 4.87821, Y = 0.410847, Z = -7.70372, Val 524.033
Part# 1, Element# 12, Element Node# 1, Node# 4379, X = 4.88078, Y = 0.493439, Z = -7.71126, Val 532.065
Part# 1, Element# 12, Element Node# 2, Node# 4378, X = 4.7766, Y = 0.493905, Z = -7.70432, Val 532.065
Part# 1, Element# 12, Element Node# 3, Node# 4380, X = 4.87821, Y = 0.410847, Z = -7.70372, Val 532.065
Part# 1, Element# 13, Element Node# 1, Node# 4455, X = 4.96378, Y = 0.660614, Z = -7.70957, Val 434.344
Part# 1, Element# 13, Element Node# 2, Node# 4456, X = 4.86309, Y = 0.726358, Z = -7.70627, Val 434.344
Part# 1, Element# 13, Element Node# 3, Node# 4457, X = 4.93958, Y = 0.735925, Z = -7.7034, Val 434.344
Part# 1, Element# 14, Element Node# 1, Node# 4453, X = 4.97955, Y = 0.578781, Z = -7.71002, Val 504.962
Part# 1, Element# 14, Element Node# 2, Node# 4455, X = 4.96378, Y = 0.660614, Z = -7.70957, Val 504.962
Part# 1, Element# 14, Element Node# 3, Node# 4448, X = 5.0825, Y = 0.587131, Z = -7.69352, Val 504.962
Part# 1, Element# 15, Element Node# 1, Node# 4471, X = 4.7784, Y = 0.661259, Z = -7.7059, Val 486.579
Part# 1, Element# 15, Element Node# 2, Node# 4456, X = 4.86309, Y = 0.726358, Z = -7.70627, Val 486.579
Part# 1, Element# 15, Element Node# 3, Node# 4470, X = 4.78372, Y = 0.736738, Z = -7.69864, Val 486.579
Part# 1, Element# 16, Element Node# 1, Node# 4407, X = 4.98532, Y = 0.493795, Z = -7.70596, Val 497.506
Part# 1, Element# 16, Element Node# 2, Node# 4453, X = 4.97955, Y = 0.578781, Z = -7.71002, Val 497.506
Part# 1, Element# 16, Element Node# 3, Node# 4448, X = 5.0825, Y = 0.587131, Z = -7.69352, Val 497.506
Part# 1, Element# 17, Element Node# 1, Node# 4380, X = 4.87821, Y = 0.410847, Z = -7.70372, Val 494.199
Part# 1, Element# 17, Element Node# 2, Node# 4407, X = 4.98532, Y = 0.493795, Z = -7.70596, Val 494.199
Update
[Python V1 – Data_Reader + MeshBuilder + Vertex Color Info]

CODE

import rhinoscriptsyntax as rs
from System.Drawing import Color 
"""Script Written By Luis Quinones
Script Copywritten by [n]igma + computationalMatter
www.luisquinonesdesign.com
www.computationalmatter.com
Script Version Wednesday, July 30, 2011"""

import rhinoscriptsyntax as rs
from System.Drawing import Color 

def makeMeshyMesh(pts,mainValue,faceCount,layer): 
    faceCounter = []
    faceVerts = [0]    
    pt1 = rs.AddPoint(pts[0])
    coord1 = rs.PointCoordinates(pt1)
    pt2 = rs.AddPoint(pts[1])
    coord2 = rs.PointCoordinates(pt2)
    pt3 = rs.AddPoint(pts[2])
    coord3 = rs.PointCoordinates(pt3)        
    if len(pts) == 4:    
        pts4 = rs.AddPoint(pts[3])
        coord4 = rs.PointCoordinates(pts4)        
        testVerts = [coord1,coord2,coord3,coord4]        
    for i in range (faceCount):        
        faceCounter.append(i)        
    faceVerts[0] = faceCounter    
    testVerts = [coord1,coord2,coord3]    
    newMesh = rs.AddMesh(testVerts,faceVerts)    
    vertexcount = rs.MeshVertexCount(newMesh)    
    if not vertexcount:        
        print "did not make mesh"        
    else:        
        colors = []       
        for n in range(rs.MeshVertexCount(newMesh)):             
            mainColor = mainValue[n]
            #print mainColor
            r = mainColor
            if r > 255:
                r = 255
            #print r
            g = mainColor
            if g > 255:
                g = 255
            #print g
            b = mainColor
            if b > 255:
                b = 255
            #print b            
            intMainValue = float(r),float(g),float(b)
            #print intMainValue            
            colors.append(intMainValue)    
        print colors
        rs.MeshVertexColors( newMesh, colors )        
        return newMesh

def Main():
    
    strLayer = rs.AddLayer("MeshLayer")
    strLayer2 = rs.AddLayer("DOTACTION")    
    f = open('C:UserskingLuiDesktopzingbanger2.txt','r')
    #C:UserskingLuiDesktop
    mainValue = []
    tempLOC = []
    ElementList = []   
    count = 1
    counter = []   
    for line in f:        
        trim = line.split(",")
        
        TestNodes = trim[1:]
        #print TestNodes
        TestNodesSplit = TestNodes[0]
        TestNodesSplit2 = TestNodesSplit.split(" ")
        NodeList = TestNodesSplit2[2]
        ElementList.append(NodeList)
        
        XYZValue = trim[4:7]
        #print 'this'+ ' = ' + str(XYZValue)
        
        xValue = XYZValue[0]
        temp = xValue.split(" ")
        newXValue = len(temp)-1
        FinalX = temp[newXValue]
        
        yValue = XYZValue[1]
        temp2 = yValue.split(" ")
        newYValue = len(temp2)-1
        FinalY = temp2[newYValue]
        
        zValue = XYZValue[2]
        temp3 = zValue.split(" ")
        newZValue = len(temp3)-1
        FinalZ = temp3[newZValue]
        
        tempLOC.append([FinalX,FinalY,FinalZ])        
        lastItem = len(trim)-1
        value = trim[lastItem]        
        test = value.split(" ")
        lastItem2 = len(test)-1
        printest = test[lastItem2]        
        mainValue.append(test[lastItem2])        
        count += 1
        counter.append(count)        
    indexPass = []    
    count4 = 0    
    lastValueTrans = len(ElementList)-1
    lastValue = int(ElementList[lastValueTrans])    
    #len = 44 items which means there are 43 and 0
    #index numbers in ElementList go from 1 - 13    
    count5 = 1    
    for z in range(lastValue):
        #print "Element List - " + ElementList[count5] + " XYZ = " + str(tempLOC[count5])
        #print ElementList[count4]        
        transferB = ElementList.index(str(count5))        
        indexPass.append(transferB)        
        count5 += 1          
    for m in range(len(indexPass)):        
        if m != len(indexPass)-1:           
            tempArray = indexPass[m],indexPass[m+1]
            tempValueArray = indexPass[m],indexPass[m+1]                      
            listTrans = tempLOC[tempArray[0]:tempArray[1]]
            print listTrans           
            listColorTrans = mainValue[tempValueArray[0]:tempArray[1]]
            print listColorTrans            
            newcount2 = len(listTrans)           
            ColorTrans = mainValue[0:newcount2]                       
            faceCount = len(listTrans)                        
            mesh = makeMeshyMesh(listTrans,listColorTrans,faceCount,strLayer2)
Main()
Update
[Python V2 – Data_Reader + MeshBuilder + Vertex Color Info [USING CLASSES]

CODE

import rhinoscriptsyntax as rs
#from System.Drawing import Color 

class AlgoNode(): 
    def __init__ (self, LINE):
        #print "made an AlgoNode"
        self.line = LINE
        lineTokens = self.line.split(",")
        self.part = int( lineTokens[0].split(" ")[1] )#propably object count
        self.element = int( lineTokens[1].split(" ")[2] )#face count
        self.elementNode = int( lineTokens[2].split(" ")[3]  )#count of vertex in face
        self.node = int( lineTokens[3].split(" ")[2] )#vertex index
        self.x = float( lineTokens[4].split(" ")[3] )
        self.y = float( lineTokens[5].split(" ")[3] )
        self.z = float( lineTokens[6].split(" ")[3] )
        self.val = float( lineTokens[7].split(" ")[2] )
class AlgoMesh():    
    def __init__(self,path):
        data = open(path,'r')
        self.algoNodeList = []
        for line in data:
            self.algoNodeList.append(AlgoNode(line))    
    def vertices(self):
        #here return the vertices
        result = []
        #for myAlgoNode in self.algoNodeList:
        #    result.append([myAlgoNode.x, myAlgoNode.y, myAlgoNode.z])
        temp4count = self.nodes()
        temp4count.sort()
        allNodes = self.nodes()
        for i in range(temp4count[-1]):
            index = allNodes.index(i+1)
            result.append([self.algoNodeList[index].x, self.algoNodeList[index].y, self.algoNodeList[index].z])
        return result        
    def faceVertices(self):
        #here return the face vartices
        result = []
        oldElement = self.algoNodeList[0].element
        oneFace = []
        for myAlgoNode in self.algoNodeList:
            if myAlgoNode.element == oldElement:
                oneFace.append(myAlgoNode.node-1)
            else:
                oldElement = myAlgoNode.element
                result.append(oneFace)
                oneFace = []
                oneFace.append(myAlgoNode.node-1)
        return result        
    def vertexColors(self):
        #here return the vertex colors
        result = []
        temp4count = self.nodes()
        temp4count.sort()
        allNodes = self.nodes()
        for i in range(temp4count[-1]):
            index = allNodes.index(i+1)
            color = 255*50*self.algoNodeList[index].val / self.maxVal()
            if color>255 : color = 255
            result.append((color,color,color))
        return result    
    def nodes(self):
        #here return the vertices
        result = []
        for myAlgoNode in self.algoNodeList:
            result.append(myAlgoNode.node)
        return result        
    def maxVal(self):
        listOfVals = []
        for myAlgoNode in self.algoNodeList:
            listOfVals.append(myAlgoNode.val)
        listOfVals.sort()
        return listOfVals[-1]        
def Main():
    #myAlgoNode = AlgoNode("Part# 1, Element# 1, Element Node# 1, Node# 368, X = 615.779, Y = -158.81, Z = -358.427, Val 0")
    #print myAlgoNode.val
    myAlgoMesh = AlgoMesh('C:zingbanger2.txt')
    myMesh = rs.AddMesh(myAlgoMesh.vertices(), myAlgoMesh.faceVertices())
    rs.MeshVertexColors(myMesh, myAlgoMesh.vertexColors())
    #rs.AddPointCloud(myAlgoMesh.vertices())   
Main()
Update
  • Share

Leave a reply

Your email address will not be published. Required fields are marked *