本文整理汇总了C++中TopoDS_Shape::IsSame方法的典型用法代码示例。如果您正苦于以下问题:C++ TopoDS_Shape::IsSame方法的具体用法?C++ TopoDS_Shape::IsSame怎么用?C++ TopoDS_Shape::IsSame使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TopoDS_Shape
的用法示例。
在下文中一共展示了TopoDS_Shape::IsSame方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Perform
//=======================================================================
//function : Perform
//purpose :
//=======================================================================
void ShHealOper_ShapeProcess::Perform(const TopoDS_Shape& theOldShape,
TopoDS_Shape& theNewShape)
{
myMapModifications.Clear();
//ShapeProcessAPI_ApplySequence aOperations(myResource,myPrefix.ToCString());
//myDone = Standard_False;
myOperations.ClearMap();
ShapeAnalysis_ShapeTolerance aSatol;
Standard_Real ainitTol = aSatol.Tolerance(theOldShape,0);
// PAL6487: san -- preserve the original shape from being modified
TopoDS_Shape anOldShape;
TColStd_IndexedDataMapOfTransientTransient aMap;
TNaming_CopyShape::CopyTool(theOldShape, aMap, anOldShape);
// PAL6487: san -- preserve the original shape from being modified
theNewShape = myOperations.PrepareShape(anOldShape,mySaveHistoryMode,myLevel);
if(mySaveHistoryMode)
myMapModifications = myOperations.Map();
myDone = !anOldShape.IsSame(theNewShape);
if(!myDone) {
Standard_Real aendTol =aSatol.Tolerance(theNewShape,0);
myDone = (fabs(ainitTol - aendTol) > Precision::Confusion());
}
}
示例2: sewing
Standard_Boolean ShHealOper_Sewing::sewing(const TopTools_SequenceOfShape& theSeqShapes)
{
myDone = Standard_False;
myErrorStatus = ShHealOper_NotError;
if(myInitShape.IsNull()) {
myErrorStatus = ShHealOper_InvalidParameters;
return myDone;
}
//sewing shape
Handle(BRepBuilderAPI_Sewing) aSewing = new BRepBuilderAPI_Sewing;
aSewing->Load(myInitShape);
aSewing->SetTolerance(myTolerance);
aSewing->SetFaceMode(myFacesMode);
aSewing->SetFloatingEdgesMode(myEdgesMode);
aSewing->SetNonManifoldMode(myNonManifoldMode);
Standard_Integer j =1;
for( ; j <= theSeqShapes.Length();j++)
aSewing->Add(theSeqShapes.Value(j));
aSewing->Perform();
const TopoDS_Shape aSewShape = aSewing->SewedShape();
if(aSewShape.IsNull()) {
myErrorStatus = ShHealOper_ErrorExecution;
return myDone;
}
if(aSewShape.IsSame(myInitShape))
return myDone;
//analysis either sewing was made by changing number of shells
myDone = isSewed(aSewShape);
//keep modification of the subshapes in the Context.
TopExp_Explorer aExp(myInitShape,TopAbs_FACE);
for( ; aExp.More(); aExp.Next())
myDone = (getModifications( aExp.Current(),aSewing) || myDone);
TopoDS_Shape aTempShape = myContext->Apply(aSewShape);
//obtained shells with fixed orientation for manifold and nonmanifold shells
if(myFacesMode)
myDone = getShells(aTempShape) || myDone;
//obtained manifold wires if sewing edges was performed.
if(myEdgesMode)
myDone = getWires(aTempShape) || myDone;
if(myDone)
myResultShape = myContext->Apply(aTempShape);
return myDone;
}
示例3: ASSERT
TopoDS_Edge
StdMeshers_Hexa_3D::EdgeNotInFace(SMESH_Mesh & aMesh,
const TopoDS_Shape & aShape,
const TopoDS_Face & aFace,
const TopoDS_Vertex & aVertex,
const TopTools_IndexedDataMapOfShapeListOfShape & MS)
{
//MESSAGE("StdMeshers_Hexa_3D::EdgeNotInFace");
TopTools_IndexedDataMapOfShapeListOfShape MF;
TopExp::MapShapesAndAncestors(aFace, TopAbs_VERTEX, TopAbs_EDGE, MF);
const TopTools_ListOfShape & ancestorsInSolid = MS.FindFromKey(aVertex);
const TopTools_ListOfShape & ancestorsInFace = MF.FindFromKey(aVertex);
// SCRUTE(ancestorsInSolid.Extent());
// SCRUTE(ancestorsInFace.Extent());
ASSERT(ancestorsInSolid.Extent() == 6); // 6 (edges doublees)
ASSERT(ancestorsInFace.Extent() == 2);
TopoDS_Edge E;
E.Nullify();
TopTools_ListIteratorOfListOfShape its(ancestorsInSolid);
for (; its.More(); its.Next())
{
TopoDS_Shape ancestor = its.Value();
TopTools_ListIteratorOfListOfShape itf(ancestorsInFace);
bool isInFace = false;
for (; itf.More(); itf.Next())
{
TopoDS_Shape ancestorInFace = itf.Value();
if (ancestorInFace.IsSame(ancestor))
{
isInFace = true;
break;
}
}
if (!isInFace)
{
E = TopoDS::Edge(ancestor);
break;
}
}
return E;
}
示例4: Compute
//.........这里部分代码省略.........
smIt = sm->getDependsOnIterator(includeSelf, complexShapeFirst);
while ( smIt->more() )
{
SMESH_subMesh* smToCompute = smIt->next();
if ( smToCompute->GetComputeState() != SMESH_subMesh::READY_TO_COMPUTE )
continue;
const TopoDS_Shape& aSubShape = smToCompute->GetSubShape();
aShapeDim = GetShapeDim( aSubShape );
if ( aShapeDim < 1 ) break;
// check for preview dimension limitations
if ( aShapesId && aShapeDim > (int)aDim )
continue;
SMESH_Algo* algo = GetAlgo( smToCompute, &algoShape );
if ( algo && !algo->NeedDiscreteBoundary() )
{
if ( algo->SupportSubmeshes() )
{
// reload sub-meshes from shDim2sm into smWithAlgoSupportingSubmeshes
// so that more local algos to go first
if ( prevShapeDim != aShapeDim )
{
prevShapeDim = aShapeDim;
for ( shDim2smIt = shDim2sm.rbegin(); shDim2smIt != shDim2sm.rend(); ++shDim2smIt )
if ( shDim2smIt->first == globalAlgoDim )
smWithAlgoSupportingSubmeshes[ aShapeDim ].push_back( shDim2smIt->second );
else
smWithAlgoSupportingSubmeshes[ aShapeDim ].push_front( shDim2smIt->second );
shDim2sm.clear();
}
// add smToCompute to shDim2sm map
if ( algoShape.IsSame( aMesh.GetShapeToMesh() ))
{
aShapeDim = globalAlgoDim; // to compute last
}
else
{
aShapeDim = GetShapeDim( algoShape );
if ( algoShape.ShapeType() == TopAbs_COMPOUND )
{
TopoDS_Iterator it( algoShape );
aShapeDim += GetShapeDim( it.Value() );
}
}
shDim2sm.insert( make_pair( aShapeDim, smToCompute ));
}
else // Compute w/o support of sub-meshes
{
if (_compute_canceled)
return false;
setCurrentSubMesh( smToCompute );
smToCompute->ComputeStateEngine( computeEvent );
setCurrentSubMesh( NULL );
if ( aShapesId )
aShapesId->insert( smToCompute->GetId() );
}
}
}
// reload sub-meshes from shDim2sm into smWithAlgoSupportingSubmeshes
for ( shDim2smIt = shDim2sm.rbegin(); shDim2smIt != shDim2sm.rend(); ++shDim2smIt )
if ( shDim2smIt->first == globalAlgoDim )
smWithAlgoSupportingSubmeshes[3].push_back( shDim2smIt->second );
else
smWithAlgoSupportingSubmeshes[0].push_front( shDim2smIt->second );
示例5: exp
bool StdMeshers_Projection_3D::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape)
{
if ( !_sourceHypo )
return false;
SMESH_Mesh * srcMesh = _sourceHypo->GetSourceMesh();
SMESH_Mesh * tgtMesh = & aMesh;
if ( !srcMesh )
srcMesh = tgtMesh;
SMESHDS_Mesh * srcMeshDS = srcMesh->GetMeshDS();
SMESHDS_Mesh * tgtMeshDS = tgtMesh->GetMeshDS();
// get shell from shape3D
TopoDS_Shell srcShell, tgtShell;
TopExp_Explorer exp( _sourceHypo->GetSource3DShape(), TopAbs_SHELL );
int nbShell;
for ( nbShell = 0; exp.More(); exp.Next(), ++nbShell )
srcShell = TopoDS::Shell( exp.Current() );
if ( nbShell != 1 )
return error(COMPERR_BAD_SHAPE,
SMESH_Comment("Source shape must have 1 shell but not ") << nbShell);
exp.Init( aShape, TopAbs_SHELL );
for ( nbShell = 0; exp.More(); exp.Next(), ++nbShell )
tgtShell = TopoDS::Shell( exp.Current() );
if ( nbShell != 1 )
return error(COMPERR_BAD_SHAPE,
SMESH_Comment("Target shape must have 1 shell but not ") << nbShell);
// Check that shapes are blocks
if ( TAssocTool::Count( tgtShell, TopAbs_FACE , 1 ) != 6 ||
TAssocTool::Count( tgtShell, TopAbs_EDGE , 1 ) != 12 ||
TAssocTool::Count( tgtShell, TopAbs_WIRE , 1 ) != 6 )
return error(COMPERR_BAD_SHAPE, "Target shape is not a block");
if ( TAssocTool::Count( srcShell, TopAbs_FACE , 1 ) != 6 ||
TAssocTool::Count( srcShell, TopAbs_EDGE , 1 ) != 12 ||
TAssocTool::Count( srcShell, TopAbs_WIRE , 1 ) != 6 )
return error(COMPERR_BAD_SHAPE, "Source shape is not a block");
// Assure that mesh on a source shape is computed
SMESH_subMesh* srcSubMesh = srcMesh->GetSubMesh( _sourceHypo->GetSource3DShape() );
//SMESH_subMesh* tgtSubMesh = tgtMesh->GetSubMesh( aShape );
if ( tgtMesh == srcMesh && !aShape.IsSame( _sourceHypo->GetSource3DShape() )) {
if ( !TAssocTool::MakeComputed( srcSubMesh ))
return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
}
else {
if ( !srcSubMesh->IsMeshComputed() )
return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
}
// Find 2 pairs of corresponding vertices
TopoDS_Vertex tgtV000, tgtV100, srcV000, srcV100;
TAssocTool::TShapeShapeMap shape2ShapeMap;
if ( _sourceHypo->HasVertexAssociation() )
{
tgtV000 = _sourceHypo->GetTargetVertex(1);
tgtV100 = _sourceHypo->GetTargetVertex(2);
srcV000 = _sourceHypo->GetSourceVertex(1);
srcV100 = _sourceHypo->GetSourceVertex(2);
}
else
{
if ( !TAssocTool::FindSubShapeAssociation( tgtShell, tgtMesh, srcShell, srcMesh,
shape2ShapeMap) )
return error(COMPERR_BAD_SHAPE,"Topology of source and target shapes seems different" );
exp.Init( tgtShell, TopAbs_EDGE );
TopExp::Vertices( TopoDS::Edge( exp.Current() ), tgtV000, tgtV100 );
if ( !shape2ShapeMap.IsBound( tgtV000 ) || !shape2ShapeMap.IsBound( tgtV100 ))
return error("Association of subshapes failed" );
srcV000 = TopoDS::Vertex( shape2ShapeMap( tgtV000 ));
srcV100 = TopoDS::Vertex( shape2ShapeMap( tgtV100 ));
if ( !TAssocTool::IsSubShape( srcV000, srcShell ) ||
!TAssocTool::IsSubShape( srcV100, srcShell ))
return error("Incorrect association of subshapes" );
}
// Load 2 SMESH_Block's with src and tgt shells
SMESH_Block srcBlock, tgtBlock;
TopTools_IndexedMapOfOrientedShape scrShapes, tgtShapes;
if ( !tgtBlock.LoadBlockShapes( tgtShell, tgtV000, tgtV100, tgtShapes ))
return error(COMPERR_BAD_SHAPE, "Can't detect block subshapes. Not a block?");
if ( !srcBlock.LoadBlockShapes( srcShell, srcV000, srcV100, scrShapes ))
return error(COMPERR_BAD_SHAPE, "Can't detect block subshapes. Not a block?");
// Find matching nodes of src and tgt shells
TNodeNodeMap src2tgtNodeMap;
for ( int fId = SMESH_Block::ID_FirstF; fId < SMESH_Block::ID_Shell; ++fId )
{
// Corresponding subshapes
//.........这里部分代码省略.........
示例6: update_OCC_entity
//----------------------------------------------------------------
// Function: TopoDS_Shape level function to update the core Body
// for any Boolean operation of the body.
// Author: Jane Hu
//----------------------------------------------------------------
CubitStatus OCCBody::update_OCC_entity(TopoDS_Shape& old_shape,
TopoDS_Shape& new_shape,
BRepBuilderAPI_MakeShape *op,
LocOpe_SplitShape* sp)
{
//set the Shells
TopTools_IndexedMapOfShape M;
TopExp::MapShapes(old_shape, TopAbs_SOLID, M);
TopTools_IndexedMapOfShape M_new;
TopExp::MapShapes(new_shape, TopAbs_SOLID, M_new);
TopTools_ListOfShape shapes;
TopoDS_Shape shape;
CubitBoolean updated = CUBIT_FALSE;
if(!old_shape.IsNull() && old_shape.ShapeType() == TopAbs_COMPOUND &&
!new_shape.IsNull() && new_shape.ShapeType() == TopAbs_COMPOUND &&
!old_shape.IsSame(new_shape))
{
//By updating underling solids, shells etc., the old_shape will get changed.
//trying to make sure the the number of each entity in the old and new
//shapes are the same, which means that nothing is delete, that we can
//update the map here. Otherwise, when deleting solids, it'll delete the
//the old body and create new body. This is Ok for general boolean operation //except imprint when booleans are called, usually the original body are
// supposed to be kept.
updated = CUBIT_TRUE;
OCCQueryEngine::instance()->update_OCC_map(old_shape, new_shape);
}
DLIList<int> new_solid_nums;
DLIList<int> unfound_nums;
for(int ii=1; ii<=M.Extent(); ii++)
{
TopoDS_Solid solid = TopoDS::Solid(M(ii));
TopTools_ListOfShape shapes;
if(op)
{
shapes.Assign(op->Modified(solid));
if(shapes.Extent() == 0)
shapes.Assign(op->Generated(solid));
}
else if(sp)
shapes.Assign(sp->DescendantShapes(solid));
if (shapes.Extent() == 1)
shape = shapes.First();
else if(shapes.Extent() > 1)
{
//update all attributes first.
TopTools_ListIteratorOfListOfShape it;
it.Initialize(shapes);
for(; it.More(); it.Next())
{
shape = it.Value();
OCCQueryEngine::instance()->copy_attributes(solid, shape);
}
shape = shapes.First();
}
else if(op->IsDeleted(solid))
{
if (M_new.Extent()== 1 && ii == 1)
shape = M_new(1);
else if(M_new.Extent()== 1 && ii > 1)
shape.Nullify();
else if(M_new.Extent() > 1)
{
GProp_GProps myProps;
BRepGProp::VolumeProperties(solid, myProps);
double bf_mass = myProps.Mass();
gp_Pnt old_center = myProps.CentreOfMass();
CubitBoolean found = CUBIT_FALSE;
for(int l = 1; l <= M_new.Extent(); l++)
{
BRepGProp::VolumeProperties(M_new(l), myProps);
double af_mass = myProps.Mass();
double dTol = OCCQueryEngine::instance()->get_sme_resabs_tolerance();
if(fabs(bf_mass-af_mass) < dTol) //unchanged
{
gp_Pnt new_center = myProps.CentreOfMass();
if(new_center.IsEqual(old_center, dTol))
{
found = CUBIT_TRUE;
shape = M_new(l);
new_solid_nums.append(l);
break;
}
}
}
if(!found)
{
unfound_nums.append(ii);
continue;
}
//.........这里部分代码省略.........
示例7: printf
//.........这里部分代码省略.........
for (Exp.Init(mshape->shape, TopAbs_FACE, TopAbs_SHELL);
Exp.More(); Exp.Next()) iWrite.AddShape(Exp.Current());
for (Exp.Init(mshape->shape, TopAbs_SHELL, TopAbs_SOLID);
Exp.More(); Exp.Next()) iWrite.AddShape(Exp.Current());
for (Exp.Init(mshape->shape, TopAbs_SOLID);
Exp.More(); Exp.Next()) iWrite.AddShape(Exp.Current());
iWrite.ComputeModel();
if (!iWrite.Write(name)) {
printf(" EGADS Warning: IGES Write Error (EG_saveModel)!\n");
return EGADS_WRITERR;
}
}
catch (...)
{
printf(" EGADS Warning: Internal IGES Write Error (EG_saveModel)!\n");
return EGADS_WRITERR;
}
} else if ((strcasecmp(&name[i],".brep") == 0) ||
(strcasecmp(&name[i],".egads") == 0)) {
/* Native OCC file or our filetype */
if (!BRepTools::Write(mshape->shape, name)) {
printf(" EGADS Warning: OCC Write Error (EG_saveModel)!\n");
return EGADS_WRITERR;
}
if (strcasecmp(&name[i],".brep") == 0) return EGADS_SUCCESS;
/* append the attributes -- output in the read order */
FILE *fp = fopen(name, "a");
if (fp == NULL) {
printf(" EGADS Warning: EGADS Open Error (EG_saveModel)!\n");
return EGADS_WRITERR;
}
fprintf(fp, "\n##EGADS HEADER FILE-REV 1 ##\n");
/* write model attributes */
EG_writeAttrs(model, fp);
TopExp_Explorer Exp;
for (Exp.Init(mshape->shape, TopAbs_WIRE, TopAbs_FACE);
Exp.More(); Exp.Next()) {
TopoDS_Shape shape = Exp.Current();
for (i = 0; i < mshape->nbody; i++) {
egObject *obj = mshape->bodies[i];
egadsBody *pbody = (egadsBody *) obj->blind;
if (shape.IsSame(pbody->shape)) {
EG_writeAttrs(obj, fp);
break;
}
}
}
for (Exp.Init(mshape->shape, TopAbs_FACE, TopAbs_SHELL);
Exp.More(); Exp.Next()) {
TopoDS_Shape shape = Exp.Current();
for (i = 0; i < mshape->nbody; i++) {
egObject *obj = mshape->bodies[i];
egadsBody *pbody = (egadsBody *) obj->blind;
if (shape.IsSame(pbody->shape)) {
EG_writeAttrs(obj, fp);
break;
}
}
}
for (Exp.Init(mshape->shape, TopAbs_SHELL, TopAbs_SOLID);
Exp.More(); Exp.Next()) {
TopoDS_Shape shape = Exp.Current();
for (i = 0; i < mshape->nbody; i++) {
egObject *obj = mshape->bodies[i];
egadsBody *pbody = (egadsBody *) obj->blind;
if (shape.IsSame(pbody->shape)) {
EG_writeAttrs(obj, fp);
break;
}
}
}
for (Exp.Init(mshape->shape, TopAbs_SOLID); Exp.More(); Exp.Next()) {
TopoDS_Shape shape = Exp.Current();
for (i = 0; i < mshape->nbody; i++) {
egObject *obj = mshape->bodies[i];
egadsBody *pbody = (egadsBody *) obj->blind;
if (shape.IsSame(pbody->shape)) {
EG_writeAttrs(obj, fp);
break;
}
}
}
fclose(fp);
} else {
if (outLevel > 0)
printf(" EGADS Warning: Extension in %s Not Supported (EG_saveModel)!\n",
name);
return EGADS_NODATA;
}
return EGADS_SUCCESS;
}
示例8: if
int
EG_attriBodyDup(const egObject *src, egObject *dst)
{
int i, j, nents, nattr;
egObject *aobj, *dobj;
egAttrs *attrs;
TopoDS_Shape shape;
if ((src == NULL) || (dst == NULL)) return EGADS_NULLOBJ;
if (src->magicnumber != MAGIC) return EGADS_NOTOBJ;
if (src->oclass < NODE) return EGADS_NOTTOPO;
if (src->blind == NULL) return EGADS_NODATA;
int outLevel = EG_outLevel(src);
if (src->oclass == MODEL) {
if (outLevel > 0)
printf(" EGADS Error: src MODEL not supported (EG_attriBodyDup)!\n");
return EGADS_NOTMODEL;
}
if (dst->magicnumber != MAGIC) {
if (outLevel > 0)
printf(" EGADS Error: dst not an EGO (EG_attriBodyDup)!\n");
return EGADS_NOTOBJ;
}
if (dst->oclass != BODY) {
if (outLevel > 0)
printf(" EGADS Error: dst not a BODY (EG_attriBodyDup)!\n");
return EGADS_NOTBODY;
}
if (EG_context(src) != EG_context(dst)) {
if (outLevel > 0)
printf(" EGADS Error: Context mismatch (EG_attriBodyDup)!\n");
return EGADS_MIXCNTX;
}
if (dst->blind == NULL) {
if (outLevel > 0)
printf(" EGADS Error: NULL dst pointer (EG_attriBodyDup)!\n");
return EGADS_NODATA;
}
egadsBody *pbody = (egadsBody *) dst->blind;
if (src->oclass == BODY) {
// use hashed body data on both ends
egadsBody *pbods = (egadsBody *) src->blind;
shape = pbody->shape;
if (shape.IsSame(pbods->shape)) EG_attributeDup(src, dst);
nents = pbods->shells.map.Extent();
for (i = 0; i < nents; i++) {
aobj = pbods->shells.objs[i];
if (aobj->attrs == NULL) continue;
attrs = (egAttrs *) aobj->attrs;
nattr = attrs->nattrs;
if (nattr <= 0) continue;
shape = pbods->shells.map(i+1);
j = pbody->shells.map.FindIndex(shape);
if (j == 0) continue; // not in the dst body
dobj = pbody->shells.objs[j-1];
EG_attributeDup(aobj, dobj);
}
nents = pbods->faces.map.Extent();
for (i = 0; i < nents; i++) {
aobj = pbods->faces.objs[i];
if (aobj->attrs == NULL) continue;
attrs = (egAttrs *) aobj->attrs;
nattr = attrs->nattrs;
if (nattr <= 0) continue;
shape = pbods->faces.map(i+1);
j = pbody->faces.map.FindIndex(shape);
if (j == 0) continue; // not in the dst body
dobj = pbody->faces.objs[j-1];
EG_attributeDup(aobj, dobj);
}
nents = pbods->loops.map.Extent();
for (i = 0; i < nents; i++) {
aobj = pbods->loops.objs[i];
if (aobj->attrs == NULL) continue;
attrs = (egAttrs *) aobj->attrs;
nattr = attrs->nattrs;
if (nattr <= 0) continue;
shape = pbods->loops.map(i+1);
j = pbody->loops.map.FindIndex(shape);
if (j == 0) continue; // not in the dst body
dobj = pbody->loops.objs[j-1];
EG_attributeDup(aobj, dobj);
}
nents = pbods->edges.map.Extent();
for (i = 0; i < nents; i++) {
aobj = pbods->edges.objs[i];
if (aobj->attrs == NULL) continue;
attrs = (egAttrs *) aobj->attrs;
nattr = attrs->nattrs;
if (nattr <= 0) continue;
shape = pbods->edges.map(i+1);
j = pbody->edges.map.FindIndex(shape);
if (j == 0) continue; // not in the dst body
//.........这里部分代码省略.........
示例9: MakeBlocks
//.........这里部分代码省略.........
tPF.myPavePoolNew.Destroy();
//
tPF.MakeSplitEdges();
tPF.UpdateCommonBlocks();
//
// 3. Treatment of the result of intersection
//
Standard_Integer aNbOld, aNbLines, aNbPB, mV1, mV2, nE, mE, iFF;
TopAbs_ShapeEnum aType;
BOPTools_ListIteratorOfListOfPaveBlock aIt;
BOPTColStd_IndexedDataMapOfIntegerInteger aMNewOld;
//
const NMTDS_ShapesDataStructure& tDS=*(tPF.DS());
const BOPTools_SplitShapesPool& aSSP=tPF.mySplitShapesPool;
const NMTTools_CommonBlockPool& aCBP=tPF.myCommonBlockPool;
//
aNbLines=tDS.NumberOfInsertedShapes();
aNbOld=tDS.NumberOfShapesOfTheObject();
//
// 3.1 Links between indices in tDS and DS (kept in aMNewOld)
//
// 3.1.1.Old vertices [ links ]
for (i=1; i<=aNbOld; ++i) {
const TopoDS_Shape& aV=tDS.Shape(i);
aType=aV.ShapeType();
if (aType!=TopAbs_VERTEX) {
continue;
}
//
for (j=1; j<=aNbSE; ++j) {
const BOPTools_PaveBlock& aPBSE=aMEPB(j);
nV1=aPBSE.Pave1().Index();
const TopoDS_Shape aV1=myDS->Shape(nV1);//mpv
if (aV1.IsSame(aV)) {
aMNewOld.Add(i, nV1);
break;
}
nV2=aPBSE.Pave2().Index();
const TopoDS_Shape aV2=myDS->Shape(nV2);//mpv
if (aV2.IsSame(aV)) {
aMNewOld.Add(i, nV2);
break;
}
}
}
//
// 3.1.2. New vertices [ links ]
i=tDS.NumberOfSourceShapes()+1;
for (; i<=aNbLines; ++i) {
const TopoDS_Shape& aV=tDS.Shape(i);
aType=aV.ShapeType();
if (aType!=TopAbs_VERTEX) {
continue;
}
//
// Insert new vertex in myDS
BooleanOperations_AncestorsSeqAndSuccessorsSeq anASSeq;
myDS->InsertShapeAndAncestorsSuccessors(aV, anASSeq);
nV1=myDS->NumberOfInsertedShapes();
// link
aMNewOld.Add(i, nV1);
}
//
// 3.2. Treatment of section edges (SE)
for (i=1; i<=aNbOld; ++i) {
const TopoDS_Shape& aE=tDS.Shape(i);