johnwang wrote: ↑Wed Jul 29, 2020 12:01 pm
Is there Element Type? I use the node length of a FemMesh element to decide how to add a Face. If 2d & 3d mixed, maybe there is problem.
To figure out of what type an element is use the method getElementType(Id). It returns a string like, "Node", "Edge", "Face", "Volume", "0DElement" or "Ball".
Unless it's intended your code has some flaws because you won't copy over all nodes. The Nodes attribute already returns a dict with Id+Vector and can be easily copied with:
Code: Select all
for i in femmesh.Nodes.items():
femmeshNew.addNode(*i[1], i[0])
Then when adding the faces there is no need to explicitly check for the number of nodes. Just use the * operator and you are done:
Code: Select all
for id in faces:
nd = femmesh.getElementNodes(id)
femmeshNew.addFace([*nd])
Full example:
Code: Select all
import Fem
femmesh = Fem.FemMesh()
femmesh.addNode(0, 0, 0, 1)
femmesh.addNode(2, 0, 0, 2)
femmesh.addNode(2, 2, 0, 3)
femmesh.addNode(0, 2, 0, 4)
femmesh.addNode(1, 1, 1, 5)
femmesh.addEdge([1,2], 1)
femmesh.addEdge([2,3], 2)
femmesh.addEdge([3,4], 3)
femmesh.addEdge([4,1], 4)
femmesh.addEdge([1,5], 5)
femmesh.addEdge([2,5], 6)
femmesh.addEdge([3,5], 7)
femmesh.addEdge([4,5], 8)
femmesh.addFace([1,4,3,2], 9)
femmesh.addFace([1,2,5], 10)
femmesh.addFace([2,3,5], 11)
femmesh.addFace([3,4,5], 12)
femmesh.addFace([4,1,5], 13)
Fem.show(femmesh)
nodes = femmesh.Nodes
faces = femmesh.Faces
femmeshNew = Fem.FemMesh()
for i in femmesh.Nodes.items():
femmeshNew.addNode(*i[1], i[0])
for id in faces:
nd = femmesh.getElementNodes(id)
femmeshNew.addFace([*nd])
Fem.show(femmeshNew)