-// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
// SMESH StdMeshers_Penta_3D implementaion of SMESH idl descriptions
// File : StdMeshers_Penta_3D.cxx
// Module : SMESH
//purpose :
//=======================================================================
StdMeshers_Penta_3D::StdMeshers_Penta_3D()
-: myErrorStatus(SMESH_ComputeError::New())
+ : myErrorStatus(SMESH_ComputeError::New())
{
myTol3D=0.1;
myWallNodesMaps.resize( SMESH_Block::NbFaces() );
//purpose :
//=======================================================================
bool StdMeshers_Penta_3D::Compute(SMESH_Mesh& aMesh,
- const TopoDS_Shape& aShape)
+ const TopoDS_Shape& aShape)
{
MESSAGE("StdMeshers_Penta_3D::Compute()");
//
//
if ( SMESH_Block::IsEdgeID (aSID)) {
const SMDS_EdgePosition* epos =
- static_cast<const SMDS_EdgePosition*>(aNode->GetPosition().get());
+ static_cast<const SMDS_EdgePosition*>(aNode->GetPosition());
myBlock.ComputeParameters( epos->GetUParameter(), aS, aCoords );
}
else {
SMESH_Block::TShapeID wallFaceID[ NB_WALL_FACES ] = {
SMESH_Block::ID_Fx0z, SMESH_Block::ID_Fx1z,
SMESH_Block::ID_F0yz, SMESH_Block::ID_F1yz
- };
+ };
SMESH_Block::TShapeID baseEdgeID[ NB_WALL_FACES ] = {
SMESH_Block::ID_Ex00, SMESH_Block::ID_Ex10,
SMESH_Block::ID_E0y0, SMESH_Block::ID_E1y0
- };
+ };
for ( i = 0; i < NB_WALL_FACES ; ++i ) {
int fIndex = SMESH_Block::ShapeIndex( wallFaceID[ i ]);
bool ok = LoadIJNodes (myWallNodesMaps[ fIndex ],
ShapeSupportID(bIsUpperLayer, aBNSSID, aSSID);
if (!myErrorStatus->IsOK()) {
MESSAGE("StdMeshers_Penta_3D::MakeNodes() ");
- return;
+ return;
}
//
aTN.SetShapeSupportID(aSSID);
aTN.SetBaseNodeID(iBNID);
//
if (aSSID!=SMESH_Block::ID_NONE){
- // try to find the node
- const TopoDS_Shape& aS=myBlock.Shape((int)aSSID);
- FindNodeOnShape(aS, aCoords, i, aTN);
+ // try to find the node
+ const TopoDS_Shape& aS=myBlock.Shape((int)aSSID);
+ FindNodeOnShape(aS, aCoords, i, aTN);
}
else{
- // create node and get it id
- CreateNode (bIsUpperLayer, aCoords, aTN);
+ // create node and get its id
+ CreateNode (bIsUpperLayer, aCoords, aTN);
//
if ( bIsUpperLayer ) {
const SMDS_MeshNode* n = aTN.Node();
}
if (!myErrorStatus->IsOK()) {
MESSAGE("StdMeshers_Penta_3D::MakeNodes() ");
- return;
+ return;
}
//
myTNodes[ij]=aTN;
}
}
- //DEB
- /*
- {
- int iSSID, iBNID, aID;
- //
- for (i=0; i<myISize; ++i) {
- printf(" Layer# %d\n", i);
- for (j=0; j<myJSize; ++j) {
- ij=i*myJSize+j;
- const StdMeshers_TNode& aTN=myTNodes[ij];
- //const StdMeshers_TNode& aTN=aTNodes[ij];
- const gp_XYZ& aXYZ=aTN.NormCoord();
- iSSID=aTN.ShapeSupportID();
- iBNID=aTN.BaseNodeID();
- //
- const SMDS_MeshNode* aNode=aTN.Node();
- aID=aNode->GetID();
- aX=aNode->X();
- aY=aNode->Y();
- aZ=aNode->Z();
- printf("*** j:%d BNID#%d iSSID:%d ID:%d { %lf %lf %lf }, { %lf %lf %lf }\n",
- j, iBNID, iSSID, aID, aXYZ.X(), aXYZ.Y(), aXYZ.Z(), aX, aY, aZ);
- }
- }
- }
- */
- //DEB t
}
//=======================================================================
void StdMeshers_Penta_3D::FindNodeOnShape(const TopoDS_Shape& aS,
- const gp_XYZ& aParams,
+ const gp_XYZ& aParams,
const int z,
- StdMeshers_TNode& aTN)
+ StdMeshers_TNode& aTN)
{
double aX, aY, aZ, aD, aTol2, minD;
gp_Pnt aP1, aP2;
}
else {
// this variant is better for other cases
-// SMESH_MesherHelper helper( *GetMesh() );
-// const TopoDS_Edge & edge = TopoDS::Edge( myBlock.Shape( edgeVec[ TOP ]));
-// double u1 = helper.GetNodeU( edge, n1 );
-// double u2 = helper.GetNodeU( edge, n2 );
-// double u = ( 1. - r ) * u1 + r * u2;
-// gp_XYZ topNodeParams;
-// myBlock.Block().EdgeParameters( edgeVec[ TOP ], u, topNodeParams );
-// myBlock.Block().EdgePoint( edgeVec[ TOP ],
-// topNodeParams,
-// myShapeXYZ[ edgeVec[ TOP ]]);
+ // SMESH_MesherHelper helper( *GetMesh() );
+ // const TopoDS_Edge & edge = TopoDS::Edge( myBlock.Shape( edgeVec[ TOP ]));
+ // double u1 = helper.GetNodeU( edge, n1 );
+ // double u2 = helper.GetNodeU( edge, n2 );
+ // double u = ( 1. - r ) * u1 + r * u2;
+ // gp_XYZ topNodeParams;
+ // myBlock.Block().EdgeParameters( edgeVec[ TOP ], u, topNodeParams );
+ // myBlock.Block().EdgePoint( edgeVec[ TOP ],
+ // topNodeParams,
+ // myShapeXYZ[ edgeVec[ TOP ]]);
}
// base edge
const StdMeshers_TNode& aTN = myTNodes[ij];
aSSID=aTN.ShapeSupportID();
if (aSSID==SMESH_Block::ID_NONE) {
- SMDS_MeshNode* aNode = (SMDS_MeshNode*)aTN.Node();
- meshDS->SetNodeInVolume(aNode, shapeID);
+ SMDS_MeshNode* aNode = (SMDS_MeshNode*)aTN.Node();
+ meshDS->SetNodeInVolume(aNode, shapeID);
}
}
}
if ( aN.size() < nbFaceNodes * 2 )
aN.resize( nbFaceNodes * 2 );
//
- k=0;
- aItNodes=pE0->nodesIterator();
- while (aItNodes->more()) {
- //const SMDS_MeshElement* pNode = aItNodes->next();
- const SMDS_MeshNode* pNode =
- static_cast<const SMDS_MeshNode*> (aItNodes->next());
- if(myTool->IsMedium(pNode))
- continue;
+ for ( k=0; k<nbFaceNodes; ++k ) {
+ const SMDS_MeshNode* pNode = pE0->GetNode(k);
+// if(myTool->IsMedium(pNode))
+// continue;
aID0 = pNode->GetID();
aJ[k] = GetIndexOnLayer(aID0);
if (!myErrorStatus->IsOK()) {
MESSAGE("StdMeshers_Penta_3D::MakeVolumeMesh");
- return;
+ return;
}
- //
- ++k;
}
//
bool forward = true;
i1=i;
i2=i+1;
for(j=0; j<nbFaceNodes; ++j) {
- ij = i1*myJSize+aJ[j];
- const StdMeshers_TNode& aTN1 = myTNodes[ij];
- const SMDS_MeshNode* aN1 = aTN1.Node();
- aN[j]=aN1;
- //
- ij=i2*myJSize+aJ[j];
- const StdMeshers_TNode& aTN2 = myTNodes[ij];
- const SMDS_MeshNode* aN2 = aTN2.Node();
- aN[j+nbFaceNodes] = aN2;
+ ij = i1*myJSize+aJ[j];
+ const StdMeshers_TNode& aTN1 = myTNodes[ij];
+ const SMDS_MeshNode* aN1 = aTN1.Node();
+ aN[j]=aN1;
+ //
+ ij=i2*myJSize+aJ[j];
+ const StdMeshers_TNode& aTN2 = myTNodes[ij];
+ const SMDS_MeshNode* aN2 = aTN2.Node();
+ aN[j+nbFaceNodes] = aN2;
}
// check if volume orientation will be ok
if ( i == 0 ) {
itn = aSM0->GetNodes();
aNbNodes = aSM0->NbNodes();
//printf("** aNbNodes=%d\n", aNbNodes);
-
+ myTool->SetSubShape( aFxy1 ); // to set medium nodes to aFxy1
//
// set elements on aFxy1
vector<const SMDS_MeshNode*> aNodes1;
aJ = GetIndexOnLayer(aID0);
if (!myErrorStatus->IsOK()) {
MESSAGE("StdMeshers_Penta_3D::MakeMeshOnFxy1() ");
- return;
+ return;
}
//
ij = aLevel*myJSize + aJ;
}
meshDS->SetMeshElementOnShape(face, aFxy1);
}
+ myTool->SetSubShape( myShape );
// update compute state of top face submesh
aSubMesh1->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
//purpose :
//=======================================================================
void StdMeshers_Penta_3D::CreateNode(const bool bIsUpperLayer,
- const gp_XYZ& aParams,
- StdMeshers_TNode& aTN)
+ const gp_XYZ& aParams,
+ StdMeshers_TNode& aTN)
{
double aX, aY, aZ;
//
SMDS_MeshNode* pNode=NULL;
aTN.SetNode(pNode);
//
-// if (bIsUpperLayer) {
-// // point on face Fxy1
-// const TopoDS_Shape& aS=myBlock.Shape(SMESH_Block::ID_Fxy1);
-// myBlock.Point(aParams, aS, aP);
-// }
-// else {
-// // point inside solid
-// myBlock.Point(aParams, aP);
-// }
+ // if (bIsUpperLayer) {
+ // // point on face Fxy1
+ // const TopoDS_Shape& aS=myBlock.Shape(SMESH_Block::ID_Fxy1);
+ // myBlock.Point(aParams, aS, aP);
+ // }
+ // else {
+ // // point inside solid
+ // myBlock.Point(aParams, aP);
+ // }
if (bIsUpperLayer) {
double u = aParams.X(), v = aParams.Y();
double u1 = ( 1. - u ), v1 = ( 1. - v );
SMESH_Block::ShellPoint( aParams, myShapeXYZ, aP.ChangeCoord() );
}
//
-// iErr=myBlock.ErrorStatus();
-// if (iErr) {
-// myErrorStatus=12; // can not find the node point;
-// return;
-// }
+ // iErr=myBlock.ErrorStatus();
+ // if (iErr) {
+ // myErrorStatus=12; // can not find the node point;
+ // return;
+ // }
//
aX=aP.X(); aY=aP.Y(); aZ=aP.Z();
//
SMESHDS_Mesh* pMeshDS = pMesh->GetMeshDS();
//
pNode = pMeshDS->AddNode(aX, aY, aZ);
-
+
aTN.SetNode(pNode);
}
//purpose :
//=======================================================================
void StdMeshers_Penta_3D::ShapeSupportID(const bool bIsUpperLayer,
- const SMESH_Block::TShapeID aBNSSID,
- SMESH_Block::TShapeID& aSSID)
+ const SMESH_Block::TShapeID aBNSSID,
+ SMESH_Block::TShapeID& aSSID)
{
switch (aBNSSID) {
- case SMESH_Block::ID_V000:
- aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V001 : SMESH_Block::ID_E00z;
- break;
- case SMESH_Block::ID_V100:
- aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V101 : SMESH_Block::ID_E10z;
- break;
- case SMESH_Block::ID_V110:
- aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V111 : SMESH_Block::ID_E11z;
- break;
- case SMESH_Block::ID_V010:
- aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V011 : SMESH_Block::ID_E01z;
- break;
- case SMESH_Block::ID_Ex00:
- aSSID=(bIsUpperLayer) ? SMESH_Block::ID_Ex01 : SMESH_Block::ID_Fx0z;
- break;
- case SMESH_Block::ID_Ex10:
- aSSID=(bIsUpperLayer) ? SMESH_Block::ID_Ex11 : SMESH_Block::ID_Fx1z;
- break;
- case SMESH_Block::ID_E0y0:
- aSSID=(bIsUpperLayer) ? SMESH_Block::ID_E0y1 : SMESH_Block::ID_F0yz;
- break;
- case SMESH_Block::ID_E1y0:
- aSSID=(bIsUpperLayer) ? SMESH_Block::ID_E1y1 : SMESH_Block::ID_F1yz;
- break;
- case SMESH_Block::ID_Fxy0:
- aSSID=SMESH_Block::ID_NONE;//(bIsUpperLayer) ? Shape_ID_Fxy1 : Shape_ID_NONE;
- break;
- default:
- aSSID=SMESH_Block::ID_NONE;
- myErrorStatus->myName=10; // Can not find supporting shape ID
- myErrorStatus->myComment = "Internal error of StdMeshers_Penta_3D";
- break;
+ case SMESH_Block::ID_V000:
+ aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V001 : SMESH_Block::ID_E00z;
+ break;
+ case SMESH_Block::ID_V100:
+ aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V101 : SMESH_Block::ID_E10z;
+ break;
+ case SMESH_Block::ID_V110:
+ aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V111 : SMESH_Block::ID_E11z;
+ break;
+ case SMESH_Block::ID_V010:
+ aSSID=(bIsUpperLayer) ? SMESH_Block::ID_V011 : SMESH_Block::ID_E01z;
+ break;
+ case SMESH_Block::ID_Ex00:
+ aSSID=(bIsUpperLayer) ? SMESH_Block::ID_Ex01 : SMESH_Block::ID_Fx0z;
+ break;
+ case SMESH_Block::ID_Ex10:
+ aSSID=(bIsUpperLayer) ? SMESH_Block::ID_Ex11 : SMESH_Block::ID_Fx1z;
+ break;
+ case SMESH_Block::ID_E0y0:
+ aSSID=(bIsUpperLayer) ? SMESH_Block::ID_E0y1 : SMESH_Block::ID_F0yz;
+ break;
+ case SMESH_Block::ID_E1y0:
+ aSSID=(bIsUpperLayer) ? SMESH_Block::ID_E1y1 : SMESH_Block::ID_F1yz;
+ break;
+ case SMESH_Block::ID_Fxy0:
+ aSSID=SMESH_Block::ID_NONE;//(bIsUpperLayer) ? Shape_ID_Fxy1 : Shape_ID_NONE;
+ break;
+ default:
+ aSSID=SMESH_Block::ID_NONE;
+ myErrorStatus->myName=10; // Can not find supporting shape ID
+ myErrorStatus->myComment = "Internal error of StdMeshers_Penta_3D";
+ break;
}
return;
}
const SMDS_MeshElement * pElement = itf->next();
aElementType = pElement->GetType();
if (aElementType==SMDSAbs_Face) {
- iNbNodes = pElement->NbNodes();
- if ( iNbNodes==3 || (pElement->IsQuadratic() && iNbNodes==6) ) {
- aFTr = aF;
- ++iCnt;
- if (iCnt>1) {
- // \begin{E.A.}
- // The current algorithm fails if there is more that one
- // face wich contains triangles ...
- // In that case, replace return by break to try another
- // method (coded in "if (iCnt != 1) { ... }")
- //
+ iNbNodes = pElement->NbNodes();
+ if ( iNbNodes==3 || (pElement->IsQuadratic() && iNbNodes==6) ) {
+ aFTr = aF;
+ ++iCnt;
+ if (iCnt>1) {
+ // \begin{E.A.}
+ // The current algorithm fails if there is more that one
+ // face wich contains triangles ...
+ // In that case, replace return by break to try another
+ // method (coded in "if (iCnt != 1) { ... }")
+ //
// MESSAGE("StdMeshers_Penta_3D::MakeBlock() ");
- // myErrorStatus=5; // more than one face has triangulation
- // return;
- break;
- // \end{E.A.}
- }
- break; // next face
- }
+ // myErrorStatus=5; // more than one face has triangulation
+ // return;
+ break;
+ // \end{E.A.}
+ }
+ break; // next face
+ }
}
}
}
int has_only_quad_f6 = 1;
//
for (i=1; i<=iNbF; ++i) {
- int ok = 1;
- const TopoDS_Shape& aF = aM(i);
- SMESH_subMesh *aSubMesh = pMesh->GetSubMeshContaining(aF);
- SMESHDS_SubMesh *aSM = aSubMesh->GetSubMeshDS();
- SMDS_ElemIteratorPtr itf = aSM->GetElements();
- while(itf->more()) {
- const SMDS_MeshElement * pElement = itf->next();
- aElementType = pElement->GetType();
- if (aElementType==SMDSAbs_Face) {
- iNbNodes = pElement->NbNodes();
- if ( iNbNodes!=4 ) {
- ok = 0;
- break ;
- }
- }
- }
- if (i==1) has_only_quad_f1 = ok ;
- if (i==2) has_only_quad_f2 = ok ;
- if (i==3) has_only_quad_f3 = ok ;
- if (i==4) has_only_quad_f4 = ok ;
- if (i==5) has_only_quad_f5 = ok ;
- if (i==6) has_only_quad_f6 = ok ;
+ int ok = 1;
+ const TopoDS_Shape& aF = aM(i);
+ SMESH_subMesh *aSubMesh = pMesh->GetSubMeshContaining(aF);
+ SMESHDS_SubMesh *aSM = aSubMesh->GetSubMeshDS();
+ SMDS_ElemIteratorPtr itf = aSM->GetElements();
+ while(itf->more()) {
+ const SMDS_MeshElement * pElement = itf->next();
+ aElementType = pElement->GetType();
+ if (aElementType==SMDSAbs_Face) {
+ iNbNodes = pElement->NbNodes();
+ if ( iNbNodes!=4 ) {
+ ok = 0;
+ break ;
+ }
+ }
+ }
+ if (i==1) has_only_quad_f1 = ok ;
+ if (i==2) has_only_quad_f2 = ok ;
+ if (i==3) has_only_quad_f3 = ok ;
+ if (i==4) has_only_quad_f4 = ok ;
+ if (i==5) has_only_quad_f5 = ok ;
+ if (i==6) has_only_quad_f6 = ok ;
}
//
TopTools_IndexedMapOfShape aE;
TopExp::MapShapes(myShape, TopAbs_EDGE, aE);
int iNbE = aE.Extent();
if (iNbE == 12) {
- //
- int nb_e01 = pMesh->GetSubMeshContaining(aE(1))->GetSubMeshDS()->NbElements();
- int nb_e02 = pMesh->GetSubMeshContaining(aE(2))->GetSubMeshDS()->NbElements();
- int nb_e03 = pMesh->GetSubMeshContaining(aE(3))->GetSubMeshDS()->NbElements();
- int nb_e04 = pMesh->GetSubMeshContaining(aE(4))->GetSubMeshDS()->NbElements();
- int nb_e05 = pMesh->GetSubMeshContaining(aE(5))->GetSubMeshDS()->NbElements();
- int nb_e06 = pMesh->GetSubMeshContaining(aE(6))->GetSubMeshDS()->NbElements();
- int nb_e07 = pMesh->GetSubMeshContaining(aE(7))->GetSubMeshDS()->NbElements();
- int nb_e08 = pMesh->GetSubMeshContaining(aE(8))->GetSubMeshDS()->NbElements();
- int nb_e09 = pMesh->GetSubMeshContaining(aE(9))->GetSubMeshDS()->NbElements();
- int nb_e10 = pMesh->GetSubMeshContaining(aE(10))->GetSubMeshDS()->NbElements();
- int nb_e11 = pMesh->GetSubMeshContaining(aE(11))->GetSubMeshDS()->NbElements();
- int nb_e12 = pMesh->GetSubMeshContaining(aE(12))->GetSubMeshDS()->NbElements();
- //
- int nb_ok = 0 ;
- //
- if ( (nb_e01==nb_e03) && (nb_e03==nb_e05) && (nb_e05==nb_e07) ) {
- if ( has_only_quad_f1 && has_only_quad_f2 && has_only_quad_f3 && has_only_quad_f4 ) {
- if ( (nb_e09==nb_e10) && (nb_e08==nb_e06) && (nb_e11==nb_e12) && (nb_e04==nb_e02) ) {
- if (nb_f5==nb_f6) {
- nb_ok += 1;
- aFTr = aM(5);
- }
- }
- }
- }
- if ( (nb_e02==nb_e04) && (nb_e04==nb_e06) && (nb_e06==nb_e08) ) {
- if ( has_only_quad_f1 && has_only_quad_f2 && has_only_quad_f5 && has_only_quad_f6 ) {
- if ( (nb_e01==nb_e03) && (nb_e10==nb_e12) && (nb_e05==nb_e07) && (nb_e09==nb_e11) ) {
- if (nb_f3==nb_f4) {
- nb_ok += 1;
- aFTr = aM(3);
- }
- }
- }
- }
- if ( (nb_e09==nb_e10) && (nb_e10==nb_e11) && (nb_e11==nb_e12) ) {
- if ( has_only_quad_f3 && has_only_quad_f4 && has_only_quad_f5 && has_only_quad_f6 ) {
- if ( (nb_e01==nb_e05) && (nb_e02==nb_e06) && (nb_e03==nb_e07) && (nb_e04==nb_e08) ) {
- if (nb_f1==nb_f2) {
- nb_ok += 1;
- aFTr = aM(1);
- }
- }
- }
- }
- //
- if ( nb_ok == 1 ) {
- isOK = 1;
- }
- //
+ //
+ int nb_e01 = pMesh->GetSubMeshContaining(aE(1))->GetSubMeshDS()->NbElements();
+ int nb_e02 = pMesh->GetSubMeshContaining(aE(2))->GetSubMeshDS()->NbElements();
+ int nb_e03 = pMesh->GetSubMeshContaining(aE(3))->GetSubMeshDS()->NbElements();
+ int nb_e04 = pMesh->GetSubMeshContaining(aE(4))->GetSubMeshDS()->NbElements();
+ int nb_e05 = pMesh->GetSubMeshContaining(aE(5))->GetSubMeshDS()->NbElements();
+ int nb_e06 = pMesh->GetSubMeshContaining(aE(6))->GetSubMeshDS()->NbElements();
+ int nb_e07 = pMesh->GetSubMeshContaining(aE(7))->GetSubMeshDS()->NbElements();
+ int nb_e08 = pMesh->GetSubMeshContaining(aE(8))->GetSubMeshDS()->NbElements();
+ int nb_e09 = pMesh->GetSubMeshContaining(aE(9))->GetSubMeshDS()->NbElements();
+ int nb_e10 = pMesh->GetSubMeshContaining(aE(10))->GetSubMeshDS()->NbElements();
+ int nb_e11 = pMesh->GetSubMeshContaining(aE(11))->GetSubMeshDS()->NbElements();
+ int nb_e12 = pMesh->GetSubMeshContaining(aE(12))->GetSubMeshDS()->NbElements();
+ //
+ int nb_ok = 0 ;
+ //
+ if ( (nb_e01==nb_e03) && (nb_e03==nb_e05) && (nb_e05==nb_e07) ) {
+ if ( has_only_quad_f1 && has_only_quad_f2 && has_only_quad_f3 && has_only_quad_f4 ) {
+ if ( (nb_e09==nb_e10) && (nb_e08==nb_e06) && (nb_e11==nb_e12) && (nb_e04==nb_e02) ) {
+ if (nb_f5==nb_f6) {
+ nb_ok += 1;
+ aFTr = aM(5);
+ }
+ }
+ }
+ }
+ if ( (nb_e02==nb_e04) && (nb_e04==nb_e06) && (nb_e06==nb_e08) ) {
+ if ( has_only_quad_f1 && has_only_quad_f2 && has_only_quad_f5 && has_only_quad_f6 ) {
+ if ( (nb_e01==nb_e03) && (nb_e10==nb_e12) && (nb_e05==nb_e07) && (nb_e09==nb_e11) ) {
+ if (nb_f3==nb_f4) {
+ nb_ok += 1;
+ aFTr = aM(3);
+ }
+ }
+ }
+ }
+ if ( (nb_e09==nb_e10) && (nb_e10==nb_e11) && (nb_e11==nb_e12) ) {
+ if ( has_only_quad_f3 && has_only_quad_f4 && has_only_quad_f5 && has_only_quad_f6 ) {
+ if ( (nb_e01==nb_e05) && (nb_e02==nb_e06) && (nb_e03==nb_e07) && (nb_e04==nb_e08) ) {
+ if (nb_f1==nb_f2) {
+ nb_ok += 1;
+ aFTr = aM(1);
+ }
+ }
+ }
+ }
+ //
+ if ( nb_ok == 1 ) {
+ isOK = 1;
+ }
+ //
}
}
if (!isOK) {
const TopoDS_Edge& aE=TopoDS::Edge(aEx);
TopExp::Vertices(aE, aV[0], aV[1]);
for (i=0; i<2; ++i) {
- if (!aV[i].IsSame(aV000)) {
- aV001=aV[i];
- bFound=!bFound;
- break;
- }
+ if (!aV[i].IsSame(aV000)) {
+ aV001=aV[i];
+ bFound=!bFound;
+ break;
+ }
}
}
}
SMESHDS_SubMesh* smVft = theMesh->MeshElements( vft );
if (!smFace || !smb || !smt || !sm1 || !sm2 || !smVfb || !smVlb || !smVft ) {
MESSAGE( "NULL submesh " <<smFace<<" "<<smb<<" "<<smt<<" "<<
- sm1<<" "<<sm2<<" "<<smVfb<<" "<<smVlb<<" "<<smVft);
+ sm1<<" "<<sm2<<" "<<smVfb<<" "<<smVlb<<" "<<smVft);
return false;
}
if ( smb->NbNodes() != smt->NbNodes() || sm1->NbNodes() != sm2->NbNodes() ) {
int nf = sm1->NbNodes()*smb->NbNodes() - n3*n4;
if( nf != smFace->NbNodes() ) {
MESSAGE( "Wrong nb face nodes: " <<
- sm1->NbNodes()<<" "<<smb->NbNodes()<<" "<<smFace->NbNodes());
+ sm1->NbNodes()<<" "<<smb->NbNodes()<<" "<<smFace->NbNodes());
return false;
}
}
else {
MESSAGE( "Wrong nb face nodes: " <<
- sm1->NbNodes()<<" "<<smb->NbNodes()<<" "<<smFace->NbNodes());
+ sm1->NbNodes()<<" "<<smb->NbNodes()<<" "<<smFace->NbNodes());
return false;
}
}
if(myTool->IsMedium(node))
continue;
const SMDS_EdgePosition* pos =
- dynamic_cast<const SMDS_EdgePosition*>( node->GetPosition().get() );
+ dynamic_cast<const SMDS_EdgePosition*>( node->GetPosition() );
if ( !pos ) {
return false;
}
if(myTool->IsMedium(node))
continue;
const SMDS_EdgePosition* pos =
- dynamic_cast<const SMDS_EdgePosition*>( node->GetPosition().get() );
+ dynamic_cast<const SMDS_EdgePosition*>( node->GetPosition() );
if ( !pos ) {
return false;
}
}
}
else if ( (nbFaceNodes==3 || (myCreateQuadratic && nbFaceNodes==6) ) &&
- n3 == par_nVec_1->second[ row ] ) {
+ n3 == par_nVec_1->second[ row ] ) {
n1 = n3;
}
else {
//purpose :
//=======================================================================
void StdMeshers_SMESHBlock::Load(const TopoDS_Shell& theShell,
- const TopoDS_Vertex& theV000,
- const TopoDS_Vertex& theV001)
+ const TopoDS_Vertex& theV000,
+ const TopoDS_Vertex& theV001)
{
myErrorStatus=0;
//
//purpose :
//=======================================================================
void StdMeshers_SMESHBlock::ComputeParameters(const gp_Pnt& thePnt,
- gp_XYZ& theXYZ)
+ gp_XYZ& theXYZ)
{
ComputeParameters(thePnt, myShell, theXYZ);
}
//purpose :
//=======================================================================
void StdMeshers_SMESHBlock::ComputeParameters(const gp_Pnt& thePnt,
- const TopoDS_Shape& theShape,
+ const TopoDS_Shape& theShape,
gp_XYZ& theXYZ)
{
myErrorStatus=0;
return;
}
if ( SMESH_Block::IsEdgeID( aID ))
- bOk = myTBlock.EdgeParameters( aID, theU, theXYZ );
+ bOk = myTBlock.EdgeParameters( aID, theU, theXYZ );
if (!bOk) {
myErrorStatus=4; // problems with computation Parameters
return;
//function : Point
//purpose :
//=======================================================================
- void StdMeshers_SMESHBlock::Point(const gp_XYZ& theParams,
- gp_Pnt& aP3D)
+void StdMeshers_SMESHBlock::Point(const gp_XYZ& theParams, gp_Pnt& aP3D)
{
TopoDS_Shape aS;
//
//function : Point
//purpose :
//=======================================================================
- void StdMeshers_SMESHBlock::Point(const gp_XYZ& theParams,
- const TopoDS_Shape& theShape,
- gp_Pnt& aP3D)
+void StdMeshers_SMESHBlock::Point(const gp_XYZ& theParams,
+ const TopoDS_Shape& theShape,
+ gp_Pnt& aP3D)
{
myErrorStatus = 0;
//
//purpose :
//=======================================================================
bool StdMeshers_Penta_3D::Evaluate(SMESH_Mesh& aMesh,
- const TopoDS_Shape& aShape,
- MapShapeNbElems& aResMap)
+ const TopoDS_Shape& aShape,
+ MapShapeNbElems& aResMap)
{
MESSAGE("StdMeshers_Penta_3D::Evaluate()");
SMESH_subMesh *aSubMesh = aMesh.GetSubMesh(exp.Current());
meshFaces.push_back(aSubMesh);
MapShapeNbElemsItr anIt = aResMap.find(meshFaces[i]);
+ if( anIt == aResMap.end() ) {
+ NumBase = 0;
+ break;
+ }
std::vector<int> aVec = (*anIt).second;
int nbtri = Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
int nbqua = Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
}
}
- if(NumBase==0) return false;
+ if(NumBase==0) {
+ std::vector<int> aResVec(SMDSEntity_Last);
+ for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
+ SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
+ aResMap.insert(std::make_pair(sm,aResVec));
+ myErrorStatus->myName = COMPERR_ALGO_FAILED;
+ myErrorStatus->myComment = "Submesh can not be evaluated";
+ return false;
+ }
// find number of 1d elems for base face
int nb1d = 0;
bool IsOpposite = true;
for(TopExp_Explorer exp(aFaces.Value(i), TopAbs_EDGE); exp.More(); exp.Next()) {
if( Edges1.Contains(exp.Current()) ) {
- IsOpposite = false;
- break;
+ IsOpposite = false;
+ break;
}
}
if(IsOpposite) {
std::vector<int> aVec = (*anIt).second;
nb2d += Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
}
-
+
MapShapeNbElemsItr anIt = aResMap.find( meshFaces[NumBase-1] );
std::vector<int> aVec = (*anIt).second;
int nb2d_face0 = Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);