1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

Compare commits

...

6 Commits

Author SHA1 Message Date
abk
a3b6406c88 Work of draw function nexplode for degenerated edges was restored in case
of exploding by edges.
2013-01-11 15:44:04 +04:00
abk
ac3797065c Method BRepGProp::LinearProperties was changed to avoid degenerated edges. 2012-12-28 19:53:42 +04:00
abk
2714f5dd39 Method BRepBuilderAPI_MakeShape::EnsureToleranceRule was made slightly
simpler.

Tolerance post Build (Perform) fix was made for:
- BRepAlgoAPI_BooleanOperation,
- BRepFeat_MakePrism,
- BRepOffsetAPI_MakePipeShell.

Draw command getsourcefile now returns result for:
- buildsweep,
- simulsweep,
- geompipe.
2012-12-28 19:52:02 +04:00
abk
d270c8d398 Application of EnsureToleranceRule to ShapeFix_Shape was fixed. 2012-12-26 20:21:16 +04:00
abk
6121dafd1f Static public method EnsureToleranceRule(const TopoDS_Shape & theS) was
created in class BRepBuilderAPI_MakeShape to fix all tolerances of the
shape and it's subshapes by the tolerance rule:
vertex tolerance >= edge tolerance >= face tolerance.
Edge or vertex tolerance which does not satisfy the tolerance rule will be
increased.
Draw command EnsureTolRule was created to test new functional.
Tolerance post Build (Perform) fix was made for:
- BRepBuilderAPI_Sewing,
- BRepFilletAPI_MakeChamfer,
- BRepFilletAPI_MakeFillet,
- BRepOffsetAPI_MakePipe,
- BRepOffsetAPI_NormalProjection,
- ShapeFix_Shape,
- ShapeUpgrade_ShapeDivide.
2012-12-25 14:22:53 +04:00
abv
c201bec884 0023610: checkshape command does not detect mismatch of the tolerance values among the sub-shapes of the shape
In BRepCheck, added check for tolerance of face to be not greater than tolerance of edge, and tolerance of edge not greater than tolerance of its vertices
2012-12-25 14:21:30 +04:00
22 changed files with 309 additions and 359 deletions

View File

@@ -325,6 +325,7 @@ const TopTools_ListOfShape& BRepAlgoAPI_BooleanOperation::Modified(const TopoDS_
myErrorStatus=0;
myBuilderCanWork=Standard_True;
myShape=myBuilder->Result();
EnsureToleranceRule(myShape);
Done();
}
else {
@@ -400,6 +401,7 @@ const TopTools_ListOfShape& BRepAlgoAPI_BooleanOperation::Modified(const TopoDS_
myErrorStatus=0;
myBuilderCanWork=Standard_True;
myShape=myBuilder->Result();
EnsureToleranceRule(myShape);
Done();
}
else {

View File

@@ -92,6 +92,11 @@ is
is virtual;
---Purpose: Returns true if the shape S has been deleted.
EnsureToleranceRule (myclass; theS : Shape from TopoDS);
---Purpose: Fixes all tolerances of shape theS and it's subshapes by the tolerance
-- rule: vertex tolerance >= edge tolerance >= face tolerance.
-- Edge or vertex tolerance which does not satisfy the tolerance rule will
-- be increased.
fields

View File

@@ -21,6 +21,10 @@
#include <BRepBuilderAPI_MakeShape.ixx>
#include <BRep_TEdge.hxx>
#include <BRep_TFace.hxx>
#include <BRep_TVertex.hxx>
#include <TopExp_Explorer.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Face.hxx>
@@ -116,4 +120,63 @@ Standard_Boolean BRepBuilderAPI_MakeShape::IsDeleted (const TopoDS_Shape& S)
//=======================================================================
//function : EnsureToleranceRule
//purpose :
//=======================================================================
void BRepBuilderAPI_MakeShape::EnsureToleranceRule(const TopoDS_Shape & theS)
{
if (theS.IsNull())
{
return;
}
//
for (TopExp_Explorer aFE(theS, TopAbs_FACE); aFE.More(); aFE.Next())
{
TopoDS_Face aF = TopoDS::Face(aFE.Current());
Standard_Real aFT = ((Handle_BRep_TFace &)aF.TShape())->Tolerance();
//
for (TopExp_Explorer anEE(aF, TopAbs_EDGE); anEE.More(); anEE.Next())
{
TopoDS_Edge anES = TopoDS::Edge(anEE.Current());
Handle_BRep_TEdge & anEG = (Handle_BRep_TEdge &)anES.TShape();
Standard_Real anET = anEG->Tolerance();
if (anET < aFT)
{
anET = aFT;
anEG->Tolerance(anET);
}
for (TopExp_Explorer aVE(anES, TopAbs_VERTEX); aVE.More(); aVE.Next())
{
TopoDS_Vertex aVS = TopoDS::Vertex(aVE.Current());
Handle_BRep_TVertex & aVG = (Handle_BRep_TVertex &)aVS.TShape();
aVG->UpdateTolerance(anET);
}
}
//
for (TopExp_Explorer aVE(aF, TopAbs_VERTEX, TopAbs_EDGE);
aVE.More(); aVE.Next())
{
TopoDS_Vertex aVS = TopoDS::Vertex(aVE.Current());
Handle_BRep_TVertex & aVG = (Handle_BRep_TVertex &)aVS.TShape();
aVG->UpdateTolerance(aFT);
}
}
//
for (TopExp_Explorer anEE(theS, TopAbs_EDGE, TopAbs_FACE);
anEE.More(); anEE.Next())
{
TopoDS_Edge anES = TopoDS::Edge(anEE.Current());
Handle_BRep_TEdge & anEG = (Handle_BRep_TEdge &)anES.TShape();
Standard_Real anET = anEG->Tolerance();
for (TopExp_Explorer aVE(anES, TopAbs_VERTEX); aVE.More(); aVE.Next())
{
TopoDS_Vertex aVS = TopoDS::Vertex(aVE.Current());
Handle_BRep_TVertex & aVG = (Handle_BRep_TVertex &)aVS.TShape();
aVG->UpdateTolerance(anET);
}
}
}

View File

@@ -127,6 +127,7 @@
#include <BRepBuilderAPI_VertexInspector.hxx>
#include <BRepBuilderAPI_CellFilter.hxx>
#include <BRepBuilderAPI_BndBoxTreeSelector.hxx>
#include <BRepBuilderAPI_MakeShape.hxx>
#include <NCollection_UBTreeFiller.hxx>
static void SortBox (const Handle(Bnd_HArray1OfBox) hSetBoxes,
@@ -1909,6 +1910,7 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
mySewedShape.Nullify();
return;
}
BRepBuilderAPI_MakeShape::EnsureToleranceRule(mySewedShape);
}
#if DEB
chr_total.Stop();

View File

@@ -80,110 +80,44 @@ Standard_Boolean BRepCheck::SelfIntersection(const TopoDS_Wire& W,
void BRepCheck::Print(const BRepCheck_Status stat,
Standard_OStream& OS)
{
#define PRINT_CASE(stat) case stat: OS << #stat "\n"; break
switch (stat) {
case BRepCheck_NoError:
OS << "BRepCheck_NoError\n";
break;
case BRepCheck_InvalidPointOnCurve:
OS << "BRepCheck_InvalidPointOnCurve\n";
break;
case BRepCheck_InvalidPointOnCurveOnSurface:
OS << "BRepCheck_InvalidPointOnCurveOnSurface\n";
break;
case BRepCheck_InvalidPointOnSurface:
OS << "BRepCheck_InvalidPointOnSurface\n";
break;
case BRepCheck_No3DCurve:
OS << "BRepCheck_No3DCurve\n";
break;
case BRepCheck_Multiple3DCurve:
OS << "BRepCheck_Multiple3DCurve\n";
break;
case BRepCheck_Invalid3DCurve:
OS << "BRepCheck_Invalid3DCurve\n";
break;
case BRepCheck_NoCurveOnSurface:
OS << "BRepCheck_NoCurveOnSurface\n";
break;
case BRepCheck_InvalidCurveOnSurface:
OS << "BRepCheck_InvalidCurveOnSurface\n";
break;
case BRepCheck_InvalidCurveOnClosedSurface:
OS << "BRepCheck_InvalidCurveOnClosedSurface\n";
break;
case BRepCheck_InvalidSameRangeFlag:
OS << "BRepCheck_InvalidSameRangeFlag\n";
break;
case BRepCheck_InvalidSameParameterFlag:
OS << "BRepCheck_InvalidSameParameterFlag\n";
break;
case BRepCheck_InvalidDegeneratedFlag:
OS << "BRepCheck_InvalidDegeneratedFlag\n";
break;
case BRepCheck_FreeEdge:
OS << "BRepCheck_FreeEdge\n";
break;
case BRepCheck_InvalidMultiConnexity:
OS << "BRepCheck_InvalidMultiConnexity\n";
break;
case BRepCheck_InvalidRange:
OS << "BRepCheck_InvalidRange\n";
break;
case BRepCheck_EmptyWire:
OS << "BRepCheck_EmptyWire\n";
break;
case BRepCheck_RedundantEdge:
OS << "BRepCheck_RedundantEdge\n";
break;
case BRepCheck_SelfIntersectingWire:
OS << "BRepCheck_SelfIntersectingWire\n";
break;
case BRepCheck_NoSurface:
OS << "BRepCheck_NoSurface\n";
break;
case BRepCheck_InvalidWire:
OS << "BRepCheck_InvalidWire\n";
break;
case BRepCheck_RedundantWire:
OS << "BRepCheck_RedundantWire\n";
break;
case BRepCheck_IntersectingWires:
OS << "BRepCheck_IntersectingWires\n";
break;
case BRepCheck_InvalidImbricationOfWires:
OS << "BRepCheck_InvalidImbricationOfWires\n";
break;
case BRepCheck_EmptyShell:
OS << "BRepCheck_EmptyShell\n";
break;
case BRepCheck_RedundantFace:
OS << "BRepCheck_RedundantFace\n";
break;
case BRepCheck_UnorientableShape:
OS << "BRepCheck_UnorientableShape\n";
break;
case BRepCheck_NotClosed:
OS << "BRepCheck_NotClosed\n";
break;
case BRepCheck_NotConnected:
OS << "BRepCheck_NotConnected\n";
break;
case BRepCheck_SubshapeNotInShape:
OS << "BRepCheck_SubshapeNotInShape\n";
break;
case BRepCheck_BadOrientation:
OS << "BRepCheck_BadOrientation\n";
break;
case BRepCheck_BadOrientationOfSubshape:
OS << "BRepCheck_BadOrientationOfSubshape\n";
break;
case BRepCheck_CheckFail:
OS << "BRepCheck_CheckFail\n";
break;
PRINT_CASE(BRepCheck_NoError);
PRINT_CASE(BRepCheck_InvalidPointOnCurve);
PRINT_CASE(BRepCheck_InvalidPointOnCurveOnSurface);
PRINT_CASE(BRepCheck_InvalidPointOnSurface);
PRINT_CASE(BRepCheck_No3DCurve);
PRINT_CASE(BRepCheck_Multiple3DCurve);
PRINT_CASE(BRepCheck_Invalid3DCurve);
PRINT_CASE(BRepCheck_NoCurveOnSurface);
PRINT_CASE(BRepCheck_InvalidCurveOnSurface);
PRINT_CASE(BRepCheck_InvalidCurveOnClosedSurface);
PRINT_CASE(BRepCheck_InvalidSameRangeFlag);
PRINT_CASE(BRepCheck_InvalidSameParameterFlag);
PRINT_CASE(BRepCheck_InvalidDegeneratedFlag);
PRINT_CASE(BRepCheck_FreeEdge);
PRINT_CASE(BRepCheck_InvalidMultiConnexity);
PRINT_CASE(BRepCheck_InvalidRange);
PRINT_CASE(BRepCheck_EmptyWire);
PRINT_CASE(BRepCheck_RedundantEdge);
PRINT_CASE(BRepCheck_SelfIntersectingWire);
PRINT_CASE(BRepCheck_NoSurface);
PRINT_CASE(BRepCheck_InvalidWire);
PRINT_CASE(BRepCheck_RedundantWire);
PRINT_CASE(BRepCheck_IntersectingWires);
PRINT_CASE(BRepCheck_InvalidImbricationOfWires);
PRINT_CASE(BRepCheck_EmptyShell);
PRINT_CASE(BRepCheck_RedundantFace);
PRINT_CASE(BRepCheck_UnorientableShape);
PRINT_CASE(BRepCheck_NotClosed);
PRINT_CASE(BRepCheck_NotConnected);
PRINT_CASE(BRepCheck_SubshapeNotInShape);
PRINT_CASE(BRepCheck_BadOrientation);
PRINT_CASE(BRepCheck_BadOrientationOfSubshape);
PRINT_CASE(BRepCheck_InvalidToleranceValue);
PRINT_CASE(BRepCheck_CheckFail);
default:
break;
}
}

View File

@@ -63,8 +63,6 @@
#include <TopoDS_Face.hxx>
#include <Precision.hxx>
//modified by NIZNHY-PKV Thu May 05 09:01:57 2011f
static
Standard_Boolean Validate(const Adaptor3d_Curve&,
const Adaptor3d_CurveOnSurface&,
@@ -83,12 +81,6 @@ static
static
Standard_Real PrecSurface(const Adaptor3d_CurveOnSurface& aACS);
//static Standard_Boolean Validate(const Adaptor3d_Curve&,
// const Adaptor3d_Curve&,
// const Standard_Real,
// const Standard_Boolean);
//modified by NIZNHY-PKV Thu May 05 09:02:01 2011t
#define NCONTROL 23
//=======================================================================
@@ -230,7 +222,6 @@ void BRepCheck_Edge::InContext(const TopoDS_Shape& S)
Standard_Real Tol = BRep_Tool::Tolerance(TopoDS::Edge(myShape));
TopAbs_ShapeEnum styp = S.ShapeType();
// for (TopExp_Explorer exp(S,TopAbs_EDGE); exp.More(); exp.Next()) {
TopExp_Explorer exp(S,TopAbs_EDGE) ;
for ( ; exp.More(); exp.Next()) {
if (exp.Current().IsSame(myShape)) {
@@ -244,6 +235,9 @@ void BRepCheck_Edge::InContext(const TopoDS_Shape& S)
switch (styp) {
case TopAbs_FACE:
if(BRep_Tool::Tolerance(TopoDS::Face(S)) - Tol > Precision::Confusion())
BRepCheck::Add(lst,BRepCheck_InvalidToleranceValue);
if (!myCref.IsNull()) {
Standard_Boolean SameParameter = TE->SameParameter();

View File

@@ -22,6 +22,7 @@
#include <BRepCheck_Vertex.ixx>
#include <BRepCheck.hxx>
#include <BRepCheck_ListOfStatus.hxx>
#include <BRep_TVertex.hxx>
@@ -46,9 +47,9 @@
#include <TopExp_Explorer.hxx>
#include <TopoDS_Iterator.hxx>
#include <BRepCheck.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Edge.hxx>
#include <Precision.hxx>
//=======================================================================
//function : BRepCheck_Vertex
@@ -115,7 +116,6 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
case TopAbs_EDGE:
{
// Try to find the vertex on the edge
const TopoDS_Edge& E = TopoDS::Edge(S);
TopoDS_Iterator itv(E.Oriented(TopAbs_FORWARD));
TopoDS_Vertex VFind;
@@ -149,9 +149,15 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
// VFind is not null for sure
TopAbs_Orientation orv = VFind.Orientation();
Standard_Real Tol = BRep_Tool::Tolerance(TopoDS::Vertex(myShape));
Tol = Max(Tol,BRep_Tool::Tolerance(E)); // to check
Tol *= Tol;
Standard_Real TolV = TV->Tolerance();
Standard_Real TolE = BRep_Tool::Tolerance(E);
if (TolE > TolV)
{
if (TolE - TolV > Precision::Confusion())
BRepCheck::Add(myMap(S),BRepCheck_InvalidToleranceValue);
TolV = TolE;
}
Standard_Real aTol2 = TolV * TolV;
Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*)&E.TShape());
BRep_ListIteratorOfListOfCurveRepresentation itcr(TE->Curves());
@@ -173,7 +179,7 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
if (pr->IsPointOnCurve(C,L)) {
Controlp = C->Value(pr->Parameter());
Controlp.Transform(L.Transformation());
if (prep.SquareDistance(Controlp)> Tol) {
if (prep.SquareDistance(Controlp) > aTol2) {
BRepCheck::Add(myMap(S),BRepCheck_InvalidPointOnCurve);
}
}
@@ -184,14 +190,14 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
if (orv == TopAbs_FORWARD || multiple) {
Controlp = C->Value(GC->First());
Controlp.Transform(L.Transformation());
if (prep.SquareDistance(Controlp)> Tol) {
if (prep.SquareDistance(Controlp) > aTol2) {
BRepCheck::Add(myMap(S),BRepCheck_InvalidPointOnCurve);
}
}
if (orv == TopAbs_REVERSED || multiple) {
Controlp = C->Value(GC->Last());
Controlp.Transform(L.Transformation());
if (prep.SquareDistance(Controlp)> Tol) {
if (prep.SquareDistance(Controlp) > aTol2) {
BRepCheck::Add(myMap(S),BRepCheck_InvalidPointOnCurve);
}
}
@@ -212,18 +218,16 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
gp_Pnt2d p2d = PC->Value(pr->Parameter());
Controlp = Su->Value(p2d.X(),p2d.Y());
Controlp.Transform(L.Transformation());
if (prep.SquareDistance(Controlp)> Tol) {
BRepCheck::Add(myMap(S),
BRepCheck_InvalidPointOnCurveOnSurface);
if (prep.SquareDistance(Controlp) > aTol2) {
BRepCheck::Add(myMap(S), BRepCheck_InvalidPointOnCurveOnSurface);
}
}
if (!PC2.IsNull() && pr->IsPointOnCurveOnSurface(PC2,Su,L)) {
gp_Pnt2d p2d = PC2->Value(pr->Parameter());
Controlp = Su->Value(p2d.X(),p2d.Y());
Controlp.Transform(L.Transformation());
if (prep.SquareDistance(Controlp)> Tol) {
BRepCheck::Add(myMap(S),
BRepCheck_InvalidPointOnCurveOnSurface);
if (prep.SquareDistance(Controlp) > aTol2) {
BRepCheck::Add(myMap(S), BRepCheck_InvalidPointOnCurveOnSurface);
}
}
itpr.Next();
@@ -247,9 +251,15 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
const Handle(Geom_Surface)& Su = TF->Surface();
TopLoc_Location L = (Floc * TFloc).Predivided(myShape.Location());
Standard_Real Tol = BRep_Tool::Tolerance(TopoDS::Vertex(myShape));
Tol = Max(Tol,BRep_Tool::Tolerance(TopoDS::Face(S))); // to check
Tol *= Tol;
Standard_Real TolV = TV->Tolerance();
Standard_Real TolF = TF->Tolerance();
if (TolF > TolV)
{
if (TolF - TolV > Precision::Confusion())
BRepCheck::Add(myMap(S),BRepCheck_InvalidToleranceValue);
TolV = TolF;
}
Standard_Real aTol2 = TolV * TolV;
BRep_ListIteratorOfListOfPointRepresentation itpr(TV->Points());
while (itpr.More()) {
@@ -257,7 +267,7 @@ void BRepCheck_Vertex::InContext(const TopoDS_Shape& S)
if (pr->IsPointOnSurface(Su,L)) {
Controlp = Su->Value(pr->Parameter(),pr->Parameter2());
Controlp.Transform(L.Transformation());
if (prep.SquareDistance(Controlp)> Tol) {
if (prep.SquareDistance(Controlp) > aTol2) {
BRepCheck::Add(myMap(S),BRepCheck_InvalidPointOnSurface);
}
}

View File

@@ -463,6 +463,7 @@ void BRepFeat_MakePrism::Perform(const TopoDS_Shape& Until)
}
}
}
EnsureToleranceRule(myShape);
/* // loop of control of descendance
TopExp_Explorer expr(mySbase, TopAbs_FACE);

View File

@@ -391,6 +391,7 @@ void BRepFilletAPI_MakeChamfer::Build()
if (myBuilder.IsDone()){
Done();
myShape = myBuilder.Shape();
EnsureToleranceRule(myShape);
//creation of the Map.
TopExp_Explorer ex;

View File

@@ -532,6 +532,7 @@ void BRepFilletAPI_MakeFillet::Build()
if(myBuilder.IsDone()) {
Done();
myShape = myBuilder.Shape();
EnsureToleranceRule(myShape);
// creation of the Map.
TopExp_Explorer ex;

View File

@@ -32,6 +32,7 @@
#include <TopTools_ListOfShape.hxx>
#include <BRepCheck_Shell.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <BRep_TEdge.hxx>
#ifdef DEB
static Standard_Integer AffichEps = 0;
#endif
@@ -55,9 +56,15 @@ void BRepGProp::LinearProperties(const TopoDS_Shape& S, GProp_GProps& SProps){
// Standard_Integer n,i;
TopExp_Explorer ex;
for (ex.Init(S,TopAbs_EDGE); ex.More(); ex.Next()) {
BAC.Initialize(TopoDS::Edge(ex.Current()));
BRepGProp_Cinert CG(BAC,P);
SProps.Add(CG);
TopoDS_Edge anES = TopoDS::Edge(ex.Current());
Handle_BRep_TEdge & anEG = (Handle_BRep_TEdge &)anES.TShape();
BRep_TEdge dsd;
if (!anEG->Degenerated())
{
BAC.Initialize(anES);
BRepGProp_Cinert CG(BAC,P);
SProps.Add(CG);
}
}
}

View File

@@ -59,6 +59,7 @@ const BRepFill_Pipe& BRepOffsetAPI_MakePipe::Pipe() const
void BRepOffsetAPI_MakePipe::Build()
{
myShape = myPipe.Shape();
BRepBuilderAPI_MakeShape::EnsureToleranceRule(myShape);
Done();
}

View File

@@ -225,6 +225,7 @@ void BRepOffsetAPI_MakePipeShell::Delete( const TopoDS_Shape& Profile)
Ok = myPipe->Build();
if (Ok) {
myShape = myPipe->Shape();
EnsureToleranceRule(myShape);
Done();
}
else NotDone();

View File

@@ -64,6 +64,7 @@ BRepOffsetAPI_NormalProjection::BRepOffsetAPI_NormalProjection()
{
myNormalProjector.Build();
myShape = myNormalProjector.Projection();
BRepBuilderAPI_MakeShape::EnsureToleranceRule(myShape);
Done();
}

View File

@@ -800,6 +800,27 @@ static Standard_Integer scalexyz(Draw_Interpretor& di, Standard_Integer n, const
return 0;
}
static Standard_Integer EnsureTolRule(
Draw_Interpretor & theDI, Standard_Integer theC, const char ** theAs)
{
if (theC != 3)
{
return 1;
}
//
TopoDS_Shape aS = DBRep::Get(theAs[2]);
if (aS.IsNull())
{
return 1;
}
//
TopoDS_Shape aRes = BRepBuilderAPI_Copy(aS);
BRepBuilderAPI_MakeShape::EnsureToleranceRule(aRes);
//
DBRep::Set(theAs[1], aRes);
return 0;
}
void BRepTest::BasicCommands(Draw_Interpretor& theCommands)
{
static Standard_Boolean done = Standard_False;
@@ -931,4 +952,6 @@ void BRepTest::BasicCommands(Draw_Interpretor& theCommands)
"scalexyz res shape factor_x factor_y factor_z",
__FILE__,
scalexyz, g);
theCommands.Add("EnsureTolRule", "res shape", __FILE__, EnsureTolRule, g);
}

View File

@@ -76,6 +76,7 @@
#include <Standard_ErrorHandler.hxx>
#include <Standard_Failure.hxx>
#include <NCollection_Array1.hxx>
//#ifdef WNT
#include <stdio.h>
@@ -114,13 +115,13 @@ Standard_IMPORT Standard_Integer BRepCheck_Trace(const Standard_Integer phase);
//function : FindNamed
//=======================================================================
static Standard_Boolean FindNamed(const TopoDS_Shape& S,
char*& Name)
const char*& Name)
{
for (Standard_Integer i = 1 ;i <= lfaulty.Length(); i++) {
Handle(DBRep_DrawableShape) DS =
Handle(DBRep_DrawableShape)::DownCast(lfaulty(i));
if (DS->Shape().IsSame(S)) {
Name = (char*)DS->Name();
Name = DS->Name();
return Standard_True;
}
}
@@ -154,7 +155,6 @@ static void PrintSub(Standard_OStream& OS,
const TopAbs_ShapeEnum Subtype)
{
char* Name;
BRepCheck_ListIteratorOfListOfStatus itl;
TopExp_Explorer exp;
for (exp.Init(S,Subtype); exp.More(); exp.Next()) {
@@ -168,25 +168,27 @@ static void PrintSub(Standard_OStream& OS,
theMap(sub).Append(S);
itl.Initialize(res->StatusOnShape());
if (itl.Value() != BRepCheck_NoError) {
if (!FindNamed(sub,Name)) {
const char* pName;
if (!FindNamed(sub,pName)) {
nbfaulty++;
Name = (char*)malloc(18*sizeof(char));
sprintf(Name,"%s%d",checkfaultyname,nbfaulty);
DBRep::Set(Name,sub);
lfaulty.Append(Draw::Get((Standard_CString&)Name));
}
OS << "Shape " << Name << " ";
if (!FindNamed(S,Name)) {
nbfaulty++;
Name = (char*)malloc(18*sizeof(char));
sprintf(Name,"%s%d",checkfaultyname,nbfaulty);
DBRep::Set(Name,S);
lfaulty.Append(Draw::Get((Standard_CString&)Name));
}
OS << " on shape " << Name << " :\n";
for (;itl.More(); itl.Next()) {
BRepCheck::Print(itl.Value(),OS);
}
char aName[256];
sprintf(aName,"%.80s%d",checkfaultyname,nbfaulty);
DBRep::Set(aName,sub);
pName = aName;
lfaulty.Append(Draw::Get(pName));
OS << "Shape " << pName << " ";
if (!FindNamed(S,pName)) {
nbfaulty++;
sprintf(aName,"%.80s%d",checkfaultyname,nbfaulty);
DBRep::Set(aName,S);
pName = aName;
lfaulty.Append(Draw::Get(pName));
}
OS << " on shape " << pName << " :\n";
for (;itl.More(); itl.Next()) {
BRepCheck::Print(itl.Value(),OS);
}
}
}
break;
}
@@ -206,20 +208,21 @@ static void Print(Standard_OStream& OS,
Print(OS,Ana,iter.Value());
}
char* Name;
TopAbs_ShapeEnum styp = S.ShapeType();
BRepCheck_ListIteratorOfListOfStatus itl;
if (!Ana.Result(S).IsNull() && !theMap.IsBound(S)) {
itl.Initialize(Ana.Result(S)->Status());
if (itl.Value() != BRepCheck_NoError) {
if (!FindNamed(S,Name)) {
const char* pName;
char aName[256];
if (!FindNamed(S,pName)) {
nbfaulty++;
Name = (char*)malloc(18*sizeof(char));
sprintf(Name,"%s%d",checkfaultyname,nbfaulty);
DBRep::Set(Name,S);
lfaulty.Append(Draw::Get((Standard_CString&)Name));
sprintf(aName,"%.80s%d",checkfaultyname,nbfaulty);
DBRep::Set(aName,S);
pName = aName;
lfaulty.Append(Draw::Get(pName));
}
OS << "On Shape " << Name << " :\n";
OS << "On Shape " << pName << " :\n";
for (;itl.More(); itl.Next()) {
BRepCheck::Print(itl.Value(),OS);
@@ -466,99 +469,18 @@ void ContextualDump(Draw_Interpretor& theCommands,
nbfaulty = 0;
lfaulty.Clear();
//Print(cout, theAna, theShape);
Standard_SStream aSStream;
Print(aSStream, theAna, theShape);
theCommands << aSStream;
//cout<<"\n";
theCommands<<"\n";
theMap.Clear();
if (nbfaulty !=0)
theCommands<<"Faulty shapes in variables "<<checkfaultyname<<"1 to "<<checkfaultyname<<nbfaulty<<" \n";
//cout<<"Faulty shapes in variables "<<checkfaultyname<<"1 to "<<checkfaultyname<<nbfaulty<<" \n";
//cout<<endl;
theCommands<<"\n";
}
//=======================================================================
//function : FillProblems
// purpose : auxilary for StructuralDump
//=======================================================================
static void FillProblems(const BRepCheck_Status stat,
Handle(TColStd_HArray1OfInteger)& NbProblems)
{
switch (stat) {
case BRepCheck_InvalidPointOnCurve:
NbProblems->SetValue(1,NbProblems->Value(1)+1); break;
case BRepCheck_InvalidPointOnCurveOnSurface:
NbProblems->SetValue(2,NbProblems->Value(2)+1); break;
case BRepCheck_InvalidPointOnSurface:
NbProblems->SetValue(3,NbProblems->Value(3)+1); break;
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;
}
}
//=======================================================================
@@ -593,13 +515,13 @@ static void GetProblemSub(const BRepCheck_Analyzer& Ana,
if(ii>sl->Length()) {
sl->Append(sub);
FillProblems(itl.Value(),NbProblems);
NbProblems->ChangeValue(itl.Value())++;
}
for(ii=1; ii<=sl->Length(); ii++)
if(sl->Value(ii).IsSame(Shape)) break;
if(ii>sl->Length()) {
sl->Append(Shape);
FillProblems(itl.Value(),NbProblems);
NbProblems->ChangeValue(itl.Value())++;
}
}
break;
@@ -628,7 +550,7 @@ static void GetProblemShapes(const BRepCheck_Analyzer& Ana,
if (itl.Value() != BRepCheck_NoError) {
sl->Append(Shape);
FillProblems(itl.Value(),NbProblems);
NbProblems->ChangeValue(itl.Value())++;
}
}
if (!theMap.IsBound(Shape)) {
@@ -653,7 +575,6 @@ static void GetProblemShapes(const BRepCheck_Analyzer& Ana,
default:
break;
}
}
//=======================================================================
@@ -672,122 +593,60 @@ void StructuralDump(Draw_Interpretor& theCommands,
const TopoDS_Shape &theShape)
{
Standard_Integer i;
//cout << "StructuralDump" << endl;
//cout << " -- The Shape " << ShName << " has problems :"<<endl;
//cout<<" Check Count"<<endl;
//cout<<" ------------------------------------------------"<<endl;
theCommands << " -- The Shape " << ShName << " has problems :"<<"\n";
theCommands<<" Check Count"<<"\n";
theCommands<<" ------------------------------------------------"<<"\n";
Handle(TColStd_HArray1OfInteger) NbProblems = new TColStd_HArray1OfInteger(1,32);
for(i=1; i<=32; i++) NbProblems->SetValue(i,0);
Handle(TColStd_HArray1OfInteger) NbProblems = new TColStd_HArray1OfInteger(1,33);
for (i=1; i<=33; i++) NbProblems->SetValue (i,0);
Handle(TopTools_HSequenceOfShape) sl,slv,sle,slw,slf,sls,slo;
sl = new TopTools_HSequenceOfShape();
theMap.Clear();
GetProblemShapes(theAna, theShape, sl, NbProblems);
theMap.Clear();
if(NbProblems->Value(1)>0)
theCommands<<" Invalid Point on Curve ................... "<<NbProblems->Value(1)<<"\n";
//cout<<" Invalid Point on Curve ................... "<<NbProblems->Value(1)<<endl;
if(NbProblems->Value(2)>0)
theCommands<<" Invalid Point on CurveOnSurface .......... "<<NbProblems->Value(2)<<"\n";
//cout<<" Invalid Point on CurveOnSurface .......... "<<NbProblems->Value(2)<<endl;
if(NbProblems->Value(3)>0)
theCommands<<" Invalid Point on Surface ................. "<<NbProblems->Value(3)<<"\n";
//cout<<" Invalid Point on Surface ................. "<<NbProblems->Value(3)<<endl;
if(NbProblems->Value(4)>0)
theCommands<<" No 3D Curve .............................. "<<NbProblems->Value(4)<<"\n";
//cout<<" No 3D Curve .............................. "<<NbProblems->Value(4)<<endl;
if(NbProblems->Value(5)>0)
theCommands<<" Multiple 3D Curve ........................ "<<NbProblems->Value(5)<<"\n";
//cout<<" Multiple 3D Curve ........................ "<<NbProblems->Value(5)<<endl;
if(NbProblems->Value(6)>0)
theCommands<<" Invalid 3D Curve ......................... "<<NbProblems->Value(6)<<"\n";
//cout<<" Invalid 3D Curve ......................... "<<NbProblems->Value(6)<<endl;
if(NbProblems->Value(7)>0)
theCommands<<" No Curve on Surface ...................... "<<NbProblems->Value(7)<<"\n";
//cout<<" No Curve on Surface ...................... "<<NbProblems->Value(7)<<endl;
if(NbProblems->Value(8)>0)
theCommands<<" Invalid Curve on Surface ................. "<<NbProblems->Value(8)<<"\n";
//cout<<" Invalid Curve on Surface ................. "<<NbProblems->Value(8)<<endl;
if(NbProblems->Value(9)>0)
theCommands<<" Invalid Curve on closed Surface .......... "<<NbProblems->Value(9)<<"\n";
//cout<<" Invalid Curve on closed Surface .......... "<<NbProblems->Value(9)<<endl;
if(NbProblems->Value(10)>0)
theCommands<<" Invalid SameRange Flag ................... "<<NbProblems->Value(10)<<"\n";
//cout<<" Invalid SameRange Flag ................... "<<NbProblems->Value(10)<<endl;
if(NbProblems->Value(11)>0)
theCommands<<" Invalid SameParameter Flag ............... "<<NbProblems->Value(11)<<"\n";
//cout<<" Invalid SameParameter Flag ............... "<<NbProblems->Value(11)<<endl;
if(NbProblems->Value(12)>0)
theCommands<<" Invalid Degenerated Flag ................. "<<NbProblems->Value(12)<<"\n";
//cout<<" Invalid Degenerated Flag ................. "<<NbProblems->Value(12)<<endl;
if(NbProblems->Value(13)>0)
theCommands<<" Free Edge ................................ "<<NbProblems->Value(13)<<"\n";
//cout<<" Free Edge ................................ "<<NbProblems->Value(13)<<endl;
if(NbProblems->Value(14)>0)
theCommands<<" Invalid MultiConnexity ................... "<<NbProblems->Value(14)<<"\n";
//cout<<" Invalid MultiConnexity ................... "<<NbProblems->Value(14)<<endl;
if(NbProblems->Value(15)>0)
theCommands<<" Invalid Range ............................ "<<NbProblems->Value(15)<<"\n";
//cout<<" Invalid Range ............................ "<<NbProblems->Value(15)<<endl;
if(NbProblems->Value(16)>0)
theCommands<<" Empty Wire ............................... "<<NbProblems->Value(16)<<"\n";
//cout<<" Empty Wire ............................... "<<NbProblems->Value(16)<<endl;
if(NbProblems->Value(17)>0)
theCommands<<" Redundant Edge ........................... "<<NbProblems->Value(17)<<"\n";
//cout<<" Redundant Edge ........................... "<<NbProblems->Value(17)<<endl;
if(NbProblems->Value(18)>0)
theCommands<<" Self Intersecting Wire ................... "<<NbProblems->Value(18)<<"\n";
//cout<<" Self Intersecting Wire ................... "<<NbProblems->Value(18)<<endl;
if(NbProblems->Value(19)>0)
theCommands<<" No Surface ............................... "<<NbProblems->Value(19)<<"\n";
//cout<<" No Surface ............................... "<<NbProblems->Value(19)<<endl;
if(NbProblems->Value(20)>0)
theCommands<<" Invalid Wire ............................. "<<NbProblems->Value(20)<<"\n";
//cout<<" Invalid Wire ............................. "<<NbProblems->Value(20)<<endl;
if(NbProblems->Value(21)>0)
theCommands<<" Redundant Wire ........................... "<<NbProblems->Value(21)<<"\n";
//cout<<" Redundant Wire ........................... "<<NbProblems->Value(21)<<endl;
if(NbProblems->Value(22)>0)
theCommands<<" Intersecting Wires ....................... "<<NbProblems->Value(22)<<"\n";
//cout<<" Intersecting Wires ....................... "<<NbProblems->Value(22)<<endl;
if(NbProblems->Value(23)>0)
theCommands<<" Invalid Imbrication of Wires ............. "<<NbProblems->Value(23)<<"\n";
//cout<<" Invalid Imbrication of Wires ............. "<<NbProblems->Value(23)<<endl;
if(NbProblems->Value(24)>0)
theCommands<<" Empty Shell .............................. "<<NbProblems->Value(24)<<"\n";
//cout<<" Empty Shell .............................. "<<NbProblems->Value(24)<<endl;
if(NbProblems->Value(25)>0)
theCommands<<" Redundant Face ........................... "<<NbProblems->Value(25)<<"\n";
//cout<<" Redundant Face ........................... "<<NbProblems->Value(25)<<endl;
if(NbProblems->Value(26)>0)
theCommands<<" Unorientable Shape ....................... "<<NbProblems->Value(26)<<"\n";
//cout<<" Unorientable Shape ....................... "<<NbProblems->Value(26)<<endl;
if(NbProblems->Value(27)>0)
theCommands<<" Not Closed ............................... "<<NbProblems->Value(27)<<"\n";
//cout<<" Not Closed ............................... "<<NbProblems->Value(27)<<endl;
if(NbProblems->Value(28)>0)
theCommands<<" Not Connected ............................ "<<NbProblems->Value(28)<<"\n";
//cout<<" Not Connected ............................ "<<NbProblems->Value(28)<<endl;
if(NbProblems->Value(29)>0)
theCommands<<" Subshape not in Shape .................... "<<NbProblems->Value(29)<<"\n";
//cout<<" Subshape not in Shape .................... "<<NbProblems->Value(29)<<endl;
if(NbProblems->Value(30)>0)
theCommands<<" Bad Orientation .......................... "<<NbProblems->Value(30)<<"\n";
//cout<<" Bad Orientation .......................... "<<NbProblems->Value(30)<<endl;
if(NbProblems->Value(31)>0)
theCommands<<" Bad Orientation of Subshape .............. "<<NbProblems->Value(31)<<"\n";
//cout<<" Bad Orientation of Subshape .............. "<<NbProblems->Value(31)<<endl;
if(NbProblems->Value(32)>0)
theCommands<<" checkshape failure......... .............. "<<NbProblems->Value(32)<<"\n";
//cout<<" checkshape failure......... .............. "<<NbProblems->Value(32)<<endl;
NCollection_Array1<const char*> aProblems (1,33);
aProblems.SetValue( BRepCheck_InvalidPointOnCurve, " Invalid Point on Curve ................... ");
aProblems.SetValue(BRepCheck_InvalidPointOnCurveOnSurface, " Invalid Point on CurveOnSurface .......... ");
aProblems.SetValue(BRepCheck_InvalidPointOnSurface, " Invalid Point on Surface ................. ");
aProblems.SetValue(BRepCheck_No3DCurve, " No 3D Curve .............................. ");
aProblems.SetValue(BRepCheck_Multiple3DCurve, " Multiple 3D Curve ........................ ");
aProblems.SetValue(BRepCheck_Invalid3DCurve, " Invalid 3D Curve ......................... ");
aProblems.SetValue(BRepCheck_NoCurveOnSurface, " No Curve on Surface ...................... ");
aProblems.SetValue(BRepCheck_InvalidCurveOnSurface, " Invalid Curve on Surface ................. ");
aProblems.SetValue(BRepCheck_InvalidCurveOnClosedSurface, " Invalid Curve on Closed Surface ................. ");
aProblems.SetValue(BRepCheck_InvalidSameRangeFlag, " Invalid SameRange Flag ................... ");
aProblems.SetValue(BRepCheck_InvalidSameParameterFlag, " Invalid SameParameter Flag ............... ");
aProblems.SetValue(BRepCheck_InvalidDegeneratedFlag, " Invalid Degenerated Flag ................. ");
aProblems.SetValue(BRepCheck_FreeEdge, " Free Edge ................................ ");
aProblems.SetValue(BRepCheck_InvalidMultiConnexity, " Invalid Multi Connexity ................... ");
aProblems.SetValue(BRepCheck_InvalidRange, " Invalid Range ................... ");
aProblems.SetValue(BRepCheck_EmptyWire, " Empty Wire ................... ");
aProblems.SetValue(BRepCheck_RedundantEdge, " BRepCheck_RedundantEdge ................... ");
aProblems.SetValue(BRepCheck_SelfIntersectingWire, " Self Intersecting Wire ................... ");
aProblems.SetValue(BRepCheck_NoSurface, " No Surface ................... ");
aProblems.SetValue(BRepCheck_InvalidWire, " Invalid Wire ................... ");
aProblems.SetValue(BRepCheck_RedundantWire, " Redundant Wire ................... ");
aProblems.SetValue(BRepCheck_IntersectingWires, " Intersecting Wires ................... ");
aProblems.SetValue(BRepCheck_InvalidImbricationOfWires, " Invalid Imbrication Of Wires .................. ");
aProblems.SetValue(BRepCheck_EmptyShell, " Empty Shell ................... ");
aProblems.SetValue(BRepCheck_RedundantFace, " Redundant Face ................... ");
aProblems.SetValue(BRepCheck_UnorientableShape, " Unorientable Shape ................... ");
aProblems.SetValue(BRepCheck_NotClosed, " Not Closed ................... ");
aProblems.SetValue(BRepCheck_NotConnected, " Not Connected ................... ");
aProblems.SetValue(BRepCheck_SubshapeNotInShape, " Subshape Not In Shape ................... ");
aProblems.SetValue(BRepCheck_BadOrientation, " Bad Orientation ................... ");
aProblems.SetValue(BRepCheck_BadOrientationOfSubshape, " Bad Orientation of Subshape .............. ");
aProblems.SetValue(BRepCheck_InvalidToleranceValue, " Invalid tolerance value................... ");
aProblems.SetValue(BRepCheck_CheckFail, " Checkshape failure....................... ");
for (Standard_Integer i = (Standard_Integer)BRepCheck_InvalidPointOnCurve; i <= (Standard_Integer)BRepCheck_CheckFail; ++i)
{
if (NbProblems->Value (i) > 0)
theCommands << i << aProblems.Value (i) << "\n";
}
//cout<<" ------------------------------------------------"<<endl;
//cout<<"*** Shapes with problems : "<<sl->Length()<<endl;
//cout<<endl;
theCommands<<" ------------------------------------------------"<<"\n";
theCommands<<"*** Shapes with problems : "<<sl->Length()<<"\n";

View File

@@ -859,12 +859,12 @@ void BRepTest::SweepCommands(Draw_Interpretor& theCommands)
"deletesweep wire, To delete a section",
__FILE__,deletesweep,g);
theCommands.Add("buildsweep", "builsweep [r] [option] [Tol] , no args to get help"
theCommands.Add("buildsweep", "buildsweep [r] [option] [Tol] , no args to get help",
__FILE__,buildsweep,g);
theCommands.Add("simulsweep", "simulsweep r [n] [option]"
theCommands.Add("simulsweep", "simulsweep r [n] [option]",
__FILE__,simulsweep,g);
theCommands.Add("geompipe", "geompipe r spineedge profileedge radius [byACR [byrotate]]"
theCommands.Add("geompipe", "geompipe r spineedge profileedge radius [byACR [byrotate]]",
__FILE__,geompipe,g);
theCommands.Add("middlepath", "middlepath res shape startshape endshape",

View File

@@ -51,6 +51,8 @@
#include <BRepGProp.hxx>
#include <TColStd_Array1OfReal.hxx>
#include <Draw_ProgressIndicator.hxx>
#include <BRep_TEdge.hxx>
#include <GProp_PGProps.hxx>
// memory management
#include <Standard.hxx>
@@ -618,7 +620,6 @@ static Standard_Integer nexplode(Draw_Interpretor& di,
TColStd_Array1OfInteger OrderInd(1,MaxShapes);
// gp_Pnt GPoint;
GProp_GProps GPr;
// Standard_Integer InOfminX = 1,aTemp;
Standard_Integer aTemp;
TColStd_Array1OfReal MidXYZ(1,MaxShapes); //X,Y,Z;
@@ -627,8 +628,31 @@ static Standard_Integer nexplode(Draw_Interpretor& di,
// Computing of CentreOfMass
for (Index=1; Index <= MaxShapes; Index++) {
OrderInd.SetValue(Index,Index);
BRepGProp::LinearProperties(aShapes(Index),GPr);
gp_Pnt GPoint = GPr.CentreOfMass();
const TopoDS_Shape & aS = aShapes(Index);
gp_Pnt GPoint;
TopoDS_Edge anES;
Handle_BRep_TEdge anEG;
if (typ != TopAbs_EDGE || (anES = TopoDS::Edge(aS),
anEG = (Handle_BRep_TEdge &)anES.TShape(), !anEG->Degenerated()))
{
GProp_GProps GPr;
BRepGProp::LinearProperties(aS,GPr);
GPoint = GPr.CentreOfMass();
}
else
{
GProp_PGProps aPD;
for (TopExp_Explorer aVE(anES, TopAbs_VERTEX); aVE.More(); aVE.Next())
{
TopoDS_Vertex aVS = TopoDS::Vertex(aVE.Current());
Handle_BRep_TVertex & aVG = (Handle_BRep_TVertex &)aVS.TShape();
gp_Pnt aP = aVG->Pnt();
aP.Transform(anES.Location());
aP.Transform(aS.Location());
aPD.AddPoint(aP);
}
GPoint = aPD.CentreOfMass();
}
MidXYZ.SetValue(Index, GPoint.X()*999 + GPoint.Y()*99 +
GPoint.Z()*0.9);
}

View File

@@ -912,7 +912,8 @@ static Standard_Integer cfindp (Draw_Interpretor& , Standard_Integer n, const ch
Draw_Display d = dout.MakeDisplay(view);
Handle(Draw_Drawable3D) D = Draw::Get(a[1]);
Handle(
Draw_Drawable3D) D = Draw::Get(a[1]);
Handle(DrawTrSurf_BezierCurve) DBz =
Handle(DrawTrSurf_BezierCurve)::DownCast(D);

View File

@@ -49,10 +49,14 @@ is
Init (me: mutable; shape: Shape from TopoDS);
---Purpose: Initislises by shape.
Perform (me : mutable;
Perform (me : mutable;
theProgress : ProgressIndicator from Message = 0) returns Boolean;
---Purpose: Iterates on sub- shape and performs fixes
PerformR (me : mutable;
theProgress : ProgressIndicator from Message ) returns Boolean is private;
---Purpose: Internal method. Called by Perform.
SameParameter (me : mutable;
shape : Shape from TopoDS;
enforce : Boolean;

View File

@@ -33,6 +33,7 @@
#include <TopAbs_ShapeEnum.hxx>
#include <BRepTools.hxx>
#include <BRep_Builder.hxx>
#include <BRepBuilderAPI_MakeShape.hxx>
#include <ShapeFix.hxx>
#include <ShapeBuild_ReShape.hxx>
@@ -99,7 +100,19 @@ void ShapeFix_Shape::Init(const TopoDS_Shape& shape)
//purpose :
//=======================================================================
Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)& theProgress)
Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)& theProgress)
{
Standard_Boolean aR = PerformR(theProgress);
BRepBuilderAPI_MakeShape::EnsureToleranceRule(myResult);
return aR;
}
//=======================================================================
//function : PerformR
//purpose :
//=======================================================================
Standard_Boolean ShapeFix_Shape::PerformR(const Handle(Message_ProgressIndicator)& theProgress)
{
Standard_Integer savFixSmallAreaWireMode = 0;
@@ -157,7 +170,7 @@ Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)
for ( TopoDS_Iterator anIter(S); anIter.More() && aPSentry.More(); anIter.Next(), aPSentry.Next() )
{
myShape = anIter.Value();
if ( Perform(theProgress) )
if ( PerformR(theProgress) )
status = Standard_True;
}
if ( !aPSentry.More() )

View File

@@ -37,6 +37,7 @@
#include <ShapeUpgrade_WireDivide.hxx>
#include <Standard_ErrorHandler.hxx>
#include <Standard_Failure.hxx>
#include <BRepBuilderAPI_MakeShape.hxx>
//=======================================================================
//function : ShapeUpgrade_ShapeDivide
@@ -174,6 +175,7 @@ Standard_Boolean ShapeUpgrade_ShapeDivide::Perform(const Standard_Boolean newCon
if ( Status ( ShapeExtend_DONE ) ) {
myResult = myContext->Apply ( C, TopAbs_SHAPE );
myContext->Replace ( myShape, myResult );
BRepBuilderAPI_MakeShape::EnsureToleranceRule(myResult);
return Standard_True;
}
myResult = myShape;
@@ -282,6 +284,7 @@ Standard_Boolean ShapeUpgrade_ShapeDivide::Perform(const Standard_Boolean newCon
}
}
myResult = myContext->Apply ( myShape, TopAbs_SHAPE );
BRepBuilderAPI_MakeShape::EnsureToleranceRule(myResult);
return ! myResult.IsSame ( myShape );
}