TopTools_MapIteratorOfMapOfOrientedShape aItM;
TopTools_IndexedDataMapOfShapeListOfShape aVEMap;
TopTools_MapOfOrientedShape aMAdded;
+ TopoDS_Iterator aItW;
BRep_Builder aBB;
GEOMAlgo_WireEdgeSet aWES;
GEOMAlgo_WESCorrector aWESCor;
const TopoDS_Shape& aW=aIt.Value();
myLoops.Append(aW);
}
+ //modified by NIZNHY-PKV Tue Aug 5 15:09:29 2008f
+ // Post Treatment
+ TopTools_MapOfOrientedShape aMEP;
+ //
+ // a. collect all edges that are in loops
+ aIt.Initialize (myLoops);
+ for (; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aW=aIt.Value();
+ aItW.Initialize(aW);
+ for (; aItW.More(); aItW.Next()) {
+ const TopoDS_Shape& aE=aItW.Value();
+ aMEP.Add(aE);
+ }
+ }
+ //
+ // b. collect all edges that are to avoid
+ aItM.Initialize(myShapesToAvoid);
+ for (; aItM.More(); aItM.Next()) {
+ const TopoDS_Shape& aE=aItM.Key();
+ aMEP.Add(aE);
+ }
+ //
+ // c. add all edges that are not processed to myShapesToAvoid
+ aIt.Initialize (myShapes);
+ for (; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aE=aIt.Value();
+ if (!aMEP.Contains(aE)) {
+ myShapesToAvoid.Add(aE);
+ }
+ }
+ //modified by NIZNHY-PKV Tue Aug 5 15:09:35 2008t
//
// 2. Internal Wires
myLoopsInternal.Clear();
aBB.MakeWire(aW);
aBB.Add(aW, aEE);
//
- TopoDS_Iterator aItW (aW);
+ aItW.Initialize(aW);
for (; aItW.More()&&bFlag; aItW.Next()) {
const TopoDS_Edge& aE=TopoDS::Edge(aItW.Value());
//
void MakeInternalShells(const TopTools_MapOfShape& ,
TopTools_ListOfShape& );
-
+//modified by NIZNHY-PKV Tue Aug 5 15:06:50 2008f
+static
+ Standard_Boolean IsClosedShell(const TopoDS_Shell& theShell);
+//modified by NIZNHY-PKV Tue Aug 5 15:06:57 2008t
//=======================================================================
//function :
myShapesToAvoid.Add(aF2);
}
}
+ //DEB
+ else {
+ TopTools_ListIteratorOfListOfShape aItLF;
+ //
+ aItLF.Initialize (aLF);
+ for (; aItLF.More(); aItLF.Next()) {
+ const TopoDS_Shape& aFx=aItLF.Value();
+ int a=0;
+ }
+ }
+ //DEB
}// for (i=1; i<=aNbE; ++i) {
//
if (!bFound) {
//
myLoops.Clear();
//
- Standard_Integer aNbLF, aNbOff, aNbFP;
+ Standard_Integer aNbLF, aNbOff, aNbFP, aNbFA;
TopAbs_Orientation anOr;
TopoDS_Edge aEL;
BRep_Builder aBB;
NMTTools_CoupleOfShape aCSOff;
- TopTools_MapOfOrientedShape AddedFacesMap;
+ TopTools_MapOfOrientedShape AddedFacesMap;//, aMFP;
TopTools_IndexedDataMapOfShapeListOfShape aEFMap, aMEFP;
- TopTools_ListIteratorOfListOfShape aItF;
+ TopTools_ListIteratorOfListOfShape aItF, aIt;
+ TopTools_MapIteratorOfMapOfOrientedShape aItM;
+ TopoDS_Iterator aItS;
//
//=================================================
//
}
} // for (; aEdgeExp.More(); aEdgeExp.Next()) {
} //for (; aItAddedF.More(); aItAddedF.Next()) {
- myLoops.Append(aShell);
+ //modified by NIZNHY-PKV Tue Aug 5 15:07:08 2008f
+ //myLoops.Append(aShell);
+ if (IsClosedShell(aShell)) {
+ myLoops.Append(aShell);
+ }
+ /*
+ else {
+ TopoDS_Iterator aItS;
+ aItS.Initialize(aShell);
+ for (; aItS.More(); aItS.Next()) {
+ const TopoDS_Shape& aFs=aItS.Value();
+ aMFP.Add(aFs);
+ }
+ }
+ */
+ //modified by NIZNHY-PKV Tue Aug 5 15:07:30 2008t
} // for (; aItF.More(); aItF.Next()) {
+ //modified by NIZNHY-PKV Tue Aug 5 15:07:35 2008f
+ //
+ // Post Treatment
+ TopTools_MapOfOrientedShape aMP;
+ //
+ // a. collect all edges that are in loops
+ aIt.Initialize (myLoops);
+ for (; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aS=aIt.Value();
+ aItS.Initialize(aS);
+ for (; aItS.More(); aItS.Next()) {
+ const TopoDS_Shape& aF=aItS.Value();
+ aMP.Add(aF);
+ }
+ }
+ //
+ // b. collect all edges that are to avoid
+ aItM.Initialize(myShapesToAvoid);
+ for (; aItM.More(); aItM.Next()) {
+ const TopoDS_Shape& aF=aItM.Key();
+ aMP.Add(aF);
+ }
+ //
+ // c. add all edges that are not processed to myShapesToAvoid
+ aIt.Initialize (myShapes);
+ for (; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aF=aIt.Value();
+ if (!aMP.Contains(aF)) {
+ myShapesToAvoid.Add(aF);
+ }
+ }
+ //modified by NIZNHY-PKV Tue Aug 5 15:07:44 2008t
//=================================================
//
// 2.Internal Shells
//
myLoopsInternal.Clear();
//
- Standard_Integer aNbFA;
- TopTools_MapIteratorOfMapOfOrientedShape aItM;
- //
aEFMap.Clear();
AddedFacesMap.Clear();
//
}
return bRet;
}
-
+//modified by NIZNHY-PKV Tue Aug 5 15:07:50 2008f
+//=======================================================================
+//function : IsClosedShell
+//purpose :
+//=======================================================================
+Standard_Boolean IsClosedShell(const TopoDS_Shell& theShell)
+{
+ Standard_Integer aNbE;
+ Standard_Boolean bRet;
+ TopoDS_Iterator aIt;
+ TopExp_Explorer aExp;
+ TopTools_MapOfShape aM;
+ //
+ bRet=Standard_False;
+ aIt.Initialize(theShell);
+ for(; aIt.More(); aIt.Next()) {
+ const TopoDS_Face& aF=TopoDS::Face(aIt.Value());
+ aExp.Init(aF, TopAbs_EDGE);
+ for (; aExp.More(); aExp.Next()) {
+ const TopoDS_Edge& aE=TopoDS::Edge(aExp.Current());
+ if (BRep_Tool::Degenerated(aE)) {
+ continue;
+ }
+ /*
+ if (BRep_Tool::IsClosed(aE, aF)) {
+ continue;
+ }
+ */
+ if (aE.Orientation()==TopAbs_INTERNAL) {
+ continue;
+ }
+ if (!aM.Add(aE)) {
+ aM.Remove(aE);
+ }
+ }
+ }
+ //
+ aNbE=aM.Extent();
+ if (!aNbE) {
+ bRet=!bRet;
+ }
+ return bRet;
+}
+//modified by NIZNHY-PKV Tue Aug 5 15:08:07 2008t
//BRepTools::Write(aFF, "ff");
//
// ErrorStatus :
//
if (aType==GeomAbs_BSplineSurface||
aType==GeomAbs_Sphere||
- //modified by NIZNHY-PKV Wed Nov 29 10:18:50 2006f
GeomAbs_SurfaceOfRevolution) {
- //modified by NIZNHY-PKV Wed Nov 29 10:18:55 2006t
if (aTol2D < aTolV3D) {
aTol2D=aTolV3D;
}
const GeomAdaptor_Surface& aGAS,
const Standard_Boolean aFlag)
{
- Standard_Real aFirst, aLast, aToler, dt, aTV, aTV1, anAngle;
-
+ Standard_Real aFirst, aLast, aToler, dt, aTV, aTV1, anAngle, aTX;
+ gp_Pnt2d aPV, aPV1;
+ gp_Vec2d aV2D;
Handle(Geom2d_Curve) aC2D;
-
- BOPTools_Tools2D::CurveOnSurface (anEdge, myFace, aC2D,
- aFirst, aLast, aToler, Standard_True);
-
+ //
aTV=BRep_Tool::Parameter (aV, anEdge, myFace);
- if (Precision::IsInfinite(aTV))
+ if (Precision::IsInfinite(aTV)) {
return 0.;
-
+ }
+ //
+ BOPTools_Tools2D::CurveOnSurface (anEdge, myFace, aC2D,
+ aFirst, aLast, aToler, Standard_True);
//dt=1.e-7;
- dt=Tolerance2D(aV, aGAS);
-
- if(dt > (aLast - aFirst) * 0.25) {
+ //modified by NIZNHY-PKV Wed Sep 10 14:06:04 2008f
+ //dt=Tolerance2D(aV, aGAS);
+ dt=2.*Tolerance2D(aV, aGAS);
+ //modified by NIZNHY-PKV Wed Sep 10 14:06:07 2008t
+ //
+ aTX=0.25*(aLast - aFirst);
+ if(dt > aTX) {
// to save direction of the curve as much as it possible
// in the case of big tolerances
- dt = (aLast - aFirst) * 0.25;
+ dt = aTX;
}
//
if (fabs (aTV-aFirst) < fabs(aTV - aLast)) {
else {
aTV1=aTV - dt;
}
-
- gp_Pnt2d aPV, aPV1;
+ //
aC2D->D0 (aTV, aPV);
aC2D->D0 (aTV1, aPV1);
-
- gp_Vec2d aV2D;
//
if (aFlag) {//IN
gp_Vec2d aV2DIn(aPV1, aPV);
- //
aV2D=aV2DIn;
}
-
else {
gp_Vec2d aV2DOut(aPV, aPV1);
aV2D=aV2DOut;
}
-
+ //
gp_Dir2d aDir2D(aV2D);
anAngle=Angle(aDir2D);
-
+ //
return anAngle;
}
//=======================================================================