diff --git a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp index c9eb91137..36d684959 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp @@ -1136,6 +1136,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, break; // 4 nodes case 4: + // tetra4 volume, four 3-node triangles Base::Console().Log(" %f: Start build up triangle vector for 4 nodes object\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo())); Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes()); switch (facesHelper[l].FaceNo){ @@ -1161,58 +1162,58 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, insEdgeVec(EdgeMap, nIdx3, nIdx0); vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber, 0); break; } - case 1: { // tetra4 volume: face 1 + case 1: { // tetra4 volume: face 1, 3-node triangle Base::Console().Log(" %f: Start build up triangle vector for tetra4 --> face1\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo())); Base::Console().Log(" FaceNo:%i\n",facesHelper[l].FaceNo); int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)]; int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(1)]; int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(2)]; - indices[index++] = nIdx2; indices[index++] = nIdx0; indices[index++] = nIdx1; + indices[index++] = nIdx2; indices[index++] = SO_END_FACE_INDEX; insEdgeVec(EdgeMap,nIdx0,nIdx1); - insEdgeVec(EdgeMap,nIdx0,nIdx2); insEdgeVec(EdgeMap,nIdx1,nIdx2); + insEdgeVec(EdgeMap,nIdx2,nIdx0); vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0); break; } - case 2: { // tetra4 volume: face 2 + case 2: { // tetra4 volume: face 2, 3-node triangle int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)]; - int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(1)]; - int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(3)]; - indices[index++] = nIdx1; + int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(3)]; + int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(1)]; indices[index++] = nIdx0; - indices[index++] = nIdx3; + indices[index++] = nIdx1; + indices[index++] = nIdx2; indices[index++] = SO_END_FACE_INDEX; insEdgeVec(EdgeMap,nIdx0,nIdx1); - insEdgeVec(EdgeMap,nIdx0,nIdx3); - insEdgeVec(EdgeMap,nIdx1,nIdx3); + insEdgeVec(EdgeMap,nIdx1,nIdx2); + insEdgeVec(EdgeMap,nIdx2,nIdx0); vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,1); break; } - case 3: { // tetra4 volume: face 3 - int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(1)]; + case 3: { // tetra4 volume: face 3, 3-node triangle + int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(1)]; + int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(3)]; int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(2)]; - int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(3)]; - indices[index++] = nIdx2; + indices[index++] = nIdx0; indices[index++] = nIdx1; - indices[index++] = nIdx3; + indices[index++] = nIdx2; indices[index++] = SO_END_FACE_INDEX; + insEdgeVec(EdgeMap,nIdx0,nIdx1); insEdgeVec(EdgeMap,nIdx1,nIdx2); - insEdgeVec(EdgeMap,nIdx1,nIdx3); - insEdgeVec(EdgeMap,nIdx2,nIdx3); + insEdgeVec(EdgeMap,nIdx2,nIdx0); vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,2); break; } - case 4: { // tetra4 volume: face 4 - int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)]; - int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(2)]; - int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(3)]; - indices[index++] = nIdx3; + case 4: { // tetra4 volume: face 4, 3-node triangle + int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(2)]; + int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(3)]; + int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(0)]; indices[index++] = nIdx0; + indices[index++] = nIdx1; indices[index++] = nIdx2; indices[index++] = SO_END_FACE_INDEX; - insEdgeVec(EdgeMap,nIdx0,nIdx2); - insEdgeVec(EdgeMap,nIdx0,nIdx3); - insEdgeVec(EdgeMap,nIdx3,nIdx2); + insEdgeVec(EdgeMap,nIdx0,nIdx1); + insEdgeVec(EdgeMap,nIdx1,nIdx2); + insEdgeVec(EdgeMap,nIdx2,nIdx0); vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,3); break; } default: assert(0);