1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00

0025109: Check PolygonOnTriangulation contained in edges

1. New status "BRepCheck_InvalidPolygonOnTriangulation" is added.
2. Small correction of output of "checkshape" command result.

Test cases were changed.

Test case for issue CR25109

Some test cases were changed according to their new behavior.
This commit is contained in:
nbv 2014-10-02 13:54:14 +04:00 committed by bugmaster
parent 8e7c8ccf3a
commit 52d4584155
17 changed files with 643 additions and 444 deletions

View File

@ -98,6 +98,8 @@ is
BadOrientation, BadOrientation,
BadOrientationOfSubshape, BadOrientationOfSubshape,
InvalidPolygonOnTriangulation,
InvalidToleranceValue, InvalidToleranceValue,
-- for exception -- for exception

View File

@ -175,6 +175,13 @@ void BRepCheck::Print(const BRepCheck_Status stat,
case BRepCheck_CheckFail: case BRepCheck_CheckFail:
OS << "BRepCheck_CheckFail\n"; OS << "BRepCheck_CheckFail\n";
break; break;
case BRepCheck_InvalidPolygonOnTriangulation:
OS << "BRepCheck_InvalidPolygonOnTriangulation\n";
break;
case BRepCheck_InvalidToleranceValue:
OS << "BRepCheck_InvalidToleranceValue\n";
break;
default: default:
break; break;
} }

View File

@ -103,15 +103,17 @@ void BRepCheck_Analyzer::Put(const TopoDS_Shape& S,
void BRepCheck_Analyzer::Perform(const TopoDS_Shape& S) void BRepCheck_Analyzer::Perform(const TopoDS_Shape& S)
{ {
for(TopoDS_Iterator theIterator(S);theIterator.More();theIterator.Next()) { for(TopoDS_Iterator theIterator(S);theIterator.More();theIterator.Next())
Perform(theIterator.Value()); Perform(theIterator.Value());
}
// //
TopAbs_ShapeEnum styp; TopAbs_ShapeEnum styp;
TopExp_Explorer exp; TopExp_Explorer exp;
// //
styp = S.ShapeType(); styp = S.ShapeType();
switch (styp) {
switch (styp)
{
case TopAbs_VERTEX: case TopAbs_VERTEX:
// modified by NIZHNY-MKK Wed May 19 16:56:16 2004.BEGIN // modified by NIZHNY-MKK Wed May 19 16:56:16 2004.BEGIN
// There is no need to check anything. // There is no need to check anything.
@ -121,306 +123,313 @@ void BRepCheck_Analyzer::Perform(const TopoDS_Shape& S)
// modified by NIZHNY-MKK Wed May 19 16:56:23 2004.END // modified by NIZHNY-MKK Wed May 19 16:56:23 2004.END
break; break;
case TopAbs_EDGE: { case TopAbs_EDGE:
// Modified by skv - Tue Apr 27 11:38:08 2004 Begin {
// There is no need to check anything except vertices on single edge. Handle(BRepCheck_Result)& aRes = myMap(S);
// if (myShape.IsSame(S)) {
// myMap(S)->Blind(); try
// } {
// Modified by skv - Tue Apr 27 11:38:09 2004 End BRepCheck_Status ste = Handle(BRepCheck_Edge)::
TopTools_MapOfShape MapS; DownCast(aRes)->CheckPolygonOnTriangulation(TopoDS::Edge(S));
for (exp.Init(S,TopAbs_VERTEX);exp.More(); exp.Next()) { if(ste != BRepCheck_NoError)
const TopoDS_Shape& aVertex = exp.Current(); {
try { Handle(BRepCheck_Edge)::DownCast(aRes)->SetStatus(ste);
OCC_CATCH_SIGNALS }
if (MapS.Add(aVertex)) {
myMap(aVertex)->InContext(S);
}
} }
catch(Standard_Failure) { catch(Standard_Failure)
{
#ifdef DEB #ifdef DEB
cout<<"BRepCheck_Analyzer : "; cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout); Standard_Failure::Caught()->Print(cout);
cout<<endl; cout<<endl;
#endif #endif
if ( ! myMap(S).IsNull() ) { if ( ! myMap(S).IsNull() )
myMap(S)->SetFailStatus(S); {
} myMap(S)->SetFailStatus(S);
Handle(BRepCheck_Result) aRes = myMap(aVertex); }
if ( ! aRes.IsNull() ) {
aRes->SetFailStatus(aVertex); if ( ! aRes.IsNull() )
aRes->SetFailStatus(S); {
} aRes->SetFailStatus(exp.Current());
aRes->SetFailStatus(S);
}
} }
}
TopTools_MapOfShape MapS;
for (exp.Init(S,TopAbs_VERTEX);exp.More(); exp.Next())
{
const TopoDS_Shape& aVertex = exp.Current();
try
{
OCC_CATCH_SIGNALS
if (MapS.Add(aVertex))
myMap(aVertex)->InContext(S);
}
catch(Standard_Failure)
{
#ifdef DEB
cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout);
cout<<endl;
#endif
if ( ! myMap(S).IsNull() )
myMap(S)->SetFailStatus(S);
Handle(BRepCheck_Result) aRes = myMap(aVertex);
if ( ! aRes.IsNull() )
{
aRes->SetFailStatus(aVertex);
aRes->SetFailStatus(S);
}
}//catch(Standard_Failure)
}//for (exp.Init(S,TopAbs_VERTEX);exp.More(); exp.Next())
} }
break; break;
case TopAbs_WIRE: case TopAbs_WIRE:
// Modified by Sergey KHROMOV - Mon May 6 15:53:39 2002 Begin {
// There is no need to check the orientation of a single wire }
// (not in context of face).
// {
// if (myShape.IsSame(S)) {
// Handle(BRepCheck_Wire)::DownCast(myMap(S))->Orientation(TopoDS_Face(),
// Standard_True);
// }
// }
// Modified by Sergey KHROMOV - Mon May 6 15:53:40 2002 End
break; break;
case TopAbs_FACE: case TopAbs_FACE:
{ {
TopTools_MapOfShape MapS; TopTools_MapOfShape MapS;
for (exp.Init(S,TopAbs_VERTEX);exp.More(); exp.Next()) { for (exp.Init(S,TopAbs_VERTEX);exp.More(); exp.Next())
try { {
OCC_CATCH_SIGNALS try
if (MapS.Add(exp.Current())) { {
myMap(exp.Current())->InContext(S); OCC_CATCH_SIGNALS
} if (MapS.Add(exp.Current()))
} {
catch(Standard_Failure) { myMap(exp.Current())->InContext(S);
}
}
catch(Standard_Failure)
{
#ifdef DEB #ifdef DEB
cout<<"BRepCheck_Analyzer : "; cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout); Standard_Failure::Caught()->Print(cout);
cout<<endl; cout<<endl;
#endif #endif
if ( ! myMap(S).IsNull() ) { if ( ! myMap(S).IsNull() )
myMap(S)->SetFailStatus(S); {
} myMap(S)->SetFailStatus(S);
Handle(BRepCheck_Result) aRes = myMap(exp.Current()); }
Handle(BRepCheck_Result) aRes = myMap(exp.Current());
if ( ! aRes.IsNull() ) { if ( ! aRes.IsNull() )
aRes->SetFailStatus(exp.Current()); {
aRes->SetFailStatus(S); aRes->SetFailStatus(exp.Current());
} aRes->SetFailStatus(S);
} }
}
} }
Standard_Boolean performwire = Standard_True; Standard_Boolean performwire = Standard_True;
Standard_Boolean isInvalidTolerance = Standard_False;
MapS.Clear(); MapS.Clear();
for (exp.Init(S,TopAbs_EDGE);exp.More(); exp.Next()) { for (exp.Init(S,TopAbs_EDGE);exp.More(); exp.Next())
try { {
OCC_CATCH_SIGNALS try
if (MapS.Add(exp.Current())) { {
Handle(BRepCheck_Result)& res = myMap(exp.Current()); OCC_CATCH_SIGNALS
res->InContext(S); if (MapS.Add(exp.Current()))
if (performwire) { {
for (res->InitContextIterator(); Handle(BRepCheck_Result)& res = myMap(exp.Current());
res->MoreShapeInContext(); res->InContext(S);
res->NextShapeInContext()) { if (performwire)
if(res->ContextualShape().IsSame(S)) { {
break; for ( res->InitContextIterator();
} res->MoreShapeInContext();
} res->NextShapeInContext())
BRepCheck_ListIteratorOfListOfStatus itl(res->StatusOnShape()); {
for (; itl.More(); itl.Next()) { if(res->ContextualShape().IsSame(S))
BRepCheck_Status ste = itl.Value(); break;
if (ste == BRepCheck_NoCurveOnSurface || }
ste == BRepCheck_InvalidCurveOnSurface ||
ste == BRepCheck_InvalidRange || BRepCheck_ListIteratorOfListOfStatus itl(res->StatusOnShape());
ste == BRepCheck_InvalidCurveOnClosedSurface) { for (; itl.More(); itl.Next())
performwire = Standard_False; {
break; BRepCheck_Status ste = itl.Value();
} if (ste == BRepCheck_NoCurveOnSurface ||
} ste == BRepCheck_InvalidCurveOnSurface ||
} ste == BRepCheck_InvalidRange ||
} ste == BRepCheck_InvalidCurveOnClosedSurface)
} {
catch(Standard_Failure) { performwire = Standard_False;
break;
}
}
}
}
}
catch(Standard_Failure)
{
#ifdef DEB #ifdef DEB
cout<<"BRepCheck_Analyzer : "; cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout); Standard_Failure::Caught()->Print(cout);
cout<<endl; cout<<endl;
#endif #endif
if ( ! myMap(S).IsNull() )
{
myMap(S)->SetFailStatus(S);
}
if ( ! myMap(S).IsNull() ) { Handle(BRepCheck_Result) aRes = myMap(exp.Current());
myMap(S)->SetFailStatus(S);
}
Handle(BRepCheck_Result) aRes = myMap(exp.Current());
if ( ! aRes.IsNull() ) { if ( ! aRes.IsNull() )
aRes->SetFailStatus(exp.Current()); {
aRes->SetFailStatus(S); aRes->SetFailStatus(exp.Current());
} aRes->SetFailStatus(S);
} }
}
} }
Standard_Boolean orientofwires = performwire; Standard_Boolean orientofwires = performwire;
for (exp.Init(S,TopAbs_WIRE);exp.More(); exp.Next()) { for (exp.Init(S,TopAbs_WIRE);exp.More(); exp.Next())
try { {
OCC_CATCH_SIGNALS try
Handle(BRepCheck_Result)& res = myMap(exp.Current()); {
res->InContext(S); OCC_CATCH_SIGNALS
if (orientofwires) { Handle(BRepCheck_Result)& res = myMap(exp.Current());
for (res->InitContextIterator(); res->InContext(S);
res->MoreShapeInContext(); if (orientofwires)
res->NextShapeInContext()) { {
if(res->ContextualShape().IsSame(S)) { for ( res->InitContextIterator();
break; res->MoreShapeInContext();
} res->NextShapeInContext())
} {
BRepCheck_ListIteratorOfListOfStatus itl(res->StatusOnShape()); if(res->ContextualShape().IsSame(S))
for (; itl.More(); itl.Next()) { {
BRepCheck_Status ste = itl.Value(); break;
if (ste != BRepCheck_NoError) { }
orientofwires = Standard_False; }
break; BRepCheck_ListIteratorOfListOfStatus itl(res->StatusOnShape());
} for (; itl.More(); itl.Next())
} {
} BRepCheck_Status ste = itl.Value();
} if (ste != BRepCheck_NoError)
catch(Standard_Failure) { {
orientofwires = Standard_False;
break;
}
}
}
}
catch(Standard_Failure)
{
#ifdef DEB #ifdef DEB
cout<<"BRepCheck_Analyzer : "; cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout); Standard_Failure::Caught()->Print(cout);
cout<<endl; cout<<endl;
#endif #endif
if ( ! myMap(S).IsNull() ) { if ( ! myMap(S).IsNull() )
myMap(S)->SetFailStatus(S); {
} myMap(S)->SetFailStatus(S);
Handle(BRepCheck_Result) aRes = myMap(exp.Current()); }
if ( ! aRes.IsNull() ) { Handle(BRepCheck_Result) aRes = myMap(exp.Current());
aRes->SetFailStatus(exp.Current());
aRes->SetFailStatus(S); if ( ! aRes.IsNull() )
} {
} aRes->SetFailStatus(exp.Current());
aRes->SetFailStatus(S);
}
}
} }
try { try
{
OCC_CATCH_SIGNALS OCC_CATCH_SIGNALS
if (performwire) { if(isInvalidTolerance)
if (orientofwires) { {
Handle(BRepCheck_Face)::DownCast(myMap(S))-> Handle(BRepCheck_Face)::
OrientationOfWires(Standard_True);// on enregistre DownCast(myMap(S))->SetStatus(BRepCheck_InvalidToleranceValue);
} }
// else { else if (performwire)
// Handle(BRepCheck_Face)::DownCast(myMap(S))-> {
// IntersectWires(Standard_True); // on enregistre if (orientofwires)
// } {
else { Handle(BRepCheck_Face)::DownCast(myMap(S))->
Handle(BRepCheck_Face)::DownCast(myMap(S))->SetUnorientable(); OrientationOfWires(Standard_True);// on enregistre
} }
} else
else { {
Handle(BRepCheck_Face)::DownCast(myMap(S))->SetUnorientable(); Handle(BRepCheck_Face)::DownCast(myMap(S))->SetUnorientable();
} }
}
else
{
Handle(BRepCheck_Face)::DownCast(myMap(S))->SetUnorientable();
}
} }
catch(Standard_Failure) { catch(Standard_Failure)
{
#ifdef DEB #ifdef DEB
cout<<"BRepCheck_Analyzer : "; cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout); Standard_Failure::Caught()->Print(cout);
cout<<endl; cout<<endl;
#endif #endif
if ( ! myMap(S).IsNull() )
{
myMap(S)->SetFailStatus(S);
}
if ( ! myMap(S).IsNull() ) { for (exp.Init(S,TopAbs_WIRE);exp.More(); exp.Next())
myMap(S)->SetFailStatus(S); {
} Handle(BRepCheck_Result) aRes = myMap(exp.Current());
for (exp.Init(S,TopAbs_WIRE);exp.More(); exp.Next()) { if ( ! aRes.IsNull() )
Handle(BRepCheck_Result) aRes = myMap(exp.Current()); {
aRes->SetFailStatus(exp.Current());
if ( ! aRes.IsNull() ) { aRes->SetFailStatus(S);
aRes->SetFailStatus(exp.Current()); myMap(S)->SetFailStatus(exp.Current());
aRes->SetFailStatus(S); }
myMap(S)->SetFailStatus(exp.Current()); }
}
}
} }
} }
break; break;
case TopAbs_SHELL: case TopAbs_SHELL:
//modified by NIZNHY-PKV Mon Oct 13 14:23:53 2008f //modified by NIZNHY-PKV Mon Oct 13 14:23:53 2008f
/* {
Standard_Boolean VerifyOrientation, bFlag;
//
VerifyOrientation = Standard_True;
//
exp.Init(S,TopAbs_FACE);
for (; exp.More(); exp.Next()) {
const TopoDS_Shape& aF=exp.Current();
try {
OCC_CATCH_SIGNALS
bFlag= !(Handle(BRepCheck_Face)::DownCast(myMap(aF))->IsUnorientable());
VerifyOrientation = (VerifyOrientation && bFlag);
}
catch(Standard_Failure) {
#ifdef DEB
cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout);
cout<<endl;
#endif
if ( ! myMap(S).IsNull() ) {
myMap(S)->SetFailStatus(S);
}
Handle(BRepCheck_Result) aRes = myMap(exp.Current());
if ( ! aRes.IsNull() ) {
aRes->SetFailStatus(exp.Current());
aRes->SetFailStatus(S);
}
}
} //
try {
OCC_CATCH_SIGNALS
if (VerifyOrientation) {
Handle(BRepCheck_Shell)::DownCast(myMap(S))->Orientation(Standard_True);
}
else {
Handle(BRepCheck_Shell)::DownCast(myMap(S))->SetUnorientable();
}
}
catch(Standard_Failure) {
#ifdef DEB
cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout);
cout<<endl;
#endif
if ( ! myMap(S).IsNull() ) {
myMap(S)->SetFailStatus(S);
}
exp.Init(S,TopAbs_FACE);
for (; exp.More(); exp.Next()) {
Handle(BRepCheck_Result) aRes = myMap(exp.Current());
if ( ! aRes.IsNull() ) {
aRes->SetFailStatus(exp.Current());
aRes->SetFailStatus(S);
myMap(S)->SetFailStatus(exp.Current());
}
}
}
}
*/
//modified by NIZNHY-PKV Mon Oct 13 14:24:04 2008t //modified by NIZNHY-PKV Mon Oct 13 14:24:04 2008t
break; break;
//
case TopAbs_SOLID: { case TopAbs_SOLID:
{
exp.Init(S,TopAbs_SHELL); exp.Init(S,TopAbs_SHELL);
for (; exp.More(); exp.Next()) { for (; exp.More(); exp.Next())
{
const TopoDS_Shape& aShell=exp.Current(); const TopoDS_Shape& aShell=exp.Current();
try { try
{
OCC_CATCH_SIGNALS OCC_CATCH_SIGNALS
myMap(aShell)->InContext(S); myMap(aShell)->InContext(S);
} }
catch(Standard_Failure) { catch(Standard_Failure)
{
#ifdef DEB #ifdef DEB
cout<<"BRepCheck_Analyzer : "; cout<<"BRepCheck_Analyzer : ";
Standard_Failure::Caught()->Print(cout); Standard_Failure::Caught()->Print(cout);
cout<<endl; cout<<endl;
#endif #endif
if ( ! myMap(S).IsNull() ) { if ( ! myMap(S).IsNull() )
{
myMap(S)->SetFailStatus(S); myMap(S)->SetFailStatus(S);
} }
// //
Handle(BRepCheck_Result) aRes = myMap(aShell); Handle(BRepCheck_Result) aRes = myMap(aShell);
if (!aRes.IsNull() ) { if (!aRes.IsNull() )
{
aRes->SetFailStatus(exp.Current()); aRes->SetFailStatus(exp.Current());
aRes->SetFailStatus(S); aRes->SetFailStatus(S);
} }
}//catch(Standard_Failure)
}//for (; exp.More(); exp.Next())
} }
}
}
break;//case TopAbs_SOLID break;//case TopAbs_SOLID
default: default:
break; break;

View File

@ -21,7 +21,8 @@ class Edge from BRepCheck inherits Result from BRepCheck
uses Shape from TopoDS, uses Shape from TopoDS,
Edge from TopoDS, Edge from TopoDS,
CurveRepresentation from BRep, CurveRepresentation from BRep,
HCurve from Adaptor3d HCurve from Adaptor3d,
Status from BRepCheck
is is
@ -55,6 +56,18 @@ is
is static; is static;
SetStatus(me: mutable;
theStatus:Status from BRepCheck)
--- Purpose: Sets status of Edge;
is static;
CheckPolygonOnTriangulation(me: mutable; theEdge: Edge from TopoDS)
--- Purpose: Checks, if polygon on triangulation of heEdge
-- is out of 3D-curve of this edge.
returns Status from BRepCheck
is static;
fields fields
myCref : CurveRepresentation from BRep; myCref : CurveRepresentation from BRep;

View File

@ -16,6 +16,10 @@
#include <BRepCheck_Edge.ixx> #include <BRepCheck_Edge.ixx>
#include <TColStd_Array1OfTransient.hxx> #include <TColStd_Array1OfTransient.hxx>
#include <TColStd_HArray1OfReal.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <Bnd_Box.hxx>
#include <BRepCheck_ListOfStatus.hxx> #include <BRepCheck_ListOfStatus.hxx>
#include <BRepCheck_ListIteratorOfListOfStatus.hxx> #include <BRepCheck_ListIteratorOfListOfStatus.hxx>
@ -29,6 +33,8 @@
#include <BRep_GCurve.hxx> #include <BRep_GCurve.hxx>
#include <BRep_CurveOnSurface.hxx> #include <BRep_CurveOnSurface.hxx>
#include <BRep_PolygonOnTriangulation.hxx>
#include <BRep_Tool.hxx> #include <BRep_Tool.hxx>
#include <TopExp_Explorer.hxx> #include <TopExp_Explorer.hxx>
@ -57,6 +63,8 @@
#include <TopoDS_Face.hxx> #include <TopoDS_Face.hxx>
#include <Precision.hxx> #include <Precision.hxx>
#include <Poly_PolygonOnTriangulation.hxx>
#include <Poly_Triangulation.hxx>
//modified by NIZNHY-PKV Thu May 05 09:01:57 2011f //modified by NIZNHY-PKV Thu May 05 09:01:57 2011f
static static
@ -83,7 +91,7 @@ static
// const Standard_Boolean); // const Standard_Boolean);
//modified by NIZNHY-PKV Thu May 05 09:02:01 2011t //modified by NIZNHY-PKV Thu May 05 09:02:01 2011t
#define NCONTROL 23 static const Standard_Integer NCONTROL=23;
//======================================================================= //=======================================================================
//function : BRepCheck_Edge //function : BRepCheck_Edge
@ -236,7 +244,13 @@ void BRepCheck_Edge::InContext(const TopoDS_Shape& S)
return; return;
} }
switch (styp) { switch (styp)
{
case TopAbs_WIRE:
{
}
break;
case TopAbs_FACE: case TopAbs_FACE:
if (!myCref.IsNull()) { if (!myCref.IsNull()) {
@ -273,8 +287,8 @@ void BRepCheck_Edge::InContext(const TopoDS_Shape& S)
// gka OCC // gka OCC
// Modified by skv - Tue Apr 27 11:50:35 2004 Begin // Modified by skv - Tue Apr 27 11:50:35 2004 Begin
// if (SameRange && (fabs(f-First) > Precision::PConfusion() || fabs(l-Last)> Precision::PConfusion())) { //f != First || l != Last)) { gka OCC // if (SameRange && (fabs(f-First) > Precision::PConfusion() || fabs(l-Last)> Precision::PConfusion())) { //f != First || l != Last)) { gka OCC
if (fabs(f-First) > Precision::PConfusion() || if (Abs(f-First) > Precision::PConfusion() ||
fabs(l-Last) > Precision::PConfusion()) { Abs(l-Last) > Precision::PConfusion()) {
BRepCheck::Add(lst,BRepCheck_InvalidSameRangeFlag); BRepCheck::Add(lst,BRepCheck_InvalidSameRangeFlag);
BRepCheck::Add(lst,BRepCheck_InvalidSameParameterFlag); BRepCheck::Add(lst,BRepCheck_InvalidSameParameterFlag);
// if (SameParameter) { // if (SameParameter) {
@ -449,7 +463,14 @@ Standard_Boolean BRepCheck_Edge::GeometricControls() const
return myGctrl; return myGctrl;
} }
//=======================================================================
//function : SetStatus
//purpose :
//=======================================================================
void BRepCheck_Edge::SetStatus(const BRepCheck_Status theStatus)
{
BRepCheck::Add(myMap(myShape),theStatus);
}
//======================================================================= //=======================================================================
@ -547,6 +568,114 @@ Standard_Real BRepCheck_Edge::Tolerance()
return sqrt(tolCal)*1.05; return sqrt(tolCal)*1.05;
} }
//=======================================================================
//function : CheckPolygonOnTriangulation
//purpose :
//=======================================================================
BRepCheck_Status BRepCheck_Edge::
CheckPolygonOnTriangulation(const TopoDS_Edge& theEdge)
{
BRep_ListOfCurveRepresentation& aListOfCR =
(*((Handle(BRep_TEdge)*) &theEdge.TShape()))->ChangeCurves();
BRep_ListIteratorOfListOfCurveRepresentation anITCR(aListOfCR);
BRepAdaptor_Curve aBC;
aBC.Initialize(theEdge);
if(!aBC.Is3DCurve())
return BRepCheck_NoError;
while (anITCR.More())
{
if(!anITCR.Value()->IsPolygonOnTriangulation())
{
anITCR.Next();
continue;
}
const Handle(BRep_CurveRepresentation) aCR = anITCR.Value();
const Handle(BRep_PolygonOnTriangulation)& aPT =
Handle(BRep_PolygonOnTriangulation)::DownCast(aCR);
const TopLoc_Location aLL = theEdge.Location() * aPT->Location();
const Handle(Poly_Triangulation) aTriang = aCR->Triangulation();
const Handle(Poly_PolygonOnTriangulation) aPOnTriag =
aCR->IsPolygonOnClosedTriangulation() ?
aCR->PolygonOnTriangulation2() :
aCR->PolygonOnTriangulation();
const TColStd_Array1OfInteger& anIndices = aPOnTriag->Nodes();
const TColgp_Array1OfPnt& Nodes = aTriang->Nodes();
const Standard_Integer aNbNodes = anIndices.Length();
const Standard_Real aTol = aPOnTriag->Deflection() +
BRep_Tool::Tolerance(theEdge);
if(aPOnTriag->HasParameters())
{
for(Standard_Integer i = aPOnTriag->Parameters()->Lower();
i <= aPOnTriag->Parameters()->Upper(); i++)
{
const Standard_Real aParam = aPOnTriag->Parameters()->Value(i);
const gp_Pnt aPE(aBC.Value(aParam)),
aPT(Nodes(anIndices(i)).Transformed(aLL));
const Standard_Real aSQDist = aPE.SquareDistance(aPT);
if(aSQDist > aTol*aTol)
{
return BRepCheck_InvalidPolygonOnTriangulation;
}
}
}
else
{
//If aPOnTriag does not have any parameters we will check if it
//inscribes into Bounding box, which is built on the edge triangulation.
Bnd_Box aB;
for (Standard_Integer i = 1; i <= aNbNodes; i++)
{
if (aLL.IsIdentity())
aB.Add(Nodes(anIndices(i)));
else
aB.Add(Nodes(anIndices(i)).Transformed(aLL));
}
aB.Enlarge(aTol);
Standard_Real aFP = aBC.FirstParameter();
Standard_Real aLP = aBC.LastParameter();
const Standard_Real aStep = (aLP - aFP)/IntToReal(NCONTROL);
gp_Pnt aP;
Standard_Real aPar = aFP;
for(Standard_Integer i = 1; i < NCONTROL; i ++)
{
aBC.D0(aPar, aP);
if(aB.IsOut(aP))
{
return BRepCheck_InvalidPolygonOnTriangulation;
}
aPar += aStep;
}
aBC.D0(aLP, aP);
if(aB.IsOut(aP))
{
return BRepCheck_InvalidPolygonOnTriangulation;
}
}
anITCR.Next();
}
return BRepCheck_NoError;
}
//======================================================================= //=======================================================================
//function : Validate //function : Validate
//purpose : //purpose :
@ -564,12 +693,13 @@ Standard_Boolean Validate(const Adaptor3d_Curve& CRef,
Error = 0.; Error = 0.;
First = CRef.FirstParameter(); First = CRef.FirstParameter();
Last = CRef.LastParameter(); Last = CRef.LastParameter();
//
aPC=Precision::PConfusion(); aPC=Precision::PConfusion();
proj = (!SameParameter || proj = (!SameParameter ||
fabs(Other.FirstParameter()-First) > aPC || Abs(Other.FirstParameter()-First) > aPC ||
fabs( Other.LastParameter()-Last) > aPC); Abs( Other.LastParameter()-Last) > aPC);
if (!proj) { if (!proj)
{
Standard_Integer i; Standard_Integer i;
Standard_Real Tol2, prm, dD; Standard_Real Tol2, prm, dD;
gp_Pnt pref, pother; gp_Pnt pref, pother;
@ -581,7 +711,7 @@ Standard_Boolean Validate(const Adaptor3d_Curve& CRef,
//Tol2=Tol*Tol; //Tol2=Tol*Tol;
//modified by NIZNHY-PKV Thu May 05 09:06:47 2011t //modified by NIZNHY-PKV Thu May 05 09:06:47 2011t
for (i = 0; i< NCONTROL; ++i) { for (i = 0; i < NCONTROL; ++i) {
prm = ((NCONTROL-1-i)*First + i*Last)/(NCONTROL-1); prm = ((NCONTROL-1-i)*First + i*Last)/(NCONTROL-1);
pref = CRef.Value(prm); pref = CRef.Value(prm);
pother = Other.Value(prm); pother = Other.Value(prm);
@ -659,18 +789,6 @@ Standard_Boolean Validate(const Adaptor3d_Curve& CRef,
} }
} }
} }
//FINISH :
/*
#ifdef DEB
if (! Status) {
cout << " **** probleme de SameParameter au point :" << endl;
cout << " " << problematic_point.Coord(1) << " "
<< problematic_point.Coord(2) << " "
<< problematic_point.Coord(3) << endl ;
cout << " Erreur detectee :" << Error << " Tolerance :" << Tol << endl;
}
#endif
*/
return Status ; return Status ;

View File

@ -66,6 +66,13 @@ is
is static; is static;
SetStatus(me: mutable;
theStatus:Status from BRepCheck)
--- Purpose: Sets status of Face;
is static;
IsUnorientable(me) IsUnorientable(me)

View File

@ -494,6 +494,15 @@ void BRepCheck_Face::SetUnorientable()
BRepCheck::Add(myMap(myShape),BRepCheck_UnorientableShape); BRepCheck::Add(myMap(myShape),BRepCheck_UnorientableShape);
} }
//=======================================================================
//function : SetStatus
//purpose :
//=======================================================================
void BRepCheck_Face::SetStatus(const BRepCheck_Status theStatus)
{
BRepCheck::Add(myMap(myShape),theStatus);
}
//======================================================================= //=======================================================================
//function : IsUnorientable //function : IsUnorientable

View File

@ -122,7 +122,11 @@ is
---Purpose: set SelfIntersect() to be checked ---Purpose: set SelfIntersect() to be checked
is static; is static;
SetStatus(me: mutable;
theStatus:Status from BRepCheck)
--- Purpose: Sets status of Wire;
is static;
fields fields

View File

@ -1500,6 +1500,17 @@ BRepCheck_Status BRepCheck_Wire::SelfIntersect(const TopoDS_Face& F,
// //
return (BRepCheck_NoError); return (BRepCheck_NoError);
} }
//=======================================================================
//function : SetStatus
//purpose :
//=======================================================================
void BRepCheck_Wire::SetStatus(const BRepCheck_Status theStatus)
{
BRepCheck::Add(myMap(myShape),theStatus);
}
//======================================================================= //=======================================================================
//function : GeometricControls //function : GeometricControls
//purpose : //purpose :

View File

@ -69,6 +69,11 @@
#include <stdio.h> #include <stdio.h>
//Number of BRepCheck_Statuses in BRepCheck_Status.hxx file
//(BRepCheck_NoError is not considered, i.e. general status
//is smaller by one specified in file)
static const Standard_Integer NumberOfStatus = 34;
static char* checkfaultyname = NULL; static char* checkfaultyname = NULL;
Standard_EXPORT void BRepTest_CheckCommands_SetFaultyName(const char* name) Standard_EXPORT void BRepTest_CheckCommands_SetFaultyName(const char* name)
{ {
@ -205,6 +210,7 @@ static void Print(Standard_OStream& OS,
OS << "On Shape " << Name << " :\n"; OS << "On Shape " << Name << " :\n";
for (;itl.More(); itl.Next()) { for (;itl.More(); itl.Next()) {
if (itl.Value() != BRepCheck_NoError)
BRepCheck::Print(itl.Value(),OS); BRepCheck::Print(itl.Value(),OS);
} }
} }
@ -218,6 +224,10 @@ static void Print(Standard_OStream& OS,
case TopAbs_EDGE: case TopAbs_EDGE:
PrintSub(OS,Ana,S,TopAbs_VERTEX); PrintSub(OS,Ana,S,TopAbs_VERTEX);
break; break;
case TopAbs_WIRE:
PrintSub(OS,Ana,S,TopAbs_EDGE);
PrintSub(OS,Ana,S,TopAbs_VERTEX);
break;
case TopAbs_FACE: case TopAbs_FACE:
PrintSub(OS,Ana,S,TopAbs_WIRE); PrintSub(OS,Ana,S,TopAbs_WIRE);
PrintSub(OS,Ana,S,TopAbs_EDGE); PrintSub(OS,Ana,S,TopAbs_EDGE);
@ -473,74 +483,14 @@ void ContextualDump(Draw_Interpretor& theCommands,
static void FillProblems(const BRepCheck_Status stat, static void FillProblems(const BRepCheck_Status stat,
Handle(TColStd_HArray1OfInteger)& NbProblems) Handle(TColStd_HArray1OfInteger)& NbProblems)
{ {
switch (stat) {
case BRepCheck_InvalidPointOnCurve: const Standard_Integer anID = static_cast<Standard_Integer> (stat);
NbProblems->SetValue(1,NbProblems->Value(1)+1); break;
case BRepCheck_InvalidPointOnCurveOnSurface: if((NbProblems->Upper() < anID) || (NbProblems->Lower() > anID))
NbProblems->SetValue(2,NbProblems->Value(2)+1); break; return;
case BRepCheck_InvalidPointOnSurface:
NbProblems->SetValue(3,NbProblems->Value(3)+1); break; NbProblems->SetValue(anID, NbProblems->Value(anID)+1);
case BRepCheck_No3DCurve:
NbProblems->SetValue(4,NbProblems->Value(4)+1); break;
case BRepCheck_Multiple3DCurve:
NbProblems->SetValue(5,NbProblems->Value(5)+1); break;
case BRepCheck_Invalid3DCurve:
NbProblems->SetValue(6,NbProblems->Value(6)+1); break;
case BRepCheck_NoCurveOnSurface:
NbProblems->SetValue(7,NbProblems->Value(7)+1); break;
case BRepCheck_InvalidCurveOnSurface:
NbProblems->SetValue(8,NbProblems->Value(8)+1); break;
case BRepCheck_InvalidCurveOnClosedSurface:
NbProblems->SetValue(9,NbProblems->Value(9)+1); break;
case BRepCheck_InvalidSameRangeFlag:
NbProblems->SetValue(10,NbProblems->Value(10)+1); break;
case BRepCheck_InvalidSameParameterFlag:
NbProblems->SetValue(11,NbProblems->Value(11)+1); break;
case BRepCheck_InvalidDegeneratedFlag:
NbProblems->SetValue(12,NbProblems->Value(12)+1); break;
case BRepCheck_FreeEdge:
NbProblems->SetValue(13,NbProblems->Value(13)+1); break;
case BRepCheck_InvalidMultiConnexity:
NbProblems->SetValue(14,NbProblems->Value(14)+1); break;
case BRepCheck_InvalidRange:
NbProblems->SetValue(15,NbProblems->Value(15)+1); break;
case BRepCheck_EmptyWire:
NbProblems->SetValue(16,NbProblems->Value(16)+1); break;
case BRepCheck_RedundantEdge:
NbProblems->SetValue(17,NbProblems->Value(17)+1); break;
case BRepCheck_SelfIntersectingWire:
NbProblems->SetValue(18,NbProblems->Value(18)+1); break;
case BRepCheck_NoSurface:
NbProblems->SetValue(19,NbProblems->Value(19)+1); break;
case BRepCheck_InvalidWire:
NbProblems->SetValue(20,NbProblems->Value(20)+1); break;
case BRepCheck_RedundantWire:
NbProblems->SetValue(21,NbProblems->Value(21)+1); break;
case BRepCheck_IntersectingWires:
NbProblems->SetValue(22,NbProblems->Value(22)+1); break;
case BRepCheck_InvalidImbricationOfWires:
NbProblems->SetValue(23,NbProblems->Value(23)+1); break;
case BRepCheck_EmptyShell:
NbProblems->SetValue(24,NbProblems->Value(24)+1); break;
case BRepCheck_RedundantFace:
NbProblems->SetValue(25,NbProblems->Value(25)+1); break;
case BRepCheck_UnorientableShape:
NbProblems->SetValue(26,NbProblems->Value(26)+1); break;
case BRepCheck_NotClosed:
NbProblems->SetValue(27,NbProblems->Value(27)+1); break;
case BRepCheck_NotConnected:
NbProblems->SetValue(28,NbProblems->Value(28)+1); break;
case BRepCheck_SubshapeNotInShape:
NbProblems->SetValue(29,NbProblems->Value(29)+1); break;
case BRepCheck_BadOrientation:
NbProblems->SetValue(30,NbProblems->Value(30)+1); break;
case BRepCheck_BadOrientationOfSubshape:
NbProblems->SetValue(31,NbProblems->Value(31)+1); break;
case BRepCheck_CheckFail:
NbProblems->SetValue(32,NbProblems->Value(32)+1); break;
default:
break;
}
} }
@ -663,114 +613,151 @@ void StructuralDump(Draw_Interpretor& theCommands,
theCommands<<" Check Count"<<"\n"; theCommands<<" Check Count"<<"\n";
theCommands<<" ------------------------------------------------"<<"\n"; theCommands<<" ------------------------------------------------"<<"\n";
Handle(TColStd_HArray1OfInteger) NbProblems = new TColStd_HArray1OfInteger(1,32); Handle(TColStd_HArray1OfInteger) NbProblems = new
for(i=1; i<=32; i++) NbProblems->SetValue(i,0); TColStd_HArray1OfInteger(1,NumberOfStatus);
for(i=1; i<=NumberOfStatus; i++) NbProblems->SetValue(i,0);
Handle(TopTools_HSequenceOfShape) sl,slv,sle,slw,slf,sls,slo; Handle(TopTools_HSequenceOfShape) sl,slv,sle,slw,slf,sls,slo;
sl = new TopTools_HSequenceOfShape(); sl = new TopTools_HSequenceOfShape();
theMap.Clear(); theMap.Clear();
GetProblemShapes(theAna, theShape, sl, NbProblems); GetProblemShapes(theAna, theShape, sl, NbProblems);
theMap.Clear(); theMap.Clear();
if(NbProblems->Value(1)>0) Standard_Integer aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidPointOnCurve);
theCommands<<" Invalid Point on Curve ................... "<<NbProblems->Value(1)<<"\n"; if(NbProblems->Value(aProblemID) > 0)
//cout<<" Invalid Point on Curve ................... "<<NbProblems->Value(1)<<endl; theCommands<<" Invalid Point on Curve ................... "<<NbProblems->Value(aProblemID)<<"\n";
if(NbProblems->Value(2)>0)
theCommands<<" Invalid Point on CurveOnSurface .......... "<<NbProblems->Value(2)<<"\n"; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidPointOnCurveOnSurface);
//cout<<" Invalid Point on CurveOnSurface .......... "<<NbProblems->Value(2)<<endl; if(NbProblems->Value(aProblemID)>0)
if(NbProblems->Value(3)>0) theCommands<<" Invalid Point on CurveOnSurface .......... "<<NbProblems->Value(aProblemID)<<"\n";
theCommands<<" Invalid Point on Surface ................. "<<NbProblems->Value(3)<<"\n";
//cout<<" Invalid Point on Surface ................. "<<NbProblems->Value(3)<<endl; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidPointOnSurface);
if(NbProblems->Value(4)>0) if(NbProblems->Value(aProblemID)>0)
theCommands<<" No 3D Curve .............................. "<<NbProblems->Value(4)<<"\n"; theCommands<<" Invalid Point on Surface ................. "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" No 3D Curve .............................. "<<NbProblems->Value(4)<<endl;
if(NbProblems->Value(5)>0) aProblemID = static_cast<Standard_Integer>(BRepCheck_No3DCurve);
theCommands<<" Multiple 3D Curve ........................ "<<NbProblems->Value(5)<<"\n"; if(NbProblems->Value(aProblemID)>0)
//cout<<" Multiple 3D Curve ........................ "<<NbProblems->Value(5)<<endl; theCommands<<" No 3D Curve .............................. "<<NbProblems->Value(aProblemID)<<"\n";
if(NbProblems->Value(6)>0)
theCommands<<" Invalid 3D Curve ......................... "<<NbProblems->Value(6)<<"\n"; aProblemID = static_cast<Standard_Integer>(BRepCheck_Multiple3DCurve);
//cout<<" Invalid 3D Curve ......................... "<<NbProblems->Value(6)<<endl; if(NbProblems->Value(aProblemID)>0)
if(NbProblems->Value(7)>0) theCommands<<" Multiple 3D Curve ........................ "<<NbProblems->Value(aProblemID)<<"\n";
theCommands<<" No Curve on Surface ...................... "<<NbProblems->Value(7)<<"\n";
//cout<<" No Curve on Surface ...................... "<<NbProblems->Value(7)<<endl; aProblemID = static_cast<Standard_Integer>(BRepCheck_Invalid3DCurve);
if(NbProblems->Value(8)>0) if(NbProblems->Value(aProblemID)>0)
theCommands<<" Invalid Curve on Surface ................. "<<NbProblems->Value(8)<<"\n"; theCommands<<" Invalid 3D Curve ......................... "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" Invalid Curve on Surface ................. "<<NbProblems->Value(8)<<endl;
if(NbProblems->Value(9)>0) aProblemID = static_cast<Standard_Integer>(BRepCheck_NoCurveOnSurface);
theCommands<<" Invalid Curve on closed Surface .......... "<<NbProblems->Value(9)<<"\n"; if(NbProblems->Value(aProblemID)>0)
//cout<<" Invalid Curve on closed Surface .......... "<<NbProblems->Value(9)<<endl; theCommands<<" No Curve on Surface ...................... "<<NbProblems->Value(aProblemID)<<"\n";
if(NbProblems->Value(10)>0)
theCommands<<" Invalid SameRange Flag ................... "<<NbProblems->Value(10)<<"\n"; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidCurveOnSurface);
//cout<<" Invalid SameRange Flag ................... "<<NbProblems->Value(10)<<endl; if(NbProblems->Value(aProblemID)>0)
if(NbProblems->Value(11)>0) theCommands<<" Invalid Curve on Surface ................. "<<NbProblems->Value(aProblemID)<<"\n";
theCommands<<" Invalid SameParameter Flag ............... "<<NbProblems->Value(11)<<"\n";
//cout<<" Invalid SameParameter Flag ............... "<<NbProblems->Value(11)<<endl; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidCurveOnClosedSurface);
if(NbProblems->Value(12)>0) if(NbProblems->Value(aProblemID)>0)
theCommands<<" Invalid Degenerated Flag ................. "<<NbProblems->Value(12)<<"\n"; theCommands<<" Invalid Curve on closed Surface .......... "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" Invalid Degenerated Flag ................. "<<NbProblems->Value(12)<<endl;
if(NbProblems->Value(13)>0) aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidSameRangeFlag);
theCommands<<" Free Edge ................................ "<<NbProblems->Value(13)<<"\n"; if(NbProblems->Value(aProblemID)>0)
//cout<<" Free Edge ................................ "<<NbProblems->Value(13)<<endl; theCommands<<" Invalid SameRange Flag ................... "<<NbProblems->Value(aProblemID)<<"\n";
if(NbProblems->Value(14)>0)
theCommands<<" Invalid MultiConnexity ................... "<<NbProblems->Value(14)<<"\n"; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidSameParameterFlag);
//cout<<" Invalid MultiConnexity ................... "<<NbProblems->Value(14)<<endl; if(NbProblems->Value(aProblemID)>0)
if(NbProblems->Value(15)>0) theCommands<<" Invalid SameParameter Flag ............... "<<NbProblems->Value(aProblemID)<<"\n";
theCommands<<" Invalid Range ............................ "<<NbProblems->Value(15)<<"\n";
//cout<<" Invalid Range ............................ "<<NbProblems->Value(15)<<endl; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidDegeneratedFlag);
if(NbProblems->Value(16)>0) if(NbProblems->Value(aProblemID)>0)
theCommands<<" Empty Wire ............................... "<<NbProblems->Value(16)<<"\n"; theCommands<<" Invalid Degenerated Flag ................. "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" Empty Wire ............................... "<<NbProblems->Value(16)<<endl;
if(NbProblems->Value(17)>0) aProblemID = static_cast<Standard_Integer>(BRepCheck_FreeEdge);
theCommands<<" Redundant Edge ........................... "<<NbProblems->Value(17)<<"\n"; if(NbProblems->Value(aProblemID)>0)
//cout<<" Redundant Edge ........................... "<<NbProblems->Value(17)<<endl; theCommands<<" Free Edge ................................ "<<NbProblems->Value(aProblemID)<<"\n";
if(NbProblems->Value(18)>0)
theCommands<<" Self Intersecting Wire ................... "<<NbProblems->Value(18)<<"\n"; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidMultiConnexity);
//cout<<" Self Intersecting Wire ................... "<<NbProblems->Value(18)<<endl; if(NbProblems->Value(aProblemID)>0)
if(NbProblems->Value(19)>0) theCommands<<" Invalid MultiConnexity ................... "<<NbProblems->Value(aProblemID)<<"\n";
theCommands<<" No Surface ............................... "<<NbProblems->Value(19)<<"\n";
//cout<<" No Surface ............................... "<<NbProblems->Value(19)<<endl; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidRange);
if(NbProblems->Value(20)>0) if(NbProblems->Value(aProblemID)>0)
theCommands<<" Invalid Wire ............................. "<<NbProblems->Value(20)<<"\n"; theCommands<<" Invalid Range ............................ "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" Invalid Wire ............................. "<<NbProblems->Value(20)<<endl;
if(NbProblems->Value(21)>0) aProblemID = static_cast<Standard_Integer>(BRepCheck_EmptyWire);
theCommands<<" Redundant Wire ........................... "<<NbProblems->Value(21)<<"\n"; if(NbProblems->Value(aProblemID)>0)
//cout<<" Redundant Wire ........................... "<<NbProblems->Value(21)<<endl; theCommands<<" Empty Wire ............................... "<<NbProblems->Value(aProblemID)<<"\n";
if(NbProblems->Value(22)>0)
theCommands<<" Intersecting Wires ....................... "<<NbProblems->Value(22)<<"\n"; aProblemID = static_cast<Standard_Integer>(BRepCheck_RedundantEdge);
//cout<<" Intersecting Wires ....................... "<<NbProblems->Value(22)<<endl; if(NbProblems->Value(aProblemID)>0)
if(NbProblems->Value(23)>0) theCommands<<" Redundant Edge ........................... "<<NbProblems->Value(aProblemID)<<"\n";
theCommands<<" Invalid Imbrication of Wires ............. "<<NbProblems->Value(23)<<"\n";
//cout<<" Invalid Imbrication of Wires ............. "<<NbProblems->Value(23)<<endl; aProblemID = static_cast<Standard_Integer>(BRepCheck_SelfIntersectingWire);
if(NbProblems->Value(24)>0) if(NbProblems->Value(aProblemID)>0)
theCommands<<" Empty Shell .............................. "<<NbProblems->Value(24)<<"\n"; theCommands<<" Self Intersecting Wire ................... "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" Empty Shell .............................. "<<NbProblems->Value(24)<<endl;
if(NbProblems->Value(25)>0) aProblemID = static_cast<Standard_Integer>(BRepCheck_NoSurface);
theCommands<<" Redundant Face ........................... "<<NbProblems->Value(25)<<"\n"; if(NbProblems->Value(aProblemID)>0)
//cout<<" Redundant Face ........................... "<<NbProblems->Value(25)<<endl; theCommands<<" No Surface ............................... "<<NbProblems->Value(aProblemID)<<"\n";
if(NbProblems->Value(26)>0)
theCommands<<" Unorientable Shape ....................... "<<NbProblems->Value(26)<<"\n"; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidWire);
//cout<<" Unorientable Shape ....................... "<<NbProblems->Value(26)<<endl; if(NbProblems->Value(aProblemID)>0)
if(NbProblems->Value(27)>0) theCommands<<" Invalid Wire ............................. "<<NbProblems->Value(aProblemID)<<"\n";
theCommands<<" Not Closed ............................... "<<NbProblems->Value(27)<<"\n";
//cout<<" Not Closed ............................... "<<NbProblems->Value(27)<<endl; aProblemID = static_cast<Standard_Integer>(BRepCheck_RedundantWire);
if(NbProblems->Value(28)>0) if(NbProblems->Value(aProblemID)>0)
theCommands<<" Not Connected ............................ "<<NbProblems->Value(28)<<"\n"; theCommands<<" Redundant Wire ........................... "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" Not Connected ............................ "<<NbProblems->Value(28)<<endl;
if(NbProblems->Value(29)>0) aProblemID = static_cast<Standard_Integer>(BRepCheck_IntersectingWires);
theCommands<<" Subshape not in Shape .................... "<<NbProblems->Value(29)<<"\n"; if(NbProblems->Value(aProblemID)>0)
//cout<<" Subshape not in Shape .................... "<<NbProblems->Value(29)<<endl; theCommands<<" Intersecting Wires ....................... "<<NbProblems->Value(aProblemID)<<"\n";
if(NbProblems->Value(30)>0)
theCommands<<" Bad Orientation .......................... "<<NbProblems->Value(30)<<"\n"; aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidImbricationOfWires);
//cout<<" Bad Orientation .......................... "<<NbProblems->Value(30)<<endl; if(NbProblems->Value(aProblemID)>0)
if(NbProblems->Value(31)>0) theCommands<<" Invalid Imbrication of Wires ............. "<<NbProblems->Value(aProblemID)<<"\n";
theCommands<<" Bad Orientation of Subshape .............. "<<NbProblems->Value(31)<<"\n";
//cout<<" Bad Orientation of Subshape .............. "<<NbProblems->Value(31)<<endl; aProblemID = static_cast<Standard_Integer>(BRepCheck_EmptyShell);
if(NbProblems->Value(32)>0) if(NbProblems->Value(aProblemID)>0)
theCommands<<" checkshape failure......... .............. "<<NbProblems->Value(32)<<"\n"; theCommands<<" Empty Shell .............................. "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" checkshape failure......... .............. "<<NbProblems->Value(32)<<endl;
aProblemID = static_cast<Standard_Integer>(BRepCheck_RedundantFace);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Redundant Face ........................... "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_UnorientableShape);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Unorientable Shape ....................... "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_NotClosed);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Not Closed ............................... "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_NotConnected);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Not Connected ............................ "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_SubshapeNotInShape);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Subshape not in Shape .................... "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_BadOrientation);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Bad Orientation .......................... "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_BadOrientationOfSubshape);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Bad Orientation of Subshape .............. "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidToleranceValue);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Invalid tolerance value................... "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_InvalidPolygonOnTriangulation);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" Invalid polygon on triangulation.......... "<<NbProblems->Value(aProblemID)<<"\n";
aProblemID = static_cast<Standard_Integer>(BRepCheck_CheckFail);
if(NbProblems->Value(aProblemID)>0)
theCommands<<" checkshape failure........................ "<<NbProblems->Value(aProblemID)<<"\n";
//cout<<" ------------------------------------------------"<<endl;
//cout<<"*** Shapes with problems : "<<sl->Length()<<endl;
//cout<<endl;
theCommands<<" ------------------------------------------------"<<"\n"; theCommands<<" ------------------------------------------------"<<"\n";
theCommands<<"*** Shapes with problems : "<<sl->Length()<<"\n"; theCommands<<"*** Shapes with problems : "<<sl->Length()<<"\n";

View File

@ -4,6 +4,9 @@
restore [locate_data_file CTO904_cts20176a.rle] a restore [locate_data_file CTO904_cts20176a.rle] a
restore [locate_data_file cts20176b.rle] b restore [locate_data_file cts20176b.rle] b
#Delete invalid (in terms of bug#25109) triangulation
tclean a
bfuse result a b bfuse result a b
set square 70265.2 set square 70265.2

View File

@ -2,6 +2,10 @@ puts "TODO DEBUG_OCC24121 Debian60-64: Process killed by CPU limit"
puts "TODO DEBUG_OCC24121 Debian60-64: TEST INCOMPLETE" puts "TODO DEBUG_OCC24121 Debian60-64: TEST INCOMPLETE"
restore [locate_data_file OCC62.brep] sh restore [locate_data_file OCC62.brep] sh
#Delete invalid (in terms of bug#25109) triangulation
tclean sh
explode sh explode sh
bop sh_1 sh_3 bop sh_1 sh_3

View File

@ -4,12 +4,8 @@ if {[array get env os_type] != ""} {
set os $env(os_type) set os $env(os_type)
} }
if {[string compare $os "MacOS"] == 0} { if {[string compare $os "MacOS"] != 0} {
#puts "TODO #23828 MacOS: Tcl Exception: sh is not a topological shape!!!" puts "TODO OCC25286 ALL: Error : The square of result shape is"
#puts "TODO #23828 MacOS: TEST INCOMPLETE"
} else {
#puts "TODO OCC12345 ALL: Faulty shapes in variables faulty_1 to faulty_"
puts "TODO ?OCC12345 ALL: Error : The square of result shape is"
} }
puts "================" puts "================"
@ -20,6 +16,9 @@ puts "================"
cpulimit 1400 cpulimit 1400
restore [locate_data_file OCC62.brep] sh restore [locate_data_file OCC62.brep] sh
#Delete invalid (in terms of bug#25109) triangulation
tclean sh
explode sh explode sh
checkshape sh checkshape sh

View File

@ -0,0 +1,19 @@
puts "============"
puts "CR25109"
puts "============"
puts ""
##########################################################################################################
# Check PolygonOnTriangulation contained in edges
##########################################################################################################
restore [locate_data_file bug25109_e1.brep] b
decho off
set info [checkshape b]
decho on
if { [regexp "This shape seems to be valid" ${info}] == 1 } {
puts "Error: checkshape is incorrect"
} else {
puts "OK: checkshape is correct"
}

View File

@ -1,9 +1,11 @@
puts "============ OCC288 (case 5) ===============" puts "============ OCC288 (case 5) ==============="
restore [locate_data_file OCC288e.brep] result restore [locate_data_file OCC288e.brep] result
#Delete invalid (in terms of bug#25109) triangulation
tclean result
checkshape result checkshape result
tclean result
vinit vinit
vdisplay result vdisplay result
vsetdispmode result 1 vsetdispmode result 1

View File

@ -1,2 +1,4 @@
restore [locate_data_file CTO904_cts20176a.rle] a restore [locate_data_file CTO904_cts20176a.rle] a
#Delete invalid (in terms of bug#25109) triangulation
tclean a

View File

@ -1 +1,4 @@
restore [locate_data_file CTO904_cts20176a.rle] a restore [locate_data_file CTO904_cts20176a.rle] a
#Delete invalid (in terms of bug#25109) triangulation
tclean a