FEM: Mesh ViewProvider, change node order and painting of tria6
This commit is contained in:
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user