#include <TColStd_Array2OfBoolean.hxx>
-#include <IntTools_Context.hxx>
#include <IntTools_Range.hxx>
-#include <IntTools_ShrunkRange.hxx>
#include <IntTools_EdgeEdge.hxx>
#include <IntTools_CommonPrt.hxx>
#include <BOPAlgo_Operation.hxx>
#include <BOPAlgo_CheckerSI.hxx>
#include <BOPAlgo_BuilderFace.hxx>
-#include <BOPAlgo_BOP.hxx>
#include <BOPDS_DS.hxx>
#include <BOPDS_VectorOfInterfVV.hxx>
#include <BOPDS_VectorOfInterfEF.hxx>
#include <BOPDS_VectorOfInterfFF.hxx>
+#include <BOPInt_Context.hxx>
+
#include <BOPTools_AlgoTools3D.hxx>
+#include <BOPTools_AlgoTools.hxx>
#include <BOPCol_ListOfShape.hxx>
-static Standard_Boolean CheckEdge(const TopoDS_Edge& theEdge);
-
// ================================================================================
// function: Constructor
// purpose:
Standard_Integer aDim1, aDim2;
Standard_Boolean bBadTypes = Standard_False;
//
- aDim1 = BOPAlgo_BOP::Dimension(myShape1);
- aDim2 = BOPAlgo_BOP::Dimension(myShape2);
+ aDim1 = BOPTools_AlgoTools::Dimension(myShape1);
+ aDim2 = BOPTools_AlgoTools::Dimension(myShape2);
if (aDim1 < aDim2) {
if (myOperation == BOPAlgo_FUSE ||
myOperation == BOPAlgo_CUT21) {
{
Standard_Integer i = 0;
BRepExtrema_DistShapeShape aDist;
-
+ Handle(BOPInt_Context) aCtx;
+ //
+ aCtx = new BOPInt_Context;
+
for(i = 0; i < 2; i++) {
TopoDS_Shape aS = (i == 0) ? myShape1 : myShape2;
for(; anExp.More(); anExp.Next()) {
TopoDS_Edge anEdge = TopoDS::Edge(anExp.Current());
- if(!CheckEdge(anEdge)) {
+ if(BOPTools_AlgoTools::IsMicroEdge(anEdge, aCtx)) {
Standard_Boolean bKeepResult = Standard_True;
if(myOperation == BOPAlgo_SECTION) {
// {
// not implemented
// }
-
-// ----------------------------------------------------------------------
-// static function: CheckEdge
-// purpose:
-// ----------------------------------------------------------------------
-Standard_Boolean CheckEdge(const TopoDS_Edge& theEdge)
-{
- Handle(IntTools_Context) aContext;
- TopoDS_Vertex aV1, aV2;
-
- aContext=new IntTools_Context;
- TopExp::Vertices(theEdge, aV1, aV2);
-
-
- if(aV1.IsNull() || aV2.IsNull() || BRep_Tool::Degenerated(theEdge))
- return Standard_True;
- Standard_Real aFirst = 0., aLast = 0.;
- BRep_Tool::Range(theEdge, aFirst, aLast);
- IntTools_Range aRange(aFirst, aLast);
- IntTools_ShrunkRange aSR(theEdge, aV1, aV2, aRange, aContext);
-
- if (!aSR.IsDone() || aSR.ErrorStatus() == 6) {
- return Standard_False;
- }
- return Standard_True;
-}
BuildSection(me:out)
is protected;
-
- Dimension(myclass;
- theS:Shape from TopoDS)
- returns Integer from Standard;
- --is protected;
-
- TreatCompound(myclass;
- theS:Shape from TopoDS;
- theLS:out ListOfShape from BOPCol)
- is protected;
-
- --modified by NIZHNY-EMV Fri Sep 02 08:34:17 2011
+
IsBoundSplits(me:out;
theS:Shape from TopoDS;
theMEF:out IndexedDataMapOfShapeListOfShape from BOPCol)
returns Boolean from Standard
is protected;
- --modified by NIZHNY-EMV Fri Sep 02 08:34:19 2011
fields
myNbArgs : Integer from Standard is protected;
#include <BOPCol_ListOfShape.hxx>
#include <BOPAlgo_BuilderSolid.hxx>
-//modified by NIZHNY-EMV Fri Sep 02 08:43:02 2011
#include <TopoDS_Edge.hxx>
-//modified by NIZHNY-EMV Fri Sep 02 08:43:03 2011
static
TopAbs_ShapeEnum TypeToExplore(const Standard_Integer theDim);
}
//
for (i=0; i<myNbArgs; ++i) {
- myDims[i]=Dimension(myArgs[i]);
+ myDims[i]=BOPTools_AlgoTools::Dimension(myArgs[i]);
if (myDims[i]<0) {
myErrorStatus=13; // non-homogenious argument
return;
}
//
//=======================================================================
-//function : Dimension
-//purpose :
-//=======================================================================
- Standard_Integer BOPAlgo_BOP::Dimension(const TopoDS_Shape& theS)
-{
- Standard_Integer i, iRet, iRx0, iRx;
- TopAbs_ShapeEnum aTS;
- BOPCol_ListOfShape aLS;
- BOPCol_ListIteratorOfListOfShape aIt;
- //
- aTS=theS.ShapeType();
- if (aTS!=TopAbs_COMPOUND) {
- switch (aTS) {
- case TopAbs_EDGE:
- case TopAbs_WIRE:
- iRet=1;
- break;
- case TopAbs_FACE:
- case TopAbs_SHELL:
- iRet=2;
- break;
- case TopAbs_SOLID:
- case TopAbs_COMPSOLID:
- iRet=3;
- break;
- default:
- iRet=0;
- }
- return iRet;
- }
- //
- iRet=-1;
- TreatCompound(theS, aLS);
- //modified by NIZHNY-EMV Fri Feb 04 11:51:48 2011
- if(aLS.IsEmpty()) {
- iRet = -2; //empty compound
- return iRet;
- }
- //modified by NIZHNY-EMV Fri Feb 04 11:51:50 2011
- aIt.Initialize(aLS);
- for (i=0; aIt.More(); aIt.Next()) {
- const TopoDS_Shape& aSx=aIt.Value();
- iRx=Dimension(aSx);
- if (!i) {
- iRx0=iRx;
- i=1;
- continue;
- }
- if (iRx!=iRx0) {
- return iRet;// -1
- }
- }
- return iRx;
-}
-//=======================================================================
-//function : TreatCompound
-//purpose :
-//=======================================================================
- void BOPAlgo_BOP::TreatCompound(const TopoDS_Shape& theC1,
- BOPCol_ListOfShape& theLSX)
-{
- Standard_Integer aNbC1;
- TopAbs_ShapeEnum aType;
- BOPCol_ListOfShape aLC, aLC1;
- BOPCol_ListIteratorOfListOfShape aIt, aIt1;
- TopoDS_Iterator aItC;
- //
- aLC.Append (theC1);
- while(1) {
- aLC1.Clear();
- aIt.Initialize(aLC);
- for (; aIt.More(); aIt.Next()) {
- const TopoDS_Shape& aC=aIt.Value(); //C is compound
- //
- aItC.Initialize(aC);
- for (; aItC.More(); aItC.Next()) {
- const TopoDS_Shape& aS=aItC.Value();
- aType=aS.ShapeType();
- if (aType==TopAbs_COMPOUND) {
- aLC1.Append(aS);
- }
- else {
- theLSX.Append(aS);
- }
- }
- }
- //
- aNbC1=aLC1.Extent();
- if (!aNbC1) {
- break;
- }
- //
- aLC.Clear();
- aIt.Initialize(aLC1);
- for (; aIt.More(); aIt.Next()) {
- const TopoDS_Shape& aSC=aIt.Value();
- aLC.Append(aSC);
- }
- }// while(1)
-}
-//=======================================================================
//function : TypeToExplore
//purpose :
//=======================================================================
{
//BRepLib::SameParameter(myShape, 1.e-7, Standard_True);
BOPTools_AlgoTools::CorrectTolerances(myShape, 0.01);
+ BOPTools_AlgoTools::CorrectShapeTolerances(myShape);
}
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Face.hxx>
#include <BRep_Tool.hxx>
+#include <BRep_Builder.hxx>
+#include <BRepBndLib.hxx>
#include <BOPCol_MapOfInteger.hxx>
{
Standard_Boolean bJustAdd;
Standard_Integer iSize, nV, nF, nVSD, iFlag, nVx, i;
- Standard_Real aT1, aT2;
+ Standard_Real aT1, aT2, aTolF, aTolV;
+ BRep_Builder aBB;
//
myErrorStatus=0;
//
const TopoDS_Vertex& aV=(*(TopoDS_Vertex *)(&myDS->Shape(nVx)));
const TopoDS_Face& aF=(*(TopoDS_Face *)(&myDS->Shape(nF)));
//
+ aTolV = BRep_Tool::Tolerance(aV);
+ aTolF = BRep_Tool::Tolerance(aF);
+ //
iFlag=myContext->ComputeVF(aV, aF, aT1, aT2);
if (!iFlag) {
// 1
aVF.SetUV(aT1, aT2);
// 2
myDS->AddInterf(nVx, nF);
+ if (aTolV < aTolF) {
+ aBB.UpdateVertex(aV, aTolF);
+ BOPDS_ShapeInfo& aSIV = myDS->ChangeShapeInfo(nVx);
+ Bnd_Box& aBoxV = aSIV.ChangeBox();
+ BRepBndLib::Add(aV, aBoxV);
+ }
}
}// for (; myIterator->More(); myIterator->Next()) {
}// if (iSize) {
if (aEE.HasIndexNew()) {
nV=aEE.IndexNew();
if (aMI.Add(nV)) {
- aLIV.Append(nV);
+ aLIV.Append(nV);
}
}
}
const TopoDS_Face& aF=(*(TopoDS_Face *)(&myDS->Shape(nF)));
iFlag=myContext->ComputeVF(aV, aF, aT1, aT2);
if (!iFlag) {
- // 1
- i=aVFs.Append()-1;
- BOPDS_InterfVF& aVF=aVFs(i);
- aVF.SetIndices(nV, nF);
- aVF.SetUV(aT1, aT2);
- // 2
- myDS->AddInterf(nV, nF);
- //
- BOPCol_MapOfInteger& aMVIn=aFI.ChangeVerticesIn();
- aMVIn.Add(nV);
+ // 1
+ i=aVFs.Append()-1;
+ BOPDS_InterfVF& aVF=aVFs(i);
+ aVF.SetIndices(nV, nF);
+ aVF.SetUV(aT1, aT2);
+ // 2
+ myDS->AddInterf(nV, nF);
+ //
+ BOPCol_MapOfInteger& aMVIn=aFI.ChangeVerticesIn();
+ aMVIn.Add(nV);
}
}
}
myDS->AddInterf(nE, nF);
break;
}
-
+ //update tolerance of edge if needed
+ if (aTolE < aTolF) {
+ myDS->UpdateEdgeTolerance(nE, aTolF);
+ aTolE = aTolF;
+ }
aEF.SetCommonPart(aCPart);
// 2
myDS->AddInterf(nE, nF);
#include <BOPInt_ShrunkRange.hxx>
#include <BOPDS_DataMapOfPaveBlockListOfPaveBlock.hxx>
-static Standard_Boolean IsMicroEdge(const TopoDS_Edge& aE,
- const Handle(BOPInt_Context)& aCtx);
-
static void ToleranceFF(const TopoDS_Face& aF1,
const TopoDS_Face& aF2,
Standard_Real& aTolFF);
if (bExist) {
if (aMPBAdd.Add(aPBOut)) {
if (!aPBOut->IsCommonBlock()) {
- TopoDS_Edge& aE = *(TopoDS_Edge*)&myDS->Shape(aPBOut->Edge());
- if (aTolR3D > BRep_Tool::Tolerance(aE)) {
- BRep_Builder BB;
- //
- TopoDS_Vertex& aV1 = *(TopoDS_Vertex*)&myDS->Shape(aPBOut->Pave1().Index());
- TopoDS_Vertex& aV2 = *(TopoDS_Vertex*)&myDS->Shape(aPBOut->Pave2().Index());
- //
- BB.UpdateVertex(aV1, aTolR3D);
- BB.UpdateVertex(aV2, aTolR3D);
- BB.UpdateEdge(aE, aTolR3D);
+ Standard_Integer nE;
+ Standard_Real aTolE;
+ //
+ nE = aPBOut->Edge();
+ const TopoDS_Edge& aE = *(TopoDS_Edge*)&myDS->Shape(nE);
+ aTolE = BRep_Tool::Tolerance(aE);
+ if (aTolR3D > aTolE) {
+ myDS->UpdateEdgeTolerance(nE, aTolR3D);
}
+ //
PreparePostTreatFF(i, aPBOut, aMSCPB, aMVI, aVC);
}
}
BOPTools_AlgoTools::MakePCurve(aES, aF1, aF2, aIC);
}
//
- if (IsMicroEdge(aES, myContext)) {
+ if (BOPTools_AlgoTools::IsMicroEdge(aES, myContext)) {
continue;
}
//
aPB = aIt.Value();
if (!aPB->HasShrunkData()) {
const TopoDS_Edge& aE = *(TopoDS_Edge*)&myDS->Shape(aPB->Edge());
- if (IsMicroEdge(aE, myContext)) {
+ if (BOPTools_AlgoTools::IsMicroEdge(aE, myContext)) {
aLPB.Remove(aIt);
continue;
}
aMVI.Bind(aV2, nV2);
}
-//=======================================================================
-//function : IsMicroEdge
-//purpose : Checks if it is possible to compute shrunk range for the edge <aE>.
-//=======================================================================
-Standard_Boolean IsMicroEdge(const TopoDS_Edge& aE,
- const Handle(BOPInt_Context)& aCtx)
-{
- Standard_Boolean bRet;
- Standard_Integer iErr;
- Standard_Real aT1, aT2, aTmp;
- Handle(Geom_Curve) aC3D;
- TopoDS_Vertex aV1, aV2;
- //
- bRet=(BRep_Tool::Degenerated(aE) ||
- !BRep_Tool::IsGeometric(aE));
- if (bRet) {
- return bRet;
- }
- //
- aC3D=BRep_Tool::Curve(aE, aT1, aT2);
- TopExp::Vertices(aE, aV1, aV2);
- aT1=BRep_Tool::Parameter(aV1, aE);
- aT2=BRep_Tool::Parameter(aV2, aE);
- if (aT2<aT1) {
- aTmp=aT1;
- aT1=aT2;
- aT2=aTmp;
- }
- //
- BOPInt_ShrunkRange aSR;
- aSR.SetData(aE, aT1, aT2, aV1, aV2, aCtx);
- aSR.Perform();
- iErr=aSR.ErrorStatus();
- bRet = !(iErr==0);
- //
- return bRet;
-}
-
//=======================================================================
//function : ToleranceFF
//purpose : Computes the TolFF according to the tolerance value and
theIndex:Integer from Standard;
theLP:out ListOfPave from BOPDS);
---Purpose: Fills theLP with sorted paves
- -- of the shape with index theIndex
+ -- of the shape with index theIndex
+
+ UpdateEdgeTolerance(me:out;
+ theIndex:Integer from Standard;
+ theTolerance:Real from Standard);
+ ---Purpose:
+ --- Updates tolerance of the sub-shapes of the shape with index <theIndex>.
+ ---
fields
myAllocator : BaseAllocator from BOPCol is protected;
}
}
+//=======================================================================
+// function: UpdateTolerance
+// purpose:
+//=======================================================================
+ void BOPDS_DS::UpdateEdgeTolerance(const Standard_Integer nE,
+ const Standard_Real aTol)
+{
+ Standard_Integer nV;
+ Standard_Real aTolV;
+ BRep_Builder aBB;
+ BOPCol_ListIteratorOfListOfInteger aIt;
+ //
+ const TopoDS_Edge& aE = *(TopoDS_Edge*)&Shape(nE);
+ aBB.UpdateEdge(aE, aTol);
+ BOPDS_ShapeInfo& aSIE=ChangeShapeInfo(nE);
+ Bnd_Box& aBoxE=aSIE.ChangeBox();
+ BRepBndLib::Add(aE, aBoxE);
+ //
+ const BOPCol_ListOfInteger& aLI = aSIE.SubShapes();
+ aIt.Initialize(aLI);
+ for (; aIt.More(); aIt.Next()) {
+ nV = aIt.Value();
+ const TopoDS_Vertex& aV = *(TopoDS_Vertex*)&Shape(nV);
+ aTolV = BRep_Tool::Tolerance(aV);
+ if (aTolV < aTol) {
+ aBB.UpdateVertex(aV, aTol);
+ BOPDS_ShapeInfo& aSIV = ChangeShapeInfo(nV);
+ Bnd_Box& aBoxV = aSIV.ChangeBox();
+ BRepBndLib::Add(aV, aBoxV);
+ }
+ }
+}
+
//=======================================================================
//function : TotalShapes
//purpose :
returns Boolean from Standard;
---Purpose:
--- Computes projection of the point <aP> on the face <theFace>.
- --- Returns TRUE if projection is done.
+ --- Returns TRUE if projection is done.
+
+ IsMicroEdge(myclass;
+ theEdge : Edge from TopoDS;
+ theContext : Context from BOPInt)
+ returns Boolean from Standard;
+ ---Purpose:
+ --- Checks if it is possible to compute shrunk range for the edge <aE>.
+ ---
+
+ CorrectShapeTolerances (myclass;
+ theS: Shape from TopoDS);
+ ---Purpose:
+ --- Corrects tolerance values of the sub-shapes of the shape <theS> if needed.
+ ---
+
+ Dimension(myclass;
+ theS:Shape from TopoDS)
+ returns Integer from Standard;
+ ---Purpose:
+ --- Retutns dimension of the shape <theS>.
+
end AlgoTools;
#include <gp_Cylinder.hxx>
#include <Geom_CylindricalSurface.hxx>
#include <gp_Lin.hxx>
+#include <BOPInt_ShrunkRange.hxx>
static
Standard_Real AngleWithRef(const gp_Dir& theD1,
}
return bRet;
}
+
+//=======================================================================
+//function : IsMicroEdge
+//purpose :
+//=======================================================================
+ Standard_Boolean BOPTools_AlgoTools::IsMicroEdge(const TopoDS_Edge& aE,
+ const Handle(BOPInt_Context)& aCtx)
+{
+ Standard_Boolean bRet;
+ Standard_Integer iErr;
+ Standard_Real aT1, aT2, aTmp;
+ Handle(Geom_Curve) aC3D;
+ TopoDS_Vertex aV1, aV2;
+ //
+ bRet=(BRep_Tool::Degenerated(aE) ||
+ !BRep_Tool::IsGeometric(aE));
+ if (bRet) {
+ return bRet;
+ }
+ //
+ aC3D=BRep_Tool::Curve(aE, aT1, aT2);
+ TopExp::Vertices(aE, aV1, aV2);
+ aT1=BRep_Tool::Parameter(aV1, aE);
+ aT2=BRep_Tool::Parameter(aV2, aE);
+ if (aT2<aT1) {
+ aTmp=aT1;
+ aT1=aT2;
+ aT2=aTmp;
+ }
+ //
+ BOPInt_ShrunkRange aSR;
+ aSR.SetData(aE, aT1, aT2, aV1, aV2, aCtx);
+ aSR.Perform();
+ iErr=aSR.ErrorStatus();
+ bRet = !(iErr==0);
+ //
+ return bRet;
+}
+
/*
//=======================================================================
//function : AreFacesSameDomain
#include <Geom2d_Curve.hxx>
#include <GeomAdaptor_Surface.hxx>
-
-
static
void CheckEdge (const TopoDS_Edge& E,
- const Standard_Real aMaxTol);
+ const Standard_Real aMaxTol);
static
void CorrectEdgeTolerance (const TopoDS_Edge& myShape,
- const TopoDS_Face& S,
- const Standard_Real aMaxTol);
+ const TopoDS_Face& S,
+ const Standard_Real aMaxTol);
static
Standard_Boolean Validate(const Adaptor3d_Curve& CRef,
- const Adaptor3d_Curve& Other,
- const Standard_Real Tol,
- const Standard_Boolean SameParameter,
- Standard_Real& aNewTolerance);
+ const Adaptor3d_Curve& Other,
+ const Standard_Real Tol,
+ const Standard_Boolean SameParameter,
+ Standard_Real& aNewTolerance);
static
void CorrectVertexTolerance(const TopoDS_Edge& aE);
static
void CorrectWires(const TopoDS_Face& aF);
+static
+ void UpdateEdges(const TopoDS_Face& aF);
+
+static
+ void UpdateVertices(const TopoDS_Edge& aE);
+
//=======================================================================
// Function : CorrectTolerances
// purpose :
//=======================================================================
void BOPTools_AlgoTools::CorrectTolerances(const TopoDS_Shape& aShape,
- const Standard_Real aMaxTol)
+ const Standard_Real aMaxTol)
{
BOPTools_AlgoTools::CorrectPointOnCurve(aShape, aMaxTol);
BOPTools_AlgoTools::CorrectCurveOnSurface(aShape, aMaxTol);
// purpose :
//=======================================================================
void BOPTools_AlgoTools::CorrectPointOnCurve(const TopoDS_Shape& S,
- const Standard_Real aMaxTol)
+ const Standard_Real aMaxTol)
{
Standard_Integer i, aNb;
TopTools_IndexedMapOfShape Edges;
// purpose :
//=======================================================================
void BOPTools_AlgoTools::CorrectCurveOnSurface(const TopoDS_Shape& S,
- const Standard_Real aMaxTol)
+ const Standard_Real aMaxTol)
{
Standard_Integer i, aNbFaces, j, aNbEdges;
TopTools_IndexedMapOfShape Faces;
aS->D0(aP2D.X(), aP2D.Y(), aP);
aD2=aPV.SquareDistance(aP);
if (aD2>aD2max) {
- aD2max=aD2;
+ aD2max=aD2;
}
}
if (aD2max>aTol2) {
// purpose : Correct tolerances for Edge
//=======================================================================
void CorrectEdgeTolerance (const TopoDS_Edge& myShape,
- const TopoDS_Face& S,
- const Standard_Real aMaxTol)
+ const TopoDS_Face& S,
+ const Standard_Real aMaxTol)
{
//
// 1. Minimum of conditions to Perform
if (cr->IsCurve3D()) {
unique++;
if (myCref.IsNull() && !cr->Curve3D().IsNull()) {
- myCref = cr;
+ myCref = cr;
}
}
itcrx.Next();
while (itcrx.More()) {
const Handle(BRep_CurveRepresentation)& cr = itcrx.Value();
if (cr->IsCurveOnSurface()) {
- myCref = cr;
- break;
+ myCref = cr;
+ break;
}
itcrx.Next();
}
else {
if (myCref->IsCurve3D()) {
- Handle(Geom_Curve) C3dx = Handle(Geom_Curve)::DownCast
- (myCref->Curve3D()->Transformed (myCref->Location().Transformation()));
- GeomAdaptor_Curve GAC3d(C3dx, First, Last);
- myHCurve = new GeomAdaptor_HCurve(GAC3d);
+ Handle(Geom_Curve) C3dx = Handle(Geom_Curve)::DownCast
+ (myCref->Curve3D()->Transformed (myCref->Location().Transformation()));
+ GeomAdaptor_Curve GAC3d(C3dx, First, Last);
+ myHCurve = new GeomAdaptor_HCurve(GAC3d);
}
else { // curve on surface
- Handle(Geom_Surface) Sref = myCref->Surface();
- Sref = Handle(Geom_Surface)::DownCast(Sref->Transformed(myCref->Location().Transformation()));
- const Handle(Geom2d_Curve)& PCref = myCref->PCurve();
- Handle(GeomAdaptor_HSurface) GAHSref = new GeomAdaptor_HSurface(Sref);
- Handle(Geom2dAdaptor_HCurve) GHPCref = new Geom2dAdaptor_HCurve(PCref, First, Last);
- Adaptor3d_CurveOnSurface ACSref(GHPCref,GAHSref);
- myHCurve = new Adaptor3d_HCurveOnSurface(ACSref);
+ Handle(Geom_Surface) Sref = myCref->Surface();
+ Sref = Handle(Geom_Surface)::DownCast(Sref->Transformed(myCref->Location().Transformation()));
+ const Handle(Geom2d_Curve)& PCref = myCref->PCurve();
+ Handle(GeomAdaptor_HSurface) GAHSref = new GeomAdaptor_HSurface(Sref);
+ Handle(Geom2dAdaptor_HCurve) GHPCref = new Geom2dAdaptor_HCurve(PCref, First, Last);
+ Adaptor3d_CurveOnSurface ACSref(GHPCref,GAHSref);
+ myHCurve = new Adaptor3d_HCurveOnSurface(ACSref);
}
}
}
while (itcr.More()) {
const Handle(BRep_CurveRepresentation)& cr = itcr.Value();
if (cr != myCref && cr->IsCurveOnSurface(Su,L)) {
- pcurvefound = Standard_True;
- const Handle(BRep_GCurve)& GC = *((Handle(BRep_GCurve)*)&cr);
- Standard_Real f,l;
- GC->Range(f,l);
- if (SameRange && (f != First || l != Last)) {
- return ;//BRepCheck_InvalidSameRangeFlag);
- if (SameParameter) {
- return; //BRepCheck_InvalidSameParameterFlag);
- }
+ pcurvefound = Standard_True;
+ const Handle(BRep_GCurve)& GC = *((Handle(BRep_GCurve)*)&cr);
+ Standard_Real f,l;
+ GC->Range(f,l);
+ if (SameRange && (f != First || l != Last)) {
+ return ;//BRepCheck_InvalidSameRangeFlag);
+ if (SameParameter) {
+ return; //BRepCheck_InvalidSameParameterFlag);
+ }
}
- Handle(Geom_Surface) Sb = cr->Surface();
- Sb = Handle(Geom_Surface)::DownCast (Su->Transformed(L.Transformation()));
- Handle(Geom2d_Curve) PC = cr->PCurve();
- Handle(GeomAdaptor_HSurface) GAHS = new GeomAdaptor_HSurface(Sb);
- Handle(Geom2dAdaptor_HCurve) GHPC = new Geom2dAdaptor_HCurve(PC,f,l);
- Adaptor3d_CurveOnSurface ACS(GHPC,GAHS);
- ok = Validate(myHCurve->Curve(), ACS, Tol, SameParameter, aNewTol);
- if (ok) {
- if (cr->IsCurveOnClosedSurface()) {
- //return ;// BRepCheck::Add(lst,BRepCheck_InvalidCurveOnClosedSurface);
- }
- else {
- //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnSurface);
- }
- if (SameParameter) {
- //return;//BRepCheck::Add(lst,BRepCheck_InvalidSameParameterFlag);
- }
- //
- if (aNewTol<aMaxTol) {
- TE->UpdateTolerance(aNewTol+Delta);
- //
- CorrectVertexTolerance(myShape);
- }
- }
-
- if (cr->IsCurveOnClosedSurface()) {
- // checkclosed = Standard_True;
- GHPC->ChangeCurve2d().Load(cr->PCurve2(),f,l); // same bounds
- ACS.Load(GAHS); // sans doute inutile
- ACS.Load(GHPC); // meme remarque...
- ok = Validate(myHCurve->Curve(),ACS,Tol,SameParameter, aNewTol);
- if (ok) {
- //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnClosedSurface);
- if (SameParameter) {
- //return;//BRepCheck::Add(lst,BRepCheck_InvalidSameParameterFlag);
- }
- if (aNewTol<aMaxTol) {
- TE->UpdateTolerance(aNewTol+Delta);
- CorrectVertexTolerance(myShape);
- }
- }
- }
+ Handle(Geom_Surface) Sb = cr->Surface();
+ Sb = Handle(Geom_Surface)::DownCast (Su->Transformed(L.Transformation()));
+ Handle(Geom2d_Curve) PC = cr->PCurve();
+ Handle(GeomAdaptor_HSurface) GAHS = new GeomAdaptor_HSurface(Sb);
+ Handle(Geom2dAdaptor_HCurve) GHPC = new Geom2dAdaptor_HCurve(PC,f,l);
+ Adaptor3d_CurveOnSurface ACS(GHPC,GAHS);
+ ok = Validate(myHCurve->Curve(), ACS, Tol, SameParameter, aNewTol);
+ if (ok) {
+ if (cr->IsCurveOnClosedSurface()) {
+ //return ;// BRepCheck::Add(lst,BRepCheck_InvalidCurveOnClosedSurface);
+ }
+ else {
+ //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnSurface);
+ }
+ if (SameParameter) {
+ //return;//BRepCheck::Add(lst,BRepCheck_InvalidSameParameterFlag);
+ }
+ //
+ if (aNewTol<aMaxTol) {
+ TE->UpdateTolerance(aNewTol+Delta);
+ //
+ CorrectVertexTolerance(myShape);
+ }
+ }
+
+ if (cr->IsCurveOnClosedSurface()) {
+ //checkclosed = Standard_True;
+ GHPC->ChangeCurve2d().Load(cr->PCurve2(),f,l); // same bounds
+ ACS.Load(GAHS); // sans doute inutile
+ ACS.Load(GHPC); // meme remarque...
+ ok = Validate(myHCurve->Curve(),ACS,Tol,SameParameter, aNewTol);
+ if (ok) {
+ //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnClosedSurface);
+ if (SameParameter) {
+ //return;//BRepCheck::Add(lst,BRepCheck_InvalidSameParameterFlag);
+ }
+ if (aNewTol<aMaxTol) {
+ TE->UpdateTolerance(aNewTol+Delta);
+ CorrectVertexTolerance(myShape);
+ }
+ }
+ }
}
itcr.Next();
}
Handle(Geom_Plane) P;
Handle(Standard_Type) styp = Su->DynamicType();
if (styp == STANDARD_TYPE(Geom_RectangularTrimmedSurface)) {
- P = Handle(Geom_Plane)::DownCast(Handle(Geom_RectangularTrimmedSurface)::
- DownCast(Su)->BasisSurface());
+ P = Handle(Geom_Plane)::DownCast(Handle(Geom_RectangularTrimmedSurface)::
+ DownCast(Su)->BasisSurface());
}
else {
- P = Handle(Geom_Plane)::DownCast(Su);
+ P = Handle(Geom_Plane)::DownCast(Su);
}
if (P.IsNull()) { // not a plane
- return;//BRepCheck::Add(lst,BRepCheck_NoCurveOnSurface);
+ return;//BRepCheck::Add(lst,BRepCheck_NoCurveOnSurface);
}
else {// on fait la projection a la volee, comme BRep_Tool
- P = Handle(Geom_Plane)::DownCast(P->Transformed(L.Transformation()));
- //on projette Cref sur ce plan
- Handle(GeomAdaptor_HSurface) GAHS = new GeomAdaptor_HSurface(P);
-
- // Dub - Normalement myHCurve est une GeomAdaptor_HCurve
- GeomAdaptor_Curve& Gac = Handle(GeomAdaptor_HCurve)::DownCast(myHCurve)->ChangeCurve();
- Handle(Geom_Curve) C3dx = Gac.Curve();
- Handle(Geom_Curve) ProjOnPlane = GeomProjLib::ProjectOnPlane
- (new Geom_TrimmedCurve(C3dx,First,Last), P, P->Position().Direction(), Standard_True);
-
- Handle(GeomAdaptor_HCurve) aHCurve = new GeomAdaptor_HCurve(ProjOnPlane);
-
- ProjLib_ProjectedCurve proj(GAHS,aHCurve);
- Handle(Geom2d_Curve) PC = Geom2dAdaptor::MakeCurve(proj);
- Handle(Geom2dAdaptor_HCurve) GHPC =
- new Geom2dAdaptor_HCurve(PC, myHCurve->FirstParameter(), myHCurve->LastParameter());
-
- Adaptor3d_CurveOnSurface ACS(GHPC,GAHS);
-
- Standard_Boolean okx = Validate(myHCurve->Curve(),ACS,
- Tol,Standard_True, aNewTol); // voir dub...
- if (okx) {
- //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnSurface);
- if (aNewTol<aMaxTol) {
- TE->UpdateTolerance(aNewTol+Delta);
- CorrectVertexTolerance(myShape);
- }
- }
+ P = Handle(Geom_Plane)::DownCast(P->Transformed(L.Transformation()));
+ //on projette Cref sur ce plan
+ Handle(GeomAdaptor_HSurface) GAHS = new GeomAdaptor_HSurface(P);
+
+ // Dub - Normalement myHCurve est une GeomAdaptor_HCurve
+ GeomAdaptor_Curve& Gac = Handle(GeomAdaptor_HCurve)::DownCast(myHCurve)->ChangeCurve();
+ Handle(Geom_Curve) C3dx = Gac.Curve();
+ Handle(Geom_Curve) ProjOnPlane = GeomProjLib::ProjectOnPlane
+ (new Geom_TrimmedCurve(C3dx,First,Last), P, P->Position().Direction(), Standard_True);
+
+ Handle(GeomAdaptor_HCurve) aHCurve = new GeomAdaptor_HCurve(ProjOnPlane);
+
+ ProjLib_ProjectedCurve proj(GAHS,aHCurve);
+ Handle(Geom2d_Curve) PC = Geom2dAdaptor::MakeCurve(proj);
+ Handle(Geom2dAdaptor_HCurve) GHPC =
+ new Geom2dAdaptor_HCurve(PC, myHCurve->FirstParameter(), myHCurve->LastParameter());
+
+ Adaptor3d_CurveOnSurface ACS(GHPC,GAHS);
+
+ Standard_Boolean okx = Validate(myHCurve->Curve(),ACS,
+ Tol,Standard_True, aNewTol); // voir dub...
+ if (okx) {
+ //return;//BRepCheck::Add(lst,BRepCheck_InvalidCurveOnSurface);
+ if (aNewTol<aMaxTol) {
+ TE->UpdateTolerance(aNewTol+Delta);
+ CorrectVertexTolerance(myShape);
+ }
+ }
}
}//end of if (!pcurvefound) {
}
+//=======================================================================
+// Function : CorrectShapeTolerances
+// purpose :
+//=======================================================================
+ void BOPTools_AlgoTools::CorrectShapeTolerances(const TopoDS_Shape& aShape)
+{
+ TopExp_Explorer aExp;
+ Standard_Integer aDim;
+ //
+ aDim=Dimension(aShape);
+ if (aDim == 1) {
+ aExp.Init(aShape, TopAbs_EDGE);
+ for (; aExp.More(); aExp.Next()) {
+ const TopoDS_Edge& aE = *(TopoDS_Edge*)&aExp.Current();
+ UpdateVertices(aE);
+ }
+ } else {
+ aExp.Init(aShape, TopAbs_FACE);
+ for (; aExp.More(); aExp.Next()) {
+ const TopoDS_Face& aF = *(TopoDS_Face*)&aExp.Current();
+ UpdateEdges(aF);
+ }
+ }
+}
+
//=======================================================================
//function : CorrectVertexTolerance
//purpose :
}
}
-
-
#define NCONTROL 23
//=======================================================================
//function : Validate
//purpose :
//=======================================================================
Standard_Boolean Validate(const Adaptor3d_Curve& CRef,
- const Adaptor3d_Curve& Other,
- const Standard_Real Tol,
- const Standard_Boolean SameParameter,
- Standard_Real& aNewTolerance)
+ const Adaptor3d_Curve& Other,
+ const Standard_Real Tol,
+ const Standard_Boolean SameParameter,
+ Standard_Real& aNewTolerance)
{
Standard_Real First, Last, MaxDistance, aD, Tol2;
Standard_Boolean aFlag=Standard_False;
Standard_Boolean proj = (!SameParameter ||
- First != Other.FirstParameter() ||
- Last != Other.LastParameter());
+ First != Other.FirstParameter() ||
+ Last != Other.LastParameter());
//
// 1.
if (!proj) {
aD=pref.SquareDistance(pother);
if (aD > Tol2) {
- if (aD>MaxDistance) {
- MaxDistance=aD;
- }
- aFlag=Standard_True;
+ if (aD>MaxDistance) {
+ MaxDistance=aD;
+ }
+ aFlag=Standard_True;
}
}
aD = pd.SquareDistance(pdo);
if (aD > Tol2) {
if (aD>MaxDistance) {
- MaxDistance=aD;
+ MaxDistance=aD;
}
aFlag=Standard_True;
}
refd.Perform(pother,rprm);
if (!refd.IsDone() || refd.SquareDistance() > Tol2) {
- if (refd.IsDone()) {
- aD=refd.SquareDistance();
- if (aD > Tol2 && aD>MaxDistance) {
- aFlag=Standard_True;
- MaxDistance=aD;
- }
- }
+ if (refd.IsDone()) {
+ aD=refd.SquareDistance();
+ if (aD > Tol2 && aD>MaxDistance) {
+ aFlag=Standard_True;
+ MaxDistance=aD;
+ }
+ }
}
otherd.Perform(pref,oprm);
if (!otherd.IsDone() || otherd.SquareDistance() > Tol2) {
-
- if (otherd.IsDone()) {
- aD=otherd.SquareDistance();
- if (aD > Tol2 && aD>MaxDistance) {
- aFlag=Standard_True;
- MaxDistance=aD;
- }
- }
+
+ if (otherd.IsDone()) {
+ aD=otherd.SquareDistance();
+ if (aD > Tol2 && aD>MaxDistance) {
+ aFlag=Standard_True;
+ MaxDistance=aD;
+ }
+ }
}
}
}
TopLoc_Location L = (Eloc * loc).Predivided(aVertex.Location());
if (cr->IsCurve3D()) {
- const Handle(Geom_Curve)& C = cr->Curve3D();
- if (!C.IsNull()) {
- itpr.Initialize(TV->Points());
- while (itpr.More()) {
- const Handle(BRep_PointRepresentation)& pr = itpr.Value();
- if (pr->IsPointOnCurve(C,L)) {
- Controlp = C->Value(pr->Parameter());
- Controlp.Transform(L.Transformation());
- aD2=prep.SquareDistance(Controlp);
- if (aD2 > Tol) {
- aNewTolerance=sqrt(aD2)+dd;
- if (aNewTolerance<aMaxTol)
- TV->UpdateTolerance(aNewTolerance);
- }
- }
- itpr.Next();
- }
-
- TopAbs_Orientation orv = aVertex.Orientation();
- if (orv == TopAbs_FORWARD || orv == TopAbs_REVERSED) {
- const Handle(BRep_GCurve)& GC = *((Handle(BRep_GCurve)*)&cr);
-
- if (orv==TopAbs_FORWARD)
- Controlp = C->Value(GC->First());
- else
- Controlp = C->Value(GC->Last());
-
- Controlp.Transform(L.Transformation());
- aD2=prep.SquareDistance(Controlp);
-
- if (aD2 > Tol) {
- aNewTolerance=sqrt(aD2)+dd;
- if (aNewTolerance<aMaxTol)
- TV->UpdateTolerance(aNewTolerance);
- }
- }
- }
+ const Handle(Geom_Curve)& C = cr->Curve3D();
+ if (!C.IsNull()) {
+ itpr.Initialize(TV->Points());
+ while (itpr.More()) {
+ const Handle(BRep_PointRepresentation)& pr = itpr.Value();
+ if (pr->IsPointOnCurve(C,L)) {
+ Controlp = C->Value(pr->Parameter());
+ Controlp.Transform(L.Transformation());
+ aD2=prep.SquareDistance(Controlp);
+ if (aD2 > Tol) {
+ aNewTolerance=sqrt(aD2)+dd;
+ if (aNewTolerance<aMaxTol)
+ TV->UpdateTolerance(aNewTolerance);
+ }
+ }
+ itpr.Next();
+ }
+
+ TopAbs_Orientation orv = aVertex.Orientation();
+ if (orv == TopAbs_FORWARD || orv == TopAbs_REVERSED) {
+ const Handle(BRep_GCurve)& GC = *((Handle(BRep_GCurve)*)&cr);
+
+ if (orv==TopAbs_FORWARD)
+ Controlp = C->Value(GC->First());
+ else
+ Controlp = C->Value(GC->Last());
+
+ Controlp.Transform(L.Transformation());
+ aD2=prep.SquareDistance(Controlp);
+
+ if (aD2 > Tol) {
+ aNewTolerance=sqrt(aD2)+dd;
+ if (aNewTolerance<aMaxTol)
+ TV->UpdateTolerance(aNewTolerance);
+ }
+ }
+ }
}
itcr.Next();
}
}
}
+//=======================================================================
+// Function : UpdateVertices
+// purpose :
+//=======================================================================
+ void UpdateVertices(const TopoDS_Edge& aE)
+{
+ Standard_Real aTolE, aTolV;
+ TopoDS_Iterator aItE;
+ BRep_Builder aBB;
+ //
+ aTolE = BRep_Tool::Tolerance(aE);
+ aItE.Initialize(aE);
+ for (; aItE.More(); aItE.Next()) {
+ const TopoDS_Vertex& aV = *(TopoDS_Vertex*)&aItE.Value();
+ aTolV = BRep_Tool::Tolerance(aV);
+ if (aTolV < aTolE) {
+ aBB.UpdateVertex(aV, aTolE);
+ }
+ }
+}
+//=======================================================================
+// Function : UpdateEdges
+// purpose :
+//=======================================================================
+ void UpdateEdges(const TopoDS_Face& aF)
+{
+ Standard_Real aTolF, aTolE, aTolV;
+ TopoDS_Iterator aItF, aItW, aItE;
+ BRep_Builder aBB;
+ //
+ aTolF = BRep_Tool::Tolerance(aF);
+ aItF.Initialize(aF);
+ for (; aItF.More(); aItF.Next()) {
+ const TopoDS_Shape& aS = aItF.Value();
+ if (aS.ShapeType()==TopAbs_WIRE) {
+ aItW.Initialize(aS);
+ for (; aItW.More(); aItW.Next()) {
+ const TopoDS_Edge& aE = *(TopoDS_Edge*)&aItW.Value();
+ aTolE = BRep_Tool::Tolerance(aE);
+ if (aTolE < aTolF) {
+ aBB.UpdateEdge(aE, aTolF);
+ aTolE = aTolF;
+ }
+ UpdateVertices(aE);
+ }
+ }
+ else {
+ const TopoDS_Vertex& aV = *(TopoDS_Vertex*)&aItF.Value();
+ aTolV = BRep_Tool::Tolerance(aV);
+ if (aTolV < aTolE) {
+ aBB.UpdateVertex(aV, aTolF);
+ }
+ }
+ }
+}
#include <BRep_Tool.hxx>
#include <BRep_Builder.hxx>
+#include <TopoDS_Iterator.hxx>
+static
+ void TreatCompound(const TopoDS_Shape& theC1,
+ BOPCol_ListOfShape& theLSX);
//=======================================================================
// function: UpdateVertex
}
}
}
+//=======================================================================
+//function : Dimension
+//purpose :
+//=======================================================================
+ Standard_Integer BOPTools_AlgoTools::Dimension(const TopoDS_Shape& theS)
+{
+ Standard_Integer i, iRet, iRx0, iRx;
+ TopAbs_ShapeEnum aTS;
+ BOPCol_ListOfShape aLS;
+ BOPCol_ListIteratorOfListOfShape aIt;
+ //
+ aTS=theS.ShapeType();
+ if (aTS!=TopAbs_COMPOUND) {
+ switch (aTS) {
+ case TopAbs_EDGE:
+ case TopAbs_WIRE:
+ iRet=1;
+ break;
+ case TopAbs_FACE:
+ case TopAbs_SHELL:
+ iRet=2;
+ break;
+ case TopAbs_SOLID:
+ case TopAbs_COMPSOLID:
+ iRet=3;
+ break;
+ default:
+ iRet=0;
+ }
+ return iRet;
+ }
+ //
+ iRet=-1;
+ TreatCompound(theS, aLS);
+ if(aLS.IsEmpty()) {
+ iRet = -2; //empty compound
+ return iRet;
+ }
+ aIt.Initialize(aLS);
+ for (i=0; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aSx=aIt.Value();
+ iRx=Dimension(aSx);
+ if (!i) {
+ iRx0=iRx;
+ i=1;
+ continue;
+ }
+ if (iRx!=iRx0) {
+ return iRet;// -1
+ }
+ }
+ return iRx;
+}
+
+//=======================================================================
+//function : TreatCompound
+//purpose :
+//=======================================================================
+ void TreatCompound(const TopoDS_Shape& theC1,
+ BOPCol_ListOfShape& theLSX)
+{
+ Standard_Integer aNbC1;
+ TopAbs_ShapeEnum aType;
+ BOPCol_ListOfShape aLC, aLC1;
+ BOPCol_ListIteratorOfListOfShape aIt, aIt1;
+ TopoDS_Iterator aItC;
+ //
+ aLC.Append (theC1);
+ while(1) {
+ aLC1.Clear();
+ aIt.Initialize(aLC);
+ for (; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aC=aIt.Value(); //C is compound
+ //
+ aItC.Initialize(aC);
+ for (; aItC.More(); aItC.Next()) {
+ const TopoDS_Shape& aS=aItC.Value();
+ aType=aS.ShapeType();
+ if (aType==TopAbs_COMPOUND) {
+ aLC1.Append(aS);
+ }
+ else {
+ theLSX.Append(aS);
+ }
+ }
+ }
+ //
+ aNbC1=aLC1.Extent();
+ if (!aNbC1) {
+ break;
+ }
+ //
+ aLC.Clear();
+ aIt.Initialize(aLC1);
+ for (; aIt.More(); aIt.Next()) {
+ const TopoDS_Shape& aSC=aIt.Value();
+ aLC.Append(aSC);
+ }
+ }// while(1)
+}
Standard_Real pe2p= Cote.Dot(PE2);
Standard_Real pt1p= Cote.Dot(PT1);
Standard_Real pt2p= Cote.Dot(PT2);
-#ifndef DEB
- Standard_Real lambda1 =0.,lambda2 =0.,alpha1 =0.,alpha2 =0.;
-#else
- Standard_Real lambda1,lambda2,alpha1,alpha2;
-#endif
+ Standard_Real lambda1=0., lambda2=0., alpha1=0., alpha2=0.;
IntPolyh_Point PEP1,PTP1,PEP2,PTP2;
if (pe1p>pe2p) {
# Original bug : pro9373
# Date : 24mar98
-puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_4"
-puts "TODO #22911 ALL: Error : The square of result shape is"
+puts "TODO #22911 ALL: Error : The $command is not valid. The square is 0."
restore [locate_data_file pro9373a.rle] a
restore [locate_data_file pro9373b.rle] b
# Original bug : buc60127
# Date : 18mar98
-puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
-puts "TODO #22911 ALL: Error : The square of result shape is"
+puts "TODO #22911 ALL: An exception was caught"
+puts "TODO #22911 ALL: \\*\\* Exception \\*\\*.*"
+puts "TODO #22911 ALL: TEST INCOMPLETE"
restore [locate_data_file buc60127-part.rle] part
restore [locate_data_file buc60127-tool.rle] tool
-puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_4"
-puts "TODO #22911 ALL: Error : The square of result shape is"
+puts "TODO #22911 ALL: Error : The $command is not valid. The square is 0."
restore [locate_data_file CTO908_topo108-o.brep] obj
restore [locate_data_file pro12903b.rle] out
+puts "TODO #22911 ALL: Error : The square of result shape is"
+
restore [locate_data_file box.brep] b
restore [locate_data_file c2.brep] c
+puts "TODO #22911 ALL: Error : The square of result shape is"
+
restore [locate_data_file c2.brep] c
restore [locate_data_file box.brep] b
# Original bug : pro14260
# Date : 21 Sept 98
+puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
+puts "TODO #22911 ALL: Error : The square of result shape is"
restore [locate_data_file CTO900_pro14260c.rle] c
restore [locate_data_file pro14260d.rle] d
|| [string compare $os "Debian40-64"] == 0
|| [string compare $os "Mandriva2008"] == 0
|| [string compare $os "Mandriva2008-64"] == 0
- || [string compare $os "SL51-64"] == 0
+ || [string compare $os "SL51-64"] == 0
+ || [string compare $os "windows"] == 0
} {
puts "TODO OCC22911 $os: Error : The square of result shape is"
}
bop a b
bopsection result
-set length 529.118
+set length 523.479
+puts "TODO #22911 ALL: Error : The $command is not valid. The length is 0."
+puts "TODO #22911 ALL: Error : The length of result shape is "
+
restore [locate_data_file a16] a
restore [locate_data_file b16] b
bsection result a b
+puts "TODO #22911 ALL: An exception was caught"
+puts "TODO #22911 ALL: \\*\\* Exception \\*\\*.*"
+puts "TODO #22911 ALL: TEST INCOMPLETE"
+
restore [locate_data_file lh3d_px1.brep] a
#removing intersection of faces a_3 and a_220
+puts "TODO #22911 ALL: An exception was caught"
+puts "TODO #22911 ALL: \\*\\* Exception \\*\\*.*"
+puts "TODO #22911 ALL: TEST INCOMPLETE"
+
restore [locate_data_file lh3d_px1.brep] a
#removing intersection of faces a_3 and a_220
+if { [array get env os_type] != "" } {
+ set os $env(os_type)
+}
+if { [string compare $os "windows"] == 0 } {
+ puts "TODO #22911 ALL: Faulty shapes in variables faulty_1 to faulty_"
+} else {
+ puts "TODO #22911 ALL: TEST INCOMPLETE"
+}
+
cpulimit 1000
restore [locate_data_file lh3d_px2.brep] a
+puts "TODO #22911 ALL: An exception was caught"
+puts "TODO #22911 ALL: \\*\\* Exception \\*\\*.*"
+puts "TODO #22911 ALL: TEST INCOMPLETE"
+
cpulimit 900
restore [locate_data_file lh3d_px2.brep] a
+if { [array get env os_type] != "" } {
+ set os $env(os_type)
+}
+if { [string compare $os "windows"] == 0 } {
+ puts "TODO #22911 ALL: An exception was caught"
+ puts "TODO #22911 ALL: \\*\\* Exception \\*\\*.*"
+ puts "TODO #22911 ALL: TEST INCOMPLETE"
+} else {
+ puts "TODO #22911 ALL: TEST INCOMPLETE"
+}
+
cpulimit 900
restore [locate_data_file lh3d_ro1.brep] a
bsection result object tool
-set length 16.4762
+set length 11.8242
restore [locate_data_file bug23472_f1.brep] f1
restore [locate_data_file bug23472_f2.brep] f2
-bsection result f1 f2 -2d
+bsection result f1 f2
regexp {Mass +: +([-0-9.+eE]+)} [lprops result] full l
#F6----------------------------------------------
-puts "TODO OCC22803 All:Error in depouille"
-puts "TODO OCC22803 All:Error : The depouille can not be build"
+puts "TODO OCC22803 All:Faulty shapes in variables faulty_1 to faulty_"
+puts "TODO OCC22803 All:Error : The square of result shape is "
polyline p 0 0 3 0 0 0 10 0 0 10 0 3
beziercurve bc 4 10 0 3 7 0 2 3 0 3 0 0 3
mkedge bc bc
# cts20088
+puts "TODO OCC22810 ALL: Error : The square of result shape is"
restore [locate_data_file cts20088_base.brep] base
restore [locate_data_file contour_pkv.rle] cont