diff --git a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp index 36d6849595..4cb598c575 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp @@ -782,8 +782,8 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, BndBox.Add(facesHelper[i++].set(4, aFace, aFace->GetID(), 0, aFace->GetNode(0), aFace->GetNode(1), aFace->GetNode(2), aFace->GetNode(3))); break; case 6: - //tria6 face = N1, N2, N3, N4, N5, N6 - BndBox.Add(facesHelper[i++].set(6, aFace, aFace->GetID(), 0, aFace->GetNode(0), aFace->GetNode(1), aFace->GetNode(2), aFace->GetNode(3), aFace->GetNode(4), aFace->GetNode(5))); + //tria6 face = N1, N4, N2, N5, N3, N6 + BndBox.Add(facesHelper[i++].set(6, aFace, aFace->GetID(), 0, aFace->GetNode(0), aFace->GetNode(3), aFace->GetNode(1), aFace->GetNode(4), aFace->GetNode(2), aFace->GetNode(5))); break; case 8: //quad8 face = N1, N2, N3, N4, N5, N6, N7, N8 @@ -1221,50 +1221,51 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, break; // 6 nodes case 6: + // tria6 face Base::Console().Log(" %f: Start build up triangle vector for 6 nodes object\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo())); Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes()); switch (facesHelper[l].FaceNo){ - case 0: { // tria6 face + case 0: { // tria6 face, 6-node triangle Base::Console().Log(" %f: Start build up triangle vector for tria6 face\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo())); Base::Console().Log(" NumNodes:%i\n",facesHelper[l].Element->NbNodes()); // prefeche all node indexes of this face int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)]; - int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(1)]; - int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(2)]; - int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(3)]; - int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(4)]; + int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(3)]; + int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(1)]; + int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(4)]; + int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(2)]; int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(5)]; // create triangle number 1 ---------------------------------------------- // fill in the node indexes in CLOCKWISE order - indices[index++] = nIdx0; - indices[index++] = nIdx3; indices[index++] = nIdx5; + indices[index++] = nIdx0; + indices[index++] = nIdx1; indices[index++] = SO_END_FACE_INDEX; // add the two edge segments for that triangle - insEdgeVec(EdgeMap, nIdx0, nIdx3); - insEdgeVec(EdgeMap, nIdx0, nIdx5); + insEdgeVec(EdgeMap, nIdx5, nIdx0); + insEdgeVec(EdgeMap, nIdx0, nIdx1); // rember the element and face number for that triangle - vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber, 0); + vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0); // create triangle number 2 ---------------------------------------------- - indices[index++] = nIdx3; indices[index++] = nIdx1; - indices[index++] = nIdx4; - indices[index++] = SO_END_FACE_INDEX; - insEdgeVec(EdgeMap, nIdx3, nIdx1); - insEdgeVec(EdgeMap, nIdx1, nIdx4); - vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber, 0); - // create triangle number 3 ---------------------------------------------- - indices[index++] = nIdx4; indices[index++] = nIdx2; - indices[index++] = nIdx5; + indices[index++] = nIdx3; indices[index++] = SO_END_FACE_INDEX; - insEdgeVec(EdgeMap, nIdx4, nIdx2); - insEdgeVec(EdgeMap, nIdx2, nIdx5); - vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber, 0); - // create triangle number 4 ---------------------------------------------- - indices[index++] = nIdx5; + insEdgeVec(EdgeMap, nIdx1, nIdx2); + insEdgeVec(EdgeMap, nIdx2, nIdx3); + vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0); + // create triangle number 3 ---------------------------------------------- indices[index++] = nIdx3; indices[index++] = nIdx4; + indices[index++] = nIdx5; + indices[index++] = SO_END_FACE_INDEX; + insEdgeVec(EdgeMap, nIdx3, nIdx4); + insEdgeVec(EdgeMap, nIdx4, nIdx5); + vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0); + // create triangle number 4 ---------------------------------------------- + indices[index++] = nIdx1; + indices[index++] = nIdx3; + indices[index++] = nIdx5; indices[index++] = SO_END_FACE_INDEX; // this triangle has no edge (inner triangle). break; }