Add slecection and edge visualization for Hex8
This commit is contained in:
parent
906011451e
commit
450b028042
|
@ -400,7 +400,7 @@ std::string ViewProviderFemMesh::getElement(const SoDetail* detail) const
|
||||||
const SoFaceDetail* face_detail = static_cast<const SoFaceDetail*>(detail);
|
const SoFaceDetail* face_detail = static_cast<const SoFaceDetail*>(detail);
|
||||||
unsigned long edx = vFaceElementIdx[face_detail->getFaceIndex()];
|
unsigned long edx = vFaceElementIdx[face_detail->getFaceIndex()];
|
||||||
|
|
||||||
str << "Elem" << (edx>>3) << "F"<< (edx&7);
|
str << "Elem" << (edx>>3) << "F"<< (edx&7)+1;
|
||||||
}
|
}
|
||||||
//else if (detail->getTypeId() == SoLineDetail::getClassTypeId()) {
|
//else if (detail->getTypeId() == SoLineDetail::getClassTypeId()) {
|
||||||
// const SoLineDetail* line_detail = static_cast<const SoLineDetail*>(detail);
|
// const SoLineDetail* line_detail = static_cast<const SoLineDetail*>(detail);
|
||||||
|
@ -798,64 +798,124 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, SoCoordin
|
||||||
case 8: // Hex 8
|
case 8: // Hex 8
|
||||||
switch(facesHelper[l].FaceNo){
|
switch(facesHelper[l].FaceNo){
|
||||||
case 1: {
|
case 1: {
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
||||||
|
int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
insEdgeVec(EdgeMap,nIdx0,nIdx1);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
insEdgeVec(EdgeMap,nIdx0,nIdx3);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0);
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap,nIdx2,nIdx1);
|
||||||
|
insEdgeVec(EdgeMap,nIdx2,nIdx3);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,0);
|
||||||
break; }
|
break; }
|
||||||
case 2: {
|
case 2: {
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
int nIdx6 = mapNodeIndex[facesHelper[l].Element->GetNode(6)];
|
||||||
|
int nIdx7 = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
||||||
|
indices[index++] = nIdx4;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
insEdgeVec(EdgeMap,nIdx4,nIdx5);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(6)];
|
insEdgeVec(EdgeMap,nIdx4,nIdx7);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,1);
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx6;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap,nIdx6,nIdx5);
|
||||||
|
insEdgeVec(EdgeMap,nIdx6,nIdx7);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,1);
|
||||||
break; }
|
break; }
|
||||||
case 3: {
|
case 3: {
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
||||||
|
int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
insEdgeVec(EdgeMap,nIdx1,nIdx0);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
insEdgeVec(EdgeMap,nIdx1,nIdx5);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,2);
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx4;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap,nIdx4,nIdx0);
|
||||||
|
insEdgeVec(EdgeMap,nIdx4,nIdx5);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,2);
|
||||||
break; }
|
break; }
|
||||||
case 4: {
|
case 4: {
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
int nIdx1 = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(1)];
|
int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
int nIdx5 = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
||||||
|
int nIdx6 = mapNodeIndex[facesHelper[l].Element->GetNode(6)];
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx1;
|
||||||
|
indices[index++] = nIdx2;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(5)];
|
insEdgeVec(EdgeMap,nIdx1,nIdx5);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
insEdgeVec(EdgeMap,nIdx1,nIdx2);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(6)];
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,3);
|
||||||
|
indices[index++] = nIdx5;
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx6;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap,nIdx6,nIdx5);
|
||||||
|
insEdgeVec(EdgeMap,nIdx6,nIdx2);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,3);
|
||||||
break; }
|
break; }
|
||||||
case 5: {
|
case 5: {
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
int nIdx2 = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
int nIdx6 = mapNodeIndex[facesHelper[l].Element->GetNode(6)];
|
||||||
|
int nIdx7 = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(2)];
|
insEdgeVec(EdgeMap,nIdx3,nIdx2);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
insEdgeVec(EdgeMap,nIdx3,nIdx7);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(6)];
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,4);
|
||||||
|
indices[index++] = nIdx2;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
|
indices[index++] = nIdx6;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap,nIdx6,nIdx2);
|
||||||
|
insEdgeVec(EdgeMap,nIdx6,nIdx7);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,4);
|
||||||
break; }
|
break; }
|
||||||
case 6: {
|
case 6: {
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
int nIdx0 = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(0)];
|
int nIdx3 = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
int nIdx4 = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
||||||
|
int nIdx7 = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx0;
|
||||||
|
indices[index++] = nIdx4;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(3)];
|
insEdgeVec(EdgeMap,nIdx0,nIdx4);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(4)];
|
insEdgeVec(EdgeMap,nIdx0,nIdx3);
|
||||||
indices[index++] = mapNodeIndex[facesHelper[l].Element->GetNode(7)];
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,5);
|
||||||
|
indices[index++] = nIdx3;
|
||||||
|
indices[index++] = nIdx4;
|
||||||
|
indices[index++] = nIdx7;
|
||||||
indices[index++] = SO_END_FACE_INDEX;
|
indices[index++] = SO_END_FACE_INDEX;
|
||||||
|
insEdgeVec(EdgeMap,nIdx7,nIdx4);
|
||||||
|
insEdgeVec(EdgeMap,nIdx7,nIdx3);
|
||||||
|
vFaceElementIdx[indexIdx++] = ElemFold(facesHelper[l].ElementNumber,5);
|
||||||
break; }
|
break; }
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user