1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-09 13:22:24 +03:00

Compare commits

...

22 Commits

Author SHA1 Message Date
abk
8415a280ed Tolerance post Build (Perform) fix was changed for BRepOffset_MakeOffset.
Standard_Boolean parameter theCopy with default value Standard_False was
added to methods LocOpe_WiresOnShape::Bind to determine whether bind
passing shape or its copy.

Tolerance post Build (Perform) fix was created for
- BiTgte_Blend,
- LocOpe_Spliter.

Commands checkshape were added to tests:
- bugs modalg_2 bug22864,
-               bug22946,
-      modalg_4 bug8842_1.

Minor change in BRepFeat_SplitShape.cxx.
2013-03-14 16:57:54 +04:00
abk
85c81d703f Tolerances were changed for input shapes in tests:
- bugs modalg_1 buc60462_2,
-               bug1255,
-               bug1255_1,
- bugs modalg_2 bug19811,
-               bug22781_1,
-               bug22781_2,
-               bug22781_3,
-               bug22781_4,
- bugs modalg_4 bug625,
-               bug767,
- bugs moddata_2 bug75_2,
- bugs vis bug288_10,
- bugs vis bug288_7,
- pipe specific A1 - A9,
-               B1 - B9,
-               C1 - C6,
-               K3 - K9,
-               L1 - L9,
-               M1 - M9,
-               N1 - N5,
-               S8 - S9,
-               T1 - T9,
-               U1 - U7.

Error messages were changed in tests and test files:
- bugs modalg_2 bug472_2,
- heal data advanced H5,
-      drop_small_edges A4.

Input shapes checks were added in test bugs modalg_4 bug8842_1.
2013-03-12 11:34:32 +04:00
abk
7aad5710fb Build fix in CDL files. 2013-03-06 15:11:32 +04:00
abk
f7e8fe1d88 Tolerance post Build (Perform) fix was changed for:
- BRepBuilderAPI_Sewing,
- BRepFeat_MakePrism,
- BRepFilletAPI_MakeChamfer,
- BRepFilletAPI_MakeFillet,
- BRepOffsetAPI_MakePipe,
- BRepOffsetAPI_MakePipeShell
so that input shapes remain unchanged by the fix.

Tolerance post Build (Perform) fix was slightly changed for:
- BRepOffsetAPI_NormalProjection,
- ShapeFix_Shape,
- ShapeUpgrade_ShapeDivide.

Correction of tolerances in input shapes was made for tests:
- blend buildevol F9,
-       complex B6,
-               B8,
-               D5,
-               E2,
-               E4,
-               E6,
-               E9,
- sewing tol_0_01 G3,
-                 G4.
2013-03-06 15:11:28 +04:00
abk
472c48335d Class BRepLib_ToleranceRule was created to work with shape tolerances by
tolerance rule.

Some code from BRepLib was moved to BRepLib_ToleranceRule.
2013-03-06 15:11:25 +04:00
abk
a8301722d0 Error message was changed in test 'bugs modalg bug10232'.
Error message was changed in test file 'heal data advanced ZD1'.
2013-03-06 15:11:21 +04:00
abk
1abff7396b Error message was changed in tests:
- blend complex F6,
-               F8,
- bugs fclasses bug309,

Error message was changed in test data files:
- chamfer data complex B5,
-                      B7,
- heal data advanced ZD3,
-           standard R5.
2013-03-06 15:11:18 +04:00
abk
a5806fd49e Input shapes were corrected by 'updatetolerance' in tests:
- bugs modalg bug697_3,
-             bug697_4,
-             bug697_7,
-             bug697_8,
-             bug697_11,
-             bug1255,
-             bug1255_1,
-             bug5729,
-             bug6181,
-             bug6182,
-             bug6272_85,
-             bug6272_86,
-             bug10842_5.
2013-03-06 15:07:17 +04:00
abk
65b387bd75 Draw command 'EnsureTolRule' was replaced by command 'updatetolerance' in
tests.

Draw command 'EnsureTolRule' was removed.
2013-03-06 15:04:42 +04:00
abk
3e9d304d46 BRepBuilderAPI_MakeShape::EnsureToleranceRule was replaced by
BRepLib::UpdateTolerances.

BRepBuilderAPI_MakeShape::EnsureToleranceRule was removed.
2013-03-06 15:04:04 +04:00
abk
916851661a Error messages was changed in test case data file chamfer/data/complex/B9. Error message was changed in test cases: - thrusection/solids/A2, - A3, - A4, - A5, - A6, - A7, - A8, - A9. 2013-03-06 14:59:46 +04:00
abk
5ed5c561b0 Error message was changed in test case data files: - heal/data/advanced/H5, - S7, - ZC3, - ZE6, - ZE8, - ZE9. Result shape in the tests is invalid. 2013-03-06 14:59:42 +04:00
abk
36228fd825 Error message was changed in test case heal/drop_small|_edges/A4. Result shape in the test is invalid. 2013-03-06 14:59:38 +04:00
abk
168b9ec45a Draw function nexplode was replaced by explode in test case
blend/complex/D4.
Calculation of gravity center was removed for degenerated edge.
It is revealed that function nexplode does not work on shapes with
degenerated edges.

Comments.
Calculation of gravity center was made by vertices data in case of
degenerated edge without representations especially for test case
blend/complex/D4. The mass of the edge was set to 1. The mass near 0 does
not satisfy the test case. As a result test case bugs/moddata/bug268
became failed. Because only the mass near 0 satisfies last test case.
2013-03-06 14:56:53 +04:00
abk
7ed3f1cf33 Error message was changed in test case heal/drop_small_edges/A4. 2013-03-06 14:56:50 +04:00
abk
c3cf76dfbd Calculation of gravity center was made by vertices data for degenerated
edge without representations.
2013-03-06 14:51:30 +04:00
abk
3d9cefa6a7 Correction of tolerances in result shape was made for group boolean and
grids:
- heal drop_small_edges,
       fix_face_size,
       fix_gaps,
       split_angle_advanced,
       surface_to_bspline.

Correction of tolerances in input shapes was made for tests:
- bugs heal bug329,
- bugs modalg buc60462_1,
              buc60463,
              bug292,
              bug317,
              bug330,
              bug452_2,
              bug452_3,
              bug625,
              bug697_1,
              bug698,
              bug774_1,
              bug776_1,
              bug776_2,
              bug80,
              bug919,
- bugs moddata buc60652_2,
               buc60652_3,
               buc60707,
               bug368,
               bug75_2,
               fra62476_2,
               ger61235,
               pro20333,
- bugs step buc60948,
- bugs step bug630,
- bugs vis buc60661,
- bugs vis bug288_1,
- bugs vis bug288_4,
- bugs xde bug859,
- bugs xde bug861,
- feat featlf B8,
       featprism L2,
                 L8,
                 M1,
                 O6,
                 O9,
                 R1,
                 S1,
                 S2,
- sewing tol_0_01 T1.
2013-03-06 14:51:27 +04:00
abk
dca967d0b8 Method BRepGProp::LinearProperties was changed to avoid degenerated edges. 2013-03-06 14:51:02 +04:00
abk
064a93b073 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.
2013-03-06 14:50:57 +04:00
abk
b015a803fc Application of EnsureToleranceRule to ShapeFix_Shape was fixed. 2013-03-06 14:46:41 +04:00
abk
43809f7eec 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.
2013-03-06 14:46:38 +04:00
abv
eeb913ae52 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
2013-03-06 14:46:35 +04:00
211 changed files with 1192 additions and 567 deletions

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>
@@ -113,7 +117,3 @@ Standard_Boolean BRepBuilderAPI_MakeShape::IsDeleted (const TopoDS_Shape& S)
{
return Standard_False;
}

View File

@@ -212,6 +212,9 @@ is
raises NoSuchObject from Standard; -- raised if shape has not been modified
---Purpose: Gives a modifieded subshape
IsProtectedFromModification(me; theS : Shape from TopoDS) returns Boolean;
---Purpose: Indicates if theS is protected from modification.
Dump(me);
---Purpose: print the informations
@@ -554,4 +557,6 @@ fields
myReShape : ReShape from BRepTools is protected;
myMergedEdges : MapOfShape from TopTools;
myProtectedFromModificationShapes : IndexedMapOfShape from TopTools;
end Sewing;

View File

@@ -55,6 +55,7 @@
#include <BRep_Builder.hxx>
#include <BRep_Tool.hxx>
#include <BRepLib.hxx>
#include <BRepLib_ToleranceRule.hxx>
#include <BRepTools_Quilt.hxx>
#include <BSplCLib.hxx>
#include <Extrema_ExtPC.hxx>
@@ -1736,7 +1737,12 @@ void BRepBuilderAPI_Sewing::Load(const TopoDS_Shape& theShape)
{
myReShape->Clear();
if (theShape.IsNull()) myShape.Nullify();
else myShape = myReShape->Apply(theShape);
else
{
TopExp::MapShapes(theShape, myProtectedFromModificationShapes);
//
myShape = myReShape->Apply(theShape);
}
mySewedShape.Nullify();
// Nullify flags and counters
myNbShapes = myNbEdges = myNbVertices = 0;
@@ -1766,6 +1772,9 @@ void BRepBuilderAPI_Sewing::Load(const TopoDS_Shape& theShape)
void BRepBuilderAPI_Sewing::Add(const TopoDS_Shape& aShape)
{
if (aShape.IsNull()) return;
//
TopExp::MapShapes(aShape, myProtectedFromModificationShapes);
//
TopoDS_Shape oShape = myReShape->Apply(aShape);
myOldShapes.Add(aShape,oShape);
myNbShapes = myOldShapes.Extent();
@@ -1909,6 +1918,8 @@ void BRepBuilderAPI_Sewing::Perform(const Handle(Message_ProgressIndicator)& the
mySewedShape.Nullify();
return;
}
BRepLib_ToleranceRule::SetProperTolerances(
mySewedShape, *this);
}
#if DEB
chr_total.Stop();
@@ -2147,6 +2158,16 @@ TopoDS_Shape BRepBuilderAPI_Sewing::ModifiedSubShape(const TopoDS_Shape& aShape)
return myReShape->Apply(aShape);
}
//=======================================================================
//function : IsProtectedFromModification
//purpose :
//=======================================================================
Standard_Boolean BRepBuilderAPI_Sewing::IsProtectedFromModification(
const TopoDS_Shape & theS) const
{
return myProtectedFromModificationShapes.Contains(theS);
}
//=======================================================================
//function : Dump
//purpose :

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

@@ -49,7 +49,8 @@ uses Shape from TopoDS,
DataMapOfShapeShape from TopTools,
SequenceOfCurve from TColGeom,
Curve from Geom,
StatusError from BRepFeat
StatusError from BRepFeat,
IndexedMapOfShape from TopTools
raises ConstructionError from Standard
@@ -168,6 +169,10 @@ is
BarycCurve(me: in out)
returns Curve from Geom;
---Purpose: Generates a curve along the center of mass of the primitive.
IsProtectedFromModification(me; theS : Shape from TopoDS)
returns Boolean from Standard;
---Purpose: Indicates if theS is protected from modification.
fields
myPbase : Shape from TopoDS;
@@ -176,5 +181,6 @@ fields
myCurves : SequenceOfCurve from TColGeom;
myBCurve : Curve from Geom;
myStatusError : StatusError from BRepFeat;
myProtectedFromModificationShapes : IndexedMapOfShape from TopTools;
end MakePrism;

View File

@@ -45,6 +45,8 @@
#include <BRep_Tool.hxx>
#include <BRepLib_ToleranceRule.hxx>
#include <BRepTools.hxx>
@@ -139,6 +141,10 @@ void BRepFeat_MakePrism::Init(const TopoDS_Shape& Sbase,
Standard_Boolean trc = BRepFeat_GettraceFEAT();
if (trc) cout << "BRepFeat_MakePrism::Init" << endl;
#endif
TopExp::MapShapes(Sbase, myProtectedFromModificationShapes);
TopExp::MapShapes(Pbase, myProtectedFromModificationShapes);
TopExp::MapShapes(Skface, myProtectedFromModificationShapes);
//
mySkface = Skface;
SketchFaceValid();
mySbase = Sbase;
@@ -204,6 +210,8 @@ void BRepFeat_MakePrism::Add(const TopoDS_Edge& E,
Standard_Boolean trc = BRepFeat_GettraceFEAT();
if (trc) cout << "BRepFeat_MakePrism::Add(Edge,face)" << endl;
#endif
TopExp::MapShapes(E, myProtectedFromModificationShapes);
//
TopExp_Explorer exp;
for (exp.Init(mySbase,TopAbs_FACE);exp.More();exp.Next()) {
if (exp.Current().IsSame(F)) {
@@ -364,6 +372,8 @@ void BRepFeat_MakePrism::Perform(const TopoDS_Shape& Until)
Standard_Boolean trc = BRepFeat_GettraceFEAT();
if (trc) cout << "BRepFeat_MakePrism::Perform(Until)" << endl;
#endif
TopExp::MapShapes(Until, myProtectedFromModificationShapes);
//
if (Until.IsNull()) {
Standard_ConstructionError::Raise();
}
@@ -463,6 +473,7 @@ void BRepFeat_MakePrism::Perform(const TopoDS_Shape& Until)
}
}
}
BRepLib_ToleranceRule::SetProperTolerances(myShape, *this);
/* // loop of control of descendance
TopExp_Explorer expr(mySbase, TopAbs_FACE);
@@ -514,6 +525,9 @@ void BRepFeat_MakePrism::Perform(const TopoDS_Shape& From,
Standard_Boolean trc = BRepFeat_GettraceFEAT();
if (trc) cout << "BRepFeat_MakePrism::Perform(From,Until)" << endl;
#endif
TopExp::MapShapes(From, myProtectedFromModificationShapes);
TopExp::MapShapes(Until, myProtectedFromModificationShapes);
//
if (From.IsNull() || Until.IsNull()) {
Standard_ConstructionError::Raise();
}
@@ -785,6 +799,8 @@ void BRepFeat_MakePrism::PerformFromEnd(const TopoDS_Shape& Until)
Standard_Boolean trc = BRepFeat_GettraceFEAT();
if (trc) cout << "BRepFeat_MakePrism::PerformFromEnd(From,Until)" << endl;
#endif
TopExp::MapShapes(Until, myProtectedFromModificationShapes);
//
if (Until.IsNull()) {
Standard_ConstructionError::Raise();
}
@@ -988,6 +1004,8 @@ void BRepFeat_MakePrism::PerformUntilHeight(const TopoDS_Shape& Until,
Standard_Boolean trc = BRepFeat_GettraceFEAT();
if (trc) cout << "BRepFeat_MakePrism::PerformUntilHeight(Until,Length)" << endl;
#endif
TopExp::MapShapes(Until, myProtectedFromModificationShapes);
//
if (Until.IsNull()) {
Perform(Length);
}
@@ -1432,8 +1450,12 @@ Standard_Boolean ToFuse(const TopoDS_Face& F1,
return ValRet;
}
//=======================================================================
//function : IsProtectedFromModification
//purpose :
//=======================================================================
Standard_Boolean BRepFeat_MakePrism::IsProtectedFromModification(
const TopoDS_Shape & theS) const
{
return myProtectedFromModificationShapes.Contains(theS);
}

View File

@@ -33,9 +33,10 @@
void BRepFeat_SplitShape::Build ()
{
mySShape.Perform(myWOnShape);
if (mySShape.IsDone()) {
Done();
if (mySShape.IsDone())
{
myShape = mySShape.ResultingShape();
Done();
}
}

View File

@@ -41,7 +41,8 @@ uses
ListOfShape from TopTools,
SecHArray1 from ChFiDS,
HBuilder from TopOpeBRepBuild,
ShapeModification from BRepBuilderAPI
ShapeModification from BRepBuilderAPI,
IndexedMapOfShape from TopTools
@@ -379,6 +380,10 @@ is
returns Boolean
is redefined virtual;
IsProtectedFromModification(me; theS : Shape from TopoDS)
returns Boolean from Standard;
---Purpose: Indicates if theS is protected from modification.
-------------------------------
---Methods for quick simulation
-------------------------------
@@ -396,6 +401,7 @@ fields
myBuilder : ChBuilder from ChFi3d;
myMap : MapOfShape from TopTools;
myProtectedFromModificationShapes : IndexedMapOfShape from TopTools;
end MakeChamfer;

View File

@@ -25,6 +25,8 @@
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <ChFiDS_Spine.hxx>
#include <TopExp_Explorer.hxx>
#include <BRepLib_ToleranceRule.hxx>
#include <TopExp.hxx>
@@ -34,6 +36,7 @@
//=======================================================================
BRepFilletAPI_MakeChamfer::BRepFilletAPI_MakeChamfer(const TopoDS_Shape &S):myBuilder(S)
{
TopExp::MapShapes(S, myProtectedFromModificationShapes);
}
@@ -391,6 +394,7 @@ void BRepFilletAPI_MakeChamfer::Build()
if (myBuilder.IsDone()){
Done();
myShape = myBuilder.Shape();
BRepLib_ToleranceRule::SetProperTolerances(myShape, *this);
//creation of the Map.
TopExp_Explorer ex;
@@ -470,6 +474,16 @@ Standard_Boolean BRepFilletAPI_MakeChamfer::IsDeleted(const TopoDS_Shape& F)
return Standard_True;
}
//=======================================================================
//function : IsProtectedFromModification
//purpose :
//=======================================================================
Standard_Boolean BRepFilletAPI_MakeChamfer::IsProtectedFromModification(
const TopoDS_Shape & theS) const
{
return myProtectedFromModificationShapes.Contains(theS);
}
//=======================================================================
//function : Simulate
//purpose :

View File

@@ -47,7 +47,8 @@ uses
FilletShape from ChFi3d,
HBuilder from TopOpeBRepBuild,
MapOfShape from TopTools,
ShapeModification from BRepBuilderAPI
ShapeModification from BRepBuilderAPI,
IndexedMapOfShape from TopTools
raises
NotDone from StdFail ,
@@ -450,6 +451,10 @@ is
returns Boolean
is redefined virtual;
IsProtectedFromModification(me; theS : Shape from TopoDS)
returns Boolean from Standard;
---Purpose: Indicates if theS is protected from modification.
-------------------------------------------
-- Methods usefull for BRepCtx utilities --
-------------------------------------------
@@ -538,5 +543,6 @@ fields
myBuilder : FilBuilder from ChFi3d;
myMap : MapOfShape from TopTools;
myProtectedFromModificationShapes : IndexedMapOfShape from TopTools;
end MakeFillet;

View File

@@ -30,6 +30,8 @@
#include <Law_Linear.hxx>
#include <Law_S.hxx>
#include <Law_Interpol.hxx>
#include <BRepLib_ToleranceRule.hxx>
#include <TopExp.hxx>
//=======================================================================
//function : BRepFilletAPI_MakeFillet
@@ -40,6 +42,7 @@ BRepFilletAPI_MakeFillet::BRepFilletAPI_MakeFillet(const TopoDS_Shape& S,
const ChFi3d_FilletShape FShape):
myBuilder(S,FShape)
{
TopExp::MapShapes(S, myProtectedFromModificationShapes);
}
//=======================================================================
@@ -532,6 +535,7 @@ void BRepFilletAPI_MakeFillet::Build()
if(myBuilder.IsDone()) {
Done();
myShape = myBuilder.Shape();
BRepLib_ToleranceRule::SetProperTolerances(myShape, *this);
// creation of the Map.
TopExp_Explorer ex;
@@ -665,6 +669,16 @@ Standard_Boolean BRepFilletAPI_MakeFillet::IsDeleted(const TopoDS_Shape& F)
return Standard_True;
}
//=======================================================================
//function : IsProtectedFromModification
//purpose :
//=======================================================================
Standard_Boolean BRepFilletAPI_MakeFillet::IsProtectedFromModification(
const TopoDS_Shape & theS) const
{
return myProtectedFromModificationShapes.Contains(theS);
}
//=======================================================================
//function : NbFaultyContours
//purpose :

View File

@@ -24,7 +24,9 @@
#include <BRepGProp_VinertGK.hxx>
#include <BRepGProp_Face.hxx>
#include <BRepGProp_Domain.hxx>
#include <GProp_PGProps.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Vertex.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <TopTools.hxx>
@@ -32,6 +34,8 @@
#include <TopTools_ListOfShape.hxx>
#include <BRepCheck_Shell.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <BRep_TEdge.hxx>
#include <BRep_TVertex.hxx>
#ifdef DEB
static Standard_Integer AffichEps = 0;
#endif
@@ -55,9 +59,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

@@ -86,6 +86,7 @@
#include <BRepBndLib.hxx>
#include <Approx_CurvilinearParameter.hxx>
#include <Geom_BSplineSurface.hxx>
#include <BRepLib_ToleranceRule.hxx>
// TODO - not thread-safe static variables
@@ -1310,157 +1311,10 @@ void BRepLib::SameParameter(const TopoDS_Edge& AnEdge,
//function : UpdateTolerances
//purpose :
//=======================================================================
void BRepLib::UpdateTolerances(const TopoDS_Shape& aShape,
const Standard_Boolean verifyTolerance)
void BRepLib::UpdateTolerances(const TopoDS_Shape & theS,
const Standard_Boolean theMinimizeTolerances)
{
// Harmonize tolerances
// with rule Tolerance(VERTEX)>=Tolerance(EDGE)>=Tolerance(FACE)
BRep_Builder B;
Standard_Real tol=0;
if (verifyTolerance) {
// Set tolerance to its minimum value
Handle(Geom_Surface) S;
TopLoc_Location l;
TopExp_Explorer ex;
Bnd_Box aB;
Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax, dMax;
for (ex.Init(aShape, TopAbs_FACE); ex.More(); ex.Next()) {
const TopoDS_Face& curf=TopoDS::Face(ex.Current());
S = BRep_Tool::Surface(curf, l);
if (!S.IsNull()) {
aB.SetVoid();
BRepBndLib::Add(curf,aB);
if (S->DynamicType() == STANDARD_TYPE(Geom_RectangularTrimmedSurface)) {
S = (*((Handle(Geom_RectangularTrimmedSurface)*)&S))->BasisSurface();
}
GeomAdaptor_Surface AS(S);
switch (AS.GetType()) {
case GeomAbs_Plane:
case GeomAbs_Cylinder:
case GeomAbs_Cone:
{
tol=Precision::Confusion();
break;
}
case GeomAbs_Sphere:
case GeomAbs_Torus:
{
tol=Precision::Confusion()*2;
break;
}
default:
tol=Precision::Confusion()*4;
}
if (!aB.IsWhole()) {
aB.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
dMax=1.;
if (!aB.IsOpenXmin() && !aB.IsOpenXmax()) dMax=aXmax-aXmin;
if (!aB.IsOpenYmin() && !aB.IsOpenYmax()) aYmin=aYmax-aYmin;
if (!aB.IsOpenZmin() && !aB.IsOpenZmax()) aZmin=aZmax-aZmin;
if (aYmin>dMax) dMax=aYmin;
if (aZmin>dMax) dMax=aZmin;
tol=tol*dMax;
// Do not process tolerances > 1.
if (tol>1.) tol=0.99;
}
const Handle(BRep_TFace)& Tf = *((Handle(BRep_TFace)*)&curf.TShape());
Tf->Tolerance(tol);
}
}
}
//Process edges
TopTools_IndexedDataMapOfShapeListOfShape parents;
TopExp::MapShapesAndAncestors(aShape, TopAbs_EDGE, TopAbs_FACE, parents);
TopTools_ListIteratorOfListOfShape lConx;
Standard_Integer iCur;
for (iCur=1; iCur<=parents.Extent(); iCur++) {
tol=0;
for (lConx.Initialize(parents(iCur)); lConx.More(); lConx.Next()) {
tol=Max(tol, BRep_Tool::Tolerance(TopoDS::Face(lConx.Value())));
}
// Update can only increase tolerance, so if the edge has a greater
// tolerance than its faces it is not concerned
B.UpdateEdge(TopoDS::Edge(parents.FindKey(iCur)), tol);
}
//Vertices are processed
parents.Clear();
TopExp::MapShapesAndAncestors(aShape, TopAbs_VERTEX, TopAbs_EDGE, parents);
TColStd_MapOfTransient Initialized;
TopTools_MapOfShape Done;
Standard_Integer nbV = parents.Extent();
for (iCur=1; iCur<=nbV; iCur++) {
tol=0;
Done.Clear();
const TopoDS_Vertex& V = TopoDS::Vertex(parents.FindKey(iCur));
Bnd_Box box;
box.Add(BRep_Tool::Pnt(V));
gp_Pnt p3d;
for (lConx.Initialize(parents(iCur)); lConx.More(); lConx.Next()) {
const TopoDS_Edge& E = TopoDS::Edge(lConx.Value());
if(!Done.Add(E)) continue;
tol=Max(tol, BRep_Tool::Tolerance(E));
if(!BRep_Tool::SameRange(E)) continue;
Standard_Real par = BRep_Tool::Parameter(V,E);
Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*)&E.TShape());
BRep_ListIteratorOfListOfCurveRepresentation itcr(TE->Curves());
const TopLoc_Location& Eloc = E.Location();
while (itcr.More()) {
// For each CurveRepresentation, check the provided parameter
const Handle(BRep_CurveRepresentation)& cr = itcr.Value();
const TopLoc_Location& loc = cr->Location();
TopLoc_Location L = (Eloc * loc);
if (cr->IsCurve3D()) {
const Handle(Geom_Curve)& C = cr->Curve3D();
if (!C.IsNull()) { // edge non degenerated
p3d = C->Value(par);
p3d.Transform(L.Transformation());
box.Add(p3d);
}
}
else if (cr->IsCurveOnSurface()) {
const Handle(Geom_Surface)& Su = cr->Surface();
const Handle(Geom2d_Curve)& PC = cr->PCurve();
Handle(Geom2d_Curve) PC2;
if (cr->IsCurveOnClosedSurface()) {
PC2 = cr->PCurve2();
}
gp_Pnt2d p2d = PC->Value(par);
p3d = Su->Value(p2d.X(),p2d.Y());
p3d.Transform(L.Transformation());
box.Add(p3d);
if (!PC2.IsNull()) {
p2d = PC2->Value(par);
p3d = Su->Value(p2d.X(),p2d.Y());
p3d.Transform(L.Transformation());
box.Add(p3d);
}
}
itcr.Next();
}
}
Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
box.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
aXmax -= aXmin; aYmax -= aYmin; aZmax -= aZmin;
tol = Max(tol,sqrt(aXmax*aXmax+aYmax*aYmax+aZmax*aZmax));
tol += 2.*Epsilon(tol);
if (verifyTolerance) {
// ASet minimum value of the tolerance
// Attention to sharing of the vertex by other shapes
const Handle(BRep_TVertex)& TV = *((Handle(BRep_TVertex)*)&V.TShape());
if (Initialized.Add(TV))
TV->Tolerance(tol);
else
B.UpdateVertex(V, tol);
}
else {
// Update can only increase tolerance, so if the edge has a greater
// tolerance than its faces it is not concerned
B.UpdateVertex(V, tol);
}
}
BRepLib_ToleranceRule::SetProperTolerances(theS, theMinimizeTolerances);
}
//=======================================================================

View File

@@ -0,0 +1,255 @@
// Copyright (c) 1999-2012 OPEN CASCADE SAS
//
// The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
//
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
//
// The Original Code and all software distributed under the License is
// distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#include <BRepLib_ToleranceRule.hxx>
#include <Bnd_Box.hxx>
#include <BRep_CurveRepresentation.hxx>
#include <BRep_ListIteratorOfListOfCurveRepresentation.hxx>
#include <BRepBndLib.hxx>
#include <Geom_Curve.hxx>
#include <Geom_Surface.hxx>
#include <Geom_RectangularTrimmedSurface.hxx>
#include <Geom2d_Curve.hxx>
#include <GeomAdaptor_Surface.hxx>
#include <gp_Pnt.hxx>
#include <BRep_Tool.hxx>
#include <Precision.hxx>
#include <TopExp_Explorer.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Vertex.hxx>
//=======================================================================
//function : ProperTolerances
//purpose :
//=======================================================================
void BRepLib_ToleranceRule::ProperTolerances(const TopoDS_Shape & theS,
NCollection_DataMap<TopoDS_Shape, Standard_Real,
TopTools_ShapeMapHasher> & theTs,
Standard_Boolean theMinimizeTolerances)
{
// Process faces.
for (TopExp_Explorer aFIt(theS, TopAbs_FACE); aFIt.More(); aFIt.Next())
{
const TopoDS_Face & aF = TopoDS::Face(aFIt.Current());
Standard_Real aFT = Precision::Confusion() * 4;
if (!theMinimizeTolerances)
{
aFT = BRep_Tool::Tolerance(aF);
}
else
{
TopLoc_Location aL;
Handle_Geom_Surface aS = BRep_Tool::Surface(aF, aL);
if (!aS.IsNull())
{
if (theTs.IsBound(aF))
{
continue;
}
if (aS->DynamicType() == STANDARD_TYPE(Geom_RectangularTrimmedSurface))
{
Handle_Geom_RectangularTrimmedSurface aTS =
Handle_Geom_RectangularTrimmedSurface::DownCast(aS);
aS = aTS->BasisSurface();
}
//
switch (GeomAdaptor_Surface(aS).GetType())
{
case GeomAbs_Plane:
case GeomAbs_Cylinder:
case GeomAbs_Cone:
{
aFT = Precision::Confusion();
break;
}
case GeomAbs_Sphere:
case GeomAbs_Torus:
{
aFT = Precision::Confusion() * 2;
}
}
//
Bnd_Box aBox;
BRepBndLib::Add(aF, aBox);
if (!aBox.IsWhole())
{
Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
aBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
Standard_Real dMax = 1;
if (!aBox.IsOpenXmin() && !aBox.IsOpenXmax())
{
dMax = aXmax - aXmin;
}
if (!aBox.IsOpenYmin() && !aBox.IsOpenYmax())
{
aYmin = aYmax - aYmin;
}
if (!aBox.IsOpenZmin() && !aBox.IsOpenZmax())
{
aZmin = aZmax - aZmin;
}
if (dMax < aYmin)
{
dMax = aYmin;
}
if (dMax < aZmin)
{
dMax = aZmin;
}
aFT = aFT * dMax;
// Do not process tolerances > 1.
if (1 < aFT) aFT = 0.99;
}
}
theTs.Bind(aF, aFT);
}
// Process face edges.
for (TopExp_Explorer anEIt(aF, TopAbs_EDGE); anEIt.More(); anEIt.Next())
{
const TopoDS_Edge & anE = TopoDS::Edge(anEIt.Current());
Standard_Real anET = Max(aFT, BRep_Tool::Tolerance(anE));
if (!theTs.IsBound(anE))
{
theTs.Bind(anE, anET);
}
else
{
Standard_Real & aT = theTs(anE);
anET = Max(anET, aT);
aT = anET;
}
// Process face edge vertices.
for (TopExp_Explorer aVIt(anE, TopAbs_VERTEX); aVIt.More(); aVIt.Next())
{
const TopoDS_Vertex & aV = TopoDS::Vertex(aVIt.Current());
Standard_Real aVT = anET;
if (!theMinimizeTolerances)
{
aVT = Max(anET, BRep_Tool::Tolerance(aV));
}
//
if (BRep_Tool::SameRange(anE))
{
Bnd_Box aBox;
aBox.Add(BRep_Tool::Pnt(aV));
Standard_Real aPar = BRep_Tool::Parameter(aV, anE);
Handle_BRep_TEdge & anED = (Handle_BRep_TEdge &)anE.TShape();
const TopLoc_Location & anEL = anE.Location();
for (BRep_ListIteratorOfListOfCurveRepresentation
aRIt(anED->Curves()); aRIt.More(); aRIt.Next())
{
// For each CurveRepresentation, check the provided parameter
const Handle_BRep_CurveRepresentation & aR = aRIt.Value();
const TopLoc_Location & aRL = aR->Location();
TopLoc_Location aL = anEL * aRL;
if (aR->IsCurve3D())
{
const Handle_Geom_Curve & aC = aR->Curve3D();
if (!aC.IsNull())
{
// edge non degenerated
gp_Pnt aPnt = aC->Value(aPar);
aPnt.Transform(aL.Transformation());
aBox.Add(aPnt);
}
}
else if (aR->IsCurveOnSurface())
{
const Handle_Geom_Surface & aS = aR->Surface();
const Handle_Geom2d_Curve & aC = aR->PCurve();
const Handle_Geom2d_Curve * aC2 = 0;
if (aR->IsCurveOnClosedSurface())
{
aC2 = &(aR->PCurve2());
}
gp_Pnt2d a2DP = aC->Value(aPar);
gp_Pnt a3DP = aS->Value(a2DP.X(), a2DP.Y());
a3DP.Transform(aL.Transformation());
aBox.Add(a3DP);
if (aC2 != 0)
{
a2DP = (*aC2)->Value(aPar);
a3DP = aS->Value(a2DP.X(), a2DP.Y());
a3DP.Transform(aL.Transformation());
aBox.Add(a3DP);
}
}
}
//
Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
aBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
aXmax -= aXmin; aYmax -= aYmin; aZmax -= aZmin;
Standard_Real aT =
sqrt(aXmax * aXmax + aYmax * aYmax + aZmax * aZmax);
aT += 2 * Epsilon(aT);
aVT = Max(aVT, aT);
}
//
if (!theTs.IsBound(aV))
{
theTs.Bind(aV, aVT);
}
else
{
Standard_Real & aT = theTs(aV);
aT = Max(aVT, aT);
}
}
}
// Process face vertices.
for (TopExp_Explorer aVIt(aF, TopAbs_VERTEX, TopAbs_EDGE);
aVIt.More(); aVIt.Next())
{
const TopoDS_Vertex & aV = TopoDS::Vertex(aVIt.Current());
Standard_Real aVT = Max(aFT, BRep_Tool::Tolerance(aV));
if (!theTs.IsBound(aV))
{
theTs.Bind(aV, aVT);
}
else
{
Standard_Real & aT = theTs(aV);
aT = Max(aVT, aT);
}
}
}
// Process edges without faces.
for (TopExp_Explorer anEIt(theS, TopAbs_EDGE, TopAbs_FACE);
anEIt.More(); anEIt.Next())
{
const TopoDS_Edge & anE = TopoDS::Edge(anEIt.Current());
Standard_Real anET = BRep_Tool::Tolerance(anE);
// Process edge vertices.
for (TopExp_Explorer aVIt(anE, TopAbs_VERTEX); aVIt.More(); aVIt.Next())
{
const TopoDS_Vertex & aV = TopoDS::Vertex(aVIt.Current());
Standard_Real aVT = Max(anET, BRep_Tool::Tolerance(aV));
if (!theTs.IsBound(aV))
{
theTs.Bind(aV, aVT);
}
else
{
Standard_Real & aT = theTs(aV);
aT = Max(aVT, aT);
}
}
}
}

View File

@@ -0,0 +1,75 @@
// Copyright (c) 1999-2012 OPEN CASCADE SAS
//
// The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
//
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
//
// The Original Code and all software distributed under the License is
// distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#ifndef _BRepLib_ToleranceRule_HeaderFile
#define _BRepLib_ToleranceRule_HeaderFile
#include <BRep_TEdge.hxx>
#include <BRep_TFace.hxx>
#include <BRep_TVertex.hxx>
#include <NCollection_DataMap.hxx>
#include <TopTools_ShapeMapHasher.hxx>
//! The type is intended to work with shape tolerances by tolerance rule.<br>
class BRepLib_ToleranceRule
{
public:
DEFINE_STANDARD_ALLOC
//! In shape theS context calculates proper tolerance theTs(S) for every
//! shape theS shape S so that
//! - S is edge contained by a face of shape theS or
//! - S is vertex contained by an edge or a face of shape theS.
//! Shape S tolerance t(S) may be only increased:
//! t(S) <= theTs(S).
//! Calculation is made by the tolerance rule:
//! face F contains edge E ==> t(F) <= theTs(E),
//! edge E contains vertex V ==> theTs(E) <= theTs(V),
//! face F contains vertex V ==> t(F) <= theTs(V).
//!
//! If flag theMinimizeTolerances is Standard_True then
//! - theTs(F) is calculated for every face F of shape theS as
//! only face F type and size dependent value,
//! - theTs(F) is used instead of t(F),
//! - tolerance of vertex V representations is used instead of t(V).
Standard_EXPORT static void ProperTolerances(const TopoDS_Shape & theS,
NCollection_DataMap<TopoDS_Shape, Standard_Real,
TopTools_ShapeMapHasher> & theTs,
Standard_Boolean theMinimizeTolerances = Standard_False);
//! Auxiliary method. Returns Standard_False.
Standard_Boolean IsProtectedFromModification(
const TopoDS_Shape & theS) const;
//! The method is intended for any class T which contains method
//! IsProtectedFromModification with the following definition:
//! Standard_Boolean IsProtectedFromModification(
//! const TopoDS_Shape & theShape) const.
//! Gets proper tolerances by
//! ProperTolerances(theS, aTs, theMinimizeTolerances).
//! Toleranse t(S) is set to aTs(S) for every shape S so that
//! aTs.IsBound(S) is Standard_True and
//! theObj.IsProtectedFromModification(S) is Standard_False.
template <typename T> static void SetProperTolerances(
const TopoDS_Shape & theS, const T & theObj,
Standard_Boolean theMinimizeTolerances = Standard_False);
//! Calls SetProperTolerances(
//! theS, BRepLib_ToleranceRule(), theMinimizeTolerances).
static void SetProperTolerances(const TopoDS_Shape & theS,
Standard_Boolean theMinimizeTolerances = Standard_False);
};
#include <BRepLib_ToleranceRule.lxx>
#endif

View File

@@ -0,0 +1,117 @@
// Copyright (c) 1999-2012 OPEN CASCADE SAS
//
// The content of this file is subject to the Open CASCADE Technology Public
// License Version 6.5 (the "License"). You may not use the content of this file
// except in compliance with the License. Please obtain a copy of the License
// at http://www.opencascade.org and read it completely before using this file.
//
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
//
// The Original Code and all software distributed under the License is
// distributed on an "AS IS" basis, without warranty of any kind, and the
// Initial Developer hereby disclaims all such warranties, including without
// limitation, any warranties of merchantability, fitness for a particular
// purpose or non-infringement. Please see the License for the specific terms
// and conditions governing the rights and limitations under the License.
#include <TopExp_Explorer.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Vertex.hxx>
//=======================================================================
//function : IsProtectedFromModification
//purpose :
//=======================================================================
inline Standard_Boolean BRepLib_ToleranceRule::IsProtectedFromModification(
const TopoDS_Shape &) const
{
return Standard_False;
}
//=======================================================================
//function : SetProperTolerances
//purpose :
//=======================================================================
template <typename T>
void BRepLib_ToleranceRule::SetProperTolerances(const TopoDS_Shape & theS,
const T & theObj, Standard_Boolean theMinimizeTolerances)
{
// Get proper tolerances.
NCollection_DataMap<TopoDS_Shape, Standard_Real,
TopTools_ShapeMapHasher> aTs;
ProperTolerances(theS, aTs, theMinimizeTolerances);
// Process faces.
if (theMinimizeTolerances)
{
for (TopExp_Explorer aFIt(theS, TopAbs_FACE); aFIt.More(); aFIt.Next())
{
const TopoDS_Face & aF = TopoDS::Face(aFIt.Current());
if (!theObj.IsProtectedFromModification(aF))
{
Handle_BRep_TFace & aFD = Handle_BRep_TFace::DownCast(aF.TShape());
aFD->Tolerance(aTs(aF));
}
}
}
// Process edges and vertices with face.
for (TopExp_Explorer aFIt(theS, TopAbs_FACE); aFIt.More(); aFIt.Next())
{
const TopoDS_Face & aF = TopoDS::Face(aFIt.Current());
// Process face edges.
for (TopExp_Explorer anEIt(aF, TopAbs_EDGE); anEIt.More(); anEIt.Next())
{
const TopoDS_Edge & anE = TopoDS::Edge(anEIt.Current());
if (!theObj.IsProtectedFromModification(anE))
{
Handle_BRep_TEdge & anED = Handle_BRep_TEdge::DownCast(anE.TShape());
anED->Tolerance(aTs(anE));
}
// Process face edge vertices.
for (TopExp_Explorer aVIt(anE, TopAbs_VERTEX); aVIt.More(); aVIt.Next())
{
const TopoDS_Vertex & aV = TopoDS::Vertex(aVIt.Current());
if (!theObj.IsProtectedFromModification(aV))
{
Handle_BRep_TVertex & aVD =
Handle_BRep_TVertex::DownCast(aV.TShape());
aVD->Tolerance(aTs(aV));
}
}
}
// Process face vertices.
for (TopExp_Explorer aVIt(aF, TopAbs_VERTEX, TopAbs_EDGE);
aVIt.More(); aVIt.Next())
{
const TopoDS_Vertex & aV = TopoDS::Vertex(aVIt.Current());
if (!theObj.IsProtectedFromModification(aV))
{
Handle_BRep_TVertex & aVD = Handle_BRep_TVertex::DownCast(aV.TShape());
aVD->Tolerance(aTs(aV));
}
}
}
// Process edge vertices without faces.
for (TopExp_Explorer anEIt(theS, TopAbs_EDGE, TopAbs_FACE);
anEIt.More(); anEIt.Next())
{
const TopoDS_Edge & anE = TopoDS::Edge(anEIt.Current());
for (TopExp_Explorer aVIt(anE, TopAbs_VERTEX); aVIt.More(); aVIt.Next())
{
const TopoDS_Vertex & aV = TopoDS::Vertex(aVIt.Current());
if (!theObj.IsProtectedFromModification(aV))
{
Handle_BRep_TVertex & aVD = Handle_BRep_TVertex::DownCast(aV.TShape());
aVD->Tolerance(aTs(aV));
}
}
}
}
inline void BRepLib_ToleranceRule::SetProperTolerances(
const TopoDS_Shape & theS, Standard_Boolean theMinimizeTolerances)
{
SetProperTolerances(theS, BRepLib_ToleranceRule(), theMinimizeTolerances);
}

View File

@@ -1 +1,4 @@
BRepLib_MakeWire_1.cxx
BRepLib_ToleranceRule.hxx
BRepLib_ToleranceRule.lxx
BRepLib_ToleranceRule.cxx

View File

@@ -44,6 +44,7 @@
#include <BRepCheck_Vertex.hxx>
#include <BRepLib.hxx>
#include <BRepLib_MakeVertex.hxx>
#include <BRepLib_ToleranceRule.hxx>
#include <BRep_Builder.hxx>
#include <BRep_Tool.hxx>
#include <BRep_TVertex.hxx>
@@ -761,10 +762,10 @@ void BRepOffset_MakeOffset::MakeOffsetShape()
// ----------------------------
if (!myOffsetShape.IsNull()) {
UpdateTolerance (myOffsetShape,myFaces);
BRepLib::UpdateTolerances( myOffsetShape );
}
CorrectConicalFaces();
BRepLib_ToleranceRule::SetProperTolerances(myOffsetShape);
myDone = Standard_True;
}

View File

@@ -38,7 +38,8 @@ uses
Wire from TopoDS,
Shape from TopoDS,
Edge from TopoDS,
ListOfShape from TopTools
ListOfShape from TopTools,
IndexedMapOfShape from TopTools
is
@@ -86,8 +87,14 @@ is
returns Shape from TopoDS;
IsProtectedFromModification(me; theS : Shape from TopoDS)
---Purpose: Indicates if theS is protected from modification.
returns Boolean from Standard;
fields
myPipe : Pipe from BRepFill;
myProtectedFromModificationShapes : IndexedMapOfShape from TopTools;
end MakePipe;

View File

@@ -21,12 +21,14 @@
#include <BRepOffsetAPI_MakePipe.ixx>
#include <BRepLib_ToleranceRule.hxx>
#include <TopExp_Explorer.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopoDS.hxx>
#include <TopAbs_ShapeEnum.hxx>
#include <TopExp.hxx>
//=======================================================================
//function : BRepOffsetAPI_MakePipe
@@ -37,6 +39,8 @@ BRepOffsetAPI_MakePipe::BRepOffsetAPI_MakePipe(const TopoDS_Wire& Spine ,
const TopoDS_Shape& Profile)
: myPipe(Spine, Profile)
{
TopExp::MapShapes(Profile, myProtectedFromModificationShapes);
//
Build();
}
@@ -59,6 +63,7 @@ const BRepFill_Pipe& BRepOffsetAPI_MakePipe::Pipe() const
void BRepOffsetAPI_MakePipe::Build()
{
myShape = myPipe.Shape();
BRepLib_ToleranceRule::SetProperTolerances(myShape, *this);
Done();
}
@@ -105,3 +110,12 @@ TopoDS_Shape BRepOffsetAPI_MakePipe::Generated (const TopoDS_Shape& SSpine,
return bid;
}
//=======================================================================
//function : IsProtectedFromModification
//purpose :
//=======================================================================
Standard_Boolean BRepOffsetAPI_MakePipe::IsProtectedFromModification(
const TopoDS_Shape & theS) const
{
return myProtectedFromModificationShapes.Contains(theS);
}

View File

@@ -53,7 +53,8 @@ uses
Vertex from TopoDS,
TransitionMode from BRepBuilderAPI,
PipeError from BRepBuilderAPI,
PipeShell from BRepFill
PipeShell from BRepFill,
IndexedMapOfShape from TopTools
raises
DomainError from Standard,
@@ -320,9 +321,15 @@ is
returns ListOfShape from TopTools
is redefined;
IsProtectedFromModification(me; theS : Shape)
---Purpose: Indicates if theS is protected from modification.
returns Boolean;
fields
myPipe : PipeShell from BRepFill;
myProtectedFromModificationShapes : IndexedMapOfShape from TopTools;
end MakePipeShell;

View File

@@ -22,9 +22,11 @@
#include <BRepOffsetAPI_MakePipeShell.ixx>
#include <BRepLib_ToleranceRule.hxx>
#include <GeomFill_PipeError.hxx>
#include <Standard_NotImplemented.hxx>
#include <StdFail_NotDone.hxx>
#include <TopExp.hxx>
//=======================================================================
//function :
@@ -95,6 +97,7 @@ BRepOffsetAPI_MakePipeShell::BRepOffsetAPI_MakePipeShell(const TopoDS_Wire& Spin
const Standard_Boolean WithContact,
const Standard_Boolean WithCorrection)
{
TopExp::MapShapes(Profile, myProtectedFromModificationShapes);
myPipe->Add(Profile, WithContact, WithCorrection);
}
@@ -107,6 +110,7 @@ BRepOffsetAPI_MakePipeShell::BRepOffsetAPI_MakePipeShell(const TopoDS_Wire& Spin
const Standard_Boolean WithContact,
const Standard_Boolean WithCorrection)
{
TopExp::MapShapes(Profile, myProtectedFromModificationShapes);
myPipe->Add(Profile, Location, WithContact, WithCorrection);
}
@@ -119,6 +123,7 @@ BRepOffsetAPI_MakePipeShell::BRepOffsetAPI_MakePipeShell(const TopoDS_Wire& Spin
const Standard_Boolean WithContact,
const Standard_Boolean WithCorrection)
{
TopExp::MapShapes(Profile, myProtectedFromModificationShapes);
myPipe->SetLaw(Profile, L, WithContact, WithCorrection);
}
@@ -132,6 +137,7 @@ BRepOffsetAPI_MakePipeShell::BRepOffsetAPI_MakePipeShell(const TopoDS_Wire& Spin
const Standard_Boolean WithContact,
const Standard_Boolean WithCorrection)
{
TopExp::MapShapes(Profile, myProtectedFromModificationShapes);
myPipe->SetLaw(Profile, L, Location, WithContact, WithCorrection);
}
@@ -225,6 +231,7 @@ void BRepOffsetAPI_MakePipeShell::Delete( const TopoDS_Shape& Profile)
Ok = myPipe->Build();
if (Ok) {
myShape = myPipe->Shape();
BRepLib_ToleranceRule::SetProperTolerances(myShape, *this);
Done();
}
else NotDone();
@@ -272,3 +279,12 @@ BRepOffsetAPI_MakePipeShell::Generated(const TopoDS_Shape& S)
return myGenerated;
}
//=======================================================================
//function : IsProtectedFromModification
//purpose :
//=======================================================================
Standard_Boolean BRepOffsetAPI_MakePipeShell::IsProtectedFromModification(
const TopoDS_Shape & theS) const
{
return myProtectedFromModificationShapes.Contains(theS);
}

View File

@@ -20,6 +20,7 @@
#include <BRepOffsetAPI_NormalProjection.ixx>
#include <BRepLib_ToleranceRule.hxx>
BRepOffsetAPI_NormalProjection::BRepOffsetAPI_NormalProjection()
{
@@ -64,6 +65,7 @@ BRepOffsetAPI_NormalProjection::BRepOffsetAPI_NormalProjection()
{
myNormalProjector.Build();
myShape = myNormalProjector.Projection();
BRepLib_ToleranceRule::SetProperTolerances(myShape);
Done();
}

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

@@ -308,6 +308,9 @@ is
---Purpose: Computes the center lines
is static;
IsProtectedFromModification(me; theS : Shape from TopoDS) returns Boolean from Standard;
---Purpose: Indicates if theS is protected from modification.
ComputeSurfaces( me : in out)
---Purpose: Perform the generated surfaces.
is static private;
@@ -359,5 +362,6 @@ fields
myNbBranches : Integer from Standard;
myIndices : HArray1OfInteger from TColStd;
myDone : Boolean from Standard;
myProtectedFromModificationShapes : IndexedMapOfShape from TopTools;
end Blend;

View File

@@ -38,6 +38,7 @@
#include <BRep_Tool.hxx>
#include <BRep_Builder.hxx>
#include <BRepLib_MakeEdge.hxx>
#include <BRepLib_ToleranceRule.hxx>
#include <BRepOffset_DataMapOfShapeOffset.hxx>
#include <BRepOffset_DataMapIteratorOfDataMapOfShapeOffset.hxx>
#include <BRepOffset_Offset.hxx>
@@ -844,6 +845,8 @@ BiTgte_Blend::BiTgte_Blend(const TopoDS_Shape& S,
const Standard_Real Tol,
const Standard_Boolean NUBS)
{
TopExp::MapShapes(S, myProtectedFromModificationShapes);
//
myAsDes = new BRepAlgo_AsDes();
Init(S,Radius,Tol,NUBS);
}
@@ -859,6 +862,8 @@ void BiTgte_Blend::Init(const TopoDS_Shape& S,
const Standard_Real Tol,
const Standard_Boolean NUBS)
{
TopExp::MapShapes(S, myProtectedFromModificationShapes);
//
Clear();
myShape = S;
myTol = Tol;
@@ -1060,6 +1065,7 @@ void BiTgte_Blend::Perform(const Standard_Boolean BuildShape)
// Finally construct curves 3d from edges to be transfered
// since the partition is provided ( A Priori);
BRepLib::BuildCurves3d(myResult, Precision::Confusion());
BRepLib_ToleranceRule::SetProperTolerances(myResult, *this);
#ifdef DEB
ChFi3d_ResultChron(cl_total, t_total);
@@ -1855,6 +1861,15 @@ void BiTgte_Blend::ComputeCenters()
#endif
}
//=======================================================================
//function : IsProtectedFromModification
//purpose :
//=======================================================================
Standard_Boolean BiTgte_Blend::IsProtectedFromModification(
const TopoDS_Shape & theS) const
{
return myProtectedFromModificationShapes.Contains(theS);
}
//=======================================================================
//function : ComputeSurfaces

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

@@ -56,6 +56,7 @@
#include <TopExp.hxx>
#include <Standard_ConstructionError.hxx>
#include <BRepLib_ToleranceRule.hxx>
// Modified by skv - Mon May 31 13:00:30 2004 OCC5865 Begin
@@ -99,6 +100,8 @@ void LocOpe_Spliter::Perform(const Handle(LocOpe_ProjectedWires)& PW)
BRepTools_Substitution theSubs;
BRep_Builder BB;
// LocOpe_ProjectedWires::InitEdgeIterator() is much more then simple
// initialization.
for (PW->InitEdgeIterator(); PW->MoreEdge(); PW->NextEdge()) {
const TopoDS_Edge& edg = PW->Edge();
mapE.Add(edg);
@@ -432,6 +435,7 @@ void LocOpe_Spliter::Perform(const Handle(LocOpe_ProjectedWires)& PW)
}
}
BRepLib_ToleranceRule::SetProperTolerances(myRes);
myDone = Standard_True;
}

View File

@@ -55,23 +55,24 @@ is
is static;
Bind(me: mutable; W: Wire from TopoDS;
F: Face from TopoDS)
F : Face from TopoDS; theCopy : Boolean from Standard = Standard_False)
is static;
Bind(me: mutable; Comp: Compound from TopoDS;
F: Face from TopoDS)
F : Face from TopoDS; theCopy : Boolean from Standard = Standard_False)
is static;
Bind(me: mutable; E: Edge from TopoDS;
F: Face from TopoDS)
F : Face from TopoDS; theCopy : Boolean from Standard = Standard_False)
is static;
Bind(me: mutable; EfromW: Edge from TopoDS;
EonFace: Edge from TopoDS)
EonFace: Edge from TopoDS;
theCopy : Boolean from Standard = Standard_False)
is static;

View File

@@ -24,6 +24,7 @@
#include <TopExp_Explorer.hxx>
#include <BRep_Builder.hxx>
#include <BRepBuilderAPI_Copy.hxx>
#include <BRep_Tool.hxx>
#include <TopTools_MapOfShape.hxx>
#include <TopTools_DataMapIteratorOfDataMapOfShapeShape.hxx>
@@ -117,10 +118,10 @@ void LocOpe_WiresOnShape::Init(const TopoDS_Shape& S)
//=======================================================================
void LocOpe_WiresOnShape::Bind(const TopoDS_Wire& W,
const TopoDS_Face& F)
const TopoDS_Face & F, Standard_Boolean theCopy)
{
for (TopExp_Explorer exp(W, TopAbs_EDGE); exp.More(); exp.Next()) {
Bind(TopoDS::Edge(exp.Current()),F);
Bind(TopoDS::Edge(exp.Current()), F, theCopy);
}
}
@@ -130,10 +131,10 @@ void LocOpe_WiresOnShape::Bind(const TopoDS_Wire& W,
//=======================================================================
void LocOpe_WiresOnShape::Bind(const TopoDS_Compound& Comp,
const TopoDS_Face& F)
const TopoDS_Face & F, Standard_Boolean theCopy)
{
for (TopExp_Explorer exp(Comp, TopAbs_EDGE); exp.More(); exp.Next()) {
Bind(TopoDS::Edge(exp.Current()),F);
Bind(TopoDS::Edge(exp.Current()), F, theCopy);
}
myFacesWithSection.Add(F);
}
@@ -144,7 +145,7 @@ void LocOpe_WiresOnShape::Bind(const TopoDS_Compound& Comp,
//=======================================================================
void LocOpe_WiresOnShape::Bind(const TopoDS_Edge& E,
const TopoDS_Face& F)
const TopoDS_Face & F, Standard_Boolean theCopy)
{
// if (!myMapEF.IsBound(E)) {
if (!myMapEF.Contains(E)) {
@@ -157,7 +158,12 @@ void LocOpe_WiresOnShape::Bind(const TopoDS_Edge& E,
}
if (!exp.More()) {
// myMapEF.Bind(E,F);
myMapEF.Add(E,F);
TopoDS_Shape anE = E;
if (theCopy)
{
anE = BRepBuilderAPI_Copy(E).Shape();
}
myMapEF.Add(anE, F);
}
}
else {
@@ -172,12 +178,17 @@ void LocOpe_WiresOnShape::Bind(const TopoDS_Edge& E,
//=======================================================================
void LocOpe_WiresOnShape::Bind(const TopoDS_Edge& Ewir,
const TopoDS_Edge& Efac)
const TopoDS_Edge & Efac, Standard_Boolean theCopy)
{
if (Ewir.IsSame(Efac)) {
return;
}
myMap.Bind(Ewir,Efac);
TopoDS_Shape anE = Ewir;
if (theCopy)
{
anE = BRepBuilderAPI_Copy(Ewir).Shape();
}
myMap.Bind(anE, Efac);
}

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 <BRepLib_ToleranceRule.hxx>
#include <ShapeFix.hxx>
#include <ShapeBuild_ReShape.hxx>
@@ -100,6 +101,18 @@ void ShapeFix_Shape::Init(const TopoDS_Shape& shape)
//=======================================================================
Standard_Boolean ShapeFix_Shape::Perform(const Handle(Message_ProgressIndicator)& theProgress)
{
Standard_Boolean aR = PerformR(theProgress);
BRepLib_ToleranceRule::SetProperTolerances(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 <BRepLib_ToleranceRule.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 );
BRepLib_ToleranceRule::SetProperTolerances(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 );
BRepLib_ToleranceRule::SetProperTolerances(myResult);
return ! myResult.IsSame ( myShape );
}

View File

@@ -1,4 +1,5 @@
restore [locate_data_file CFI_2_o12ffq.rle] s
updatetolerance s
explode s e
mkevol result s

View File

@@ -5,6 +5,7 @@
## ====================================
restore [locate_data_file CTO900_pro12880c.rle] a
updatetolerance a
explode a e
blend result a 5 a_89

View File

@@ -5,6 +5,7 @@
## ====================================
restore [locate_data_file CFI_pro12894.rle] a
updatetolerance a
explode a e
blend result a 5 a_89

View File

@@ -5,7 +5,7 @@
## ====================================
restore [locate_data_file CFI_cfi90fjc.rle] a
nexplode a e
blend result a 5 a_5 5 a_13 5 a_28
explode a e
blend result a 5 a_42 5 a_44 5 a_46
set square 66620.1

View File

@@ -5,6 +5,7 @@
## ====================================
restore [locate_data_file CFI_ger60206.rle] a
updatetolerance a
explode a e
mkevol result a
updatevol a_21 0 0.5 1 1

View File

@@ -5,6 +5,7 @@
## ====================================
restore [locate_data_file CFI_pro8792.rle] a
updatetolerance a
explode a e
mkevol result a
updatevol a_20 0 15 0.5 20 1 5

View File

@@ -5,6 +5,7 @@
## ====================================
restore [locate_data_file CFI_pro10631.rle] a
updatetolerance a
explode a e
blend result a 5 a_45

View File

@@ -5,6 +5,7 @@
## ====================================
restore [locate_data_file CFI_pro10522.rle] a
updatetolerance a
explode a e
blend result a 2 a_82

View File

@@ -5,6 +5,7 @@
## ====================================
restore [locate_data_file CFI_pro10117.rle] a
updatetolerance a
explode a e
blend result a 2 a_128 1 a_10

View File

@@ -1,6 +1,7 @@
if { [isdraw result] } {
#check if result is valid
updatetolerance result
puts "checkshape"
set ch [checkshape result]
puts $ch

View File

@@ -1,4 +1,5 @@
puts "TODO ?OCC12345 ALL: OCC309: Error 2"
puts "TODO ?OCC12345 ALL: OCC309: Error"
puts "TODO ?OCC12345 ALL: Faulty shapes in variables faulty_"
puts "================"
puts "OCC309"

View File

@@ -9,6 +9,7 @@ puts ""
###########################################################
restore [locate_data_file OCC329.brep] a
updatetolerance a
checkshape a
set tol1 [maxtolerance a]

View File

@@ -10,6 +10,7 @@ puts ""
restore [locate_data_file buc60462a.brep] a
checkshape a
restore [locate_data_file buc60462b.brep] b
updatetolerance b
checkshape b
bsection result a b

View File

@@ -8,8 +8,10 @@ puts "BUC60462"
puts "=========="
restore [locate_data_file buc60462c.brep] a
updatetolerance a
checkshape a
restore [locate_data_file buc60462d.brep] b
updatetolerance b
checkshape b
puts "Fuse begin"
bfuse result a b

View File

@@ -10,6 +10,7 @@ cpulimit 1400
restore [locate_data_file buc60463a.brep] a
checkshape a
restore [locate_data_file buc60463b.brep] b
updatetolerance b
checkshape b
bsection result a b

View File

@@ -1,4 +1,5 @@
puts "TODO OCC11111 ALL: Error : Result shape is WRONG"
puts "TODO ?OCC11111 ALL: Faulty shapes in variables faulty_1 to faulty_"
puts "============"
puts "OCC10232"

View File

@@ -9,6 +9,7 @@ puts ""
set BugNumber OCC10842
restore [locate_data_file OCC10842-1.brep] b1
updatetolerance b1
restore [locate_data_file OCC10842-2.brep] b2
puts "Prepare boolean operation ..."

View File

@@ -5,6 +5,7 @@ puts ""
# Exception in command 'section'
restore [locate_data_file OCC1255.brep] a
updatetolerance a
checkshape a
plane p1 0 -36.8067 0 0 1 0

View File

@@ -8,6 +8,7 @@ puts ""
###############################################
restore [locate_data_file OCC1255.brep] a
updatetolerance a
checkshape a
plane p1 0 -36.8067 0 0 1 0

View File

@@ -10,6 +10,7 @@ set BugNumber OCC19811
puts "Load shape ..."
restore [locate_data_file bug19811_VanneMP_supports_tiges_V3.brep] result
updatetolerance result
puts "Scaling operation ..."
if [catch { tscale result 0 0 0 0.5 } catch_result] {

View File

@@ -9,6 +9,7 @@ puts ""
set BugNumber OCC22781
restore [locate_data_file OCC22781-BeforeCont.brep] result
updatetolerance result
set length 5.82393
set 3dviewer 0

View File

@@ -11,6 +11,7 @@ puts ""
set BugNumber OCC22781
restore [locate_data_file OCC22781-BeforeCont.brep] result
updatetolerance result
vinit
vdisplay result
vfit

View File

@@ -9,6 +9,7 @@ puts ""
set BugNumber OCC22781
restore [locate_data_file OCC22781-BeforeCont.brep] result
updatetolerance result
set length 5.82393
set 3dviewer 0

View File

@@ -11,6 +11,7 @@ puts ""
set BugNumber OCC22781
restore [locate_data_file OCC22781-BeforeCont.brep] result
updatetolerance result
vinit
vdisplay result
vfit

View File

@@ -9,7 +9,9 @@ puts ""
set BugNumber OCC22864
restore [locate_data_file bug22864_face1.brep] f1
checkshape f1
restore [locate_data_file bug22864_face2.brep] f2
checkshape f2
shape aShape C
add f1 aShape
@@ -33,6 +35,7 @@ set Numbers 11
for {set i 0} {$i < ${Numbers}} {incr i} {
puts "i=$i"
rollingball result aShape 15 @ f1 f2
checkshape result
set nb_info [nbshapes result]
regexp {VERTEX +: +([-0-9.+eE]+)} $nb_info full nb_v

View File

@@ -9,9 +9,12 @@ puts ""
set BugNumber OCC22946
restore [locate_data_file OCC22946-FaceWithNewCurves.brep] a
checkshape a
restore [locate_data_file OCC22946-CompoundWithoutPcurves.brep] b
checkshape b
splitshape result a a b
checkshape result
set square 6.06498e+08
set 3dviewer 0

View File

@@ -9,6 +9,7 @@ puts ""
#################################################################
restore [locate_data_file OCC292.brep] result
updatetolerance result
checkshape result
tclean result

View File

@@ -7,6 +7,7 @@ puts ""
##################################################
restore [locate_data_file OCC317.brep] result
updatetolerance result
set che [checkshape result]
if { [regexp {Faulty} $che] == 1} {

View File

@@ -10,6 +10,7 @@ puts ""
##################################################
restore [locate_data_file OCC330.brep] result
updatetolerance result
decho off
set che [checkshape result]

View File

@@ -7,6 +7,7 @@ puts "========"
puts ""
restore [locate_data_file mds-part1.rle] a
updatetolerance a
set che [checkshape a]
if { [regexp {Faulty} $che ] == 1 } {
puts "Faulty OCC452 (shape 1): Source shape is invalid. It was detected by Checkshape command"
@@ -23,6 +24,7 @@ if { [regexp {Faulty} $che ] == 1 } {
}
restore [locate_data_file CTO900_ger60239a.rle] c
updatetolerance c
set che [checkshape c]
if { [regexp {Faulty} $che ] == 1 } {
puts "Faulty OCC452 (shape 3): Source shape is invalid. It was detected by Checkshape command"
@@ -31,6 +33,7 @@ if { [regexp {Faulty} $che ] == 1 } {
}
restore [locate_data_file CTO900_ger60239b.rle] d
updatetolerance d
set che [checkshape d]
if { [regexp {Faulty} $che ] == 1 } {
puts "Faulty OCC452 (shape 4): Source shape is invalid. It was detected by Checkshape command"

View File

@@ -7,6 +7,7 @@ puts "========"
puts ""
restore [locate_data_file CTO900_ger60239a.rle] a
updatetolerance a
set che [checkshape a]
if { [regexp {Faulty} $che ] == 1 } {
puts "Faulty OCC452 (shape 5): Source shape is invalid. It was detected by Checkshape command"
@@ -15,6 +16,7 @@ if { [regexp {Faulty} $che ] == 1 } {
}
restore [locate_data_file CTO900_ger60239b.rle] b
updatetolerance b
set che [checkshape b]
if { [regexp {Faulty} $che ] == 1 } {
puts "Faulty OCC452 (shape 6): Source shape is invalid. It was detected by Checkshape command"

View File

@@ -1,4 +1,6 @@
puts "TODO OCC12345 ALL: Error : The command is not valid. The square is"
puts "TODO OCC12345 ALL: Faulty shapes in variables faulty_1 to faulty_"
puts "TODO ?OCC12345 ALL: Error : The command is not valid. The square is"
puts "TODO OCC12345 ALL: Error : The length of result shape is"
puts "========================"
puts " OCC472 "
puts "(case 2)"
@@ -9,6 +11,7 @@ puts ""
#####################################################
restore [locate_data_file OCC472a.brep] b1
updatetolerance b1
checkshape b1
restore [locate_data_file OCC472b.brep] b2

View File

@@ -10,6 +10,7 @@ set BugNumber OCC5729
restore [locate_data_file OCC5729-f1.brep] f1
restore [locate_data_file OCC5729-f2.brep] f2
updatetolerance f2
decho off
set che_1 [checkshape f1]

View File

@@ -7,6 +7,7 @@ cpulimit 10000
restore [locate_data_file OCC698_1.brep] b4
checkshape b4
restore [locate_data_file OCC698_2.brep] b5
updatetolerance b5
checkshape b5
bcut result b5 b4

View File

@@ -9,7 +9,9 @@ puts ""
set BugNumber OCC6181
restore [locate_data_file OCC6181_A.brep] s1
updatetolerance s1
restore [locate_data_file OCC6181_B.brep] s2
updatetolerance s2
decho off
set che_s1 [checkshape s1]

View File

@@ -9,6 +9,7 @@ puts ""
set BugNumber OCC6182
restore [locate_data_file OCC6182_A.brep] s1
updatetolerance s1
restore [locate_data_file OCC6182_B.brep] s2
decho off

View File

@@ -9,6 +9,7 @@ puts ""
pload QAcommands
restore [locate_data_file OCC625.brep] a
updatetolerance a
checkshape a
vinit

View File

@@ -9,6 +9,7 @@ puts ""
set BugNumber OCC6272
restore [locate_data_file OCC6272_bridge2.brep] a1
updatetolerance a1
#
# a1 is compound. It containes a_3, a_5, a_1, a_2, a_4, a_6 solids

View File

@@ -9,6 +9,7 @@ puts ""
set BugNumber OCC6272
restore [locate_data_file OCC6272_bridge2.brep] a1
updatetolerance a1
#
# a1 is compound. It containes a_3, a_5, a_1, a_2, a_4, a_6 solids

View File

@@ -10,6 +10,7 @@ puts ""
######################################################
restore [locate_data_file OCC697_1.brep] b1
updatetolerance b1
restore [locate_data_file OCC697_2.brep] b2
checkshape b1

View File

@@ -10,6 +10,7 @@ puts ""
######################################################
restore [locate_data_file OCC697_1.brep] b1
updatetolerance b1
restore [locate_data_file OCC697_2.brep] b2
checkshape b1

View File

@@ -10,6 +10,7 @@ puts ""
######################################################
restore [locate_data_file OCC697_1.brep] b1
updatetolerance b1
restore [locate_data_file OCC697_2.brep] b2
checkshape b1

View File

@@ -10,6 +10,7 @@ puts ""
######################################################
restore [locate_data_file OCC697_1.brep] b1
updatetolerance b1
restore [locate_data_file OCC697_2.brep] b2
checkshape b1

View File

@@ -8,6 +8,7 @@ puts ""
############################################
restore [locate_data_file OCC767.brep] result
updatetolerance result
sameparameter result

View File

@@ -10,6 +10,7 @@ puts ""
#################################
restore [locate_data_file OCC774.brep] a
updatetolerance a
explode a
checkshape a_1
checkshape a_2

View File

@@ -10,6 +10,7 @@ puts ""
##########################################
restore [locate_data_file OCC776.brep] a
updatetolerance a
explode a
checkshape a_1
checkshape a_2

View File

@@ -10,6 +10,7 @@ puts ""
##########################################
restore [locate_data_file OCC776.brep] a
updatetolerance a
explode a
checkshape a_1
checkshape a_2

View File

@@ -8,6 +8,7 @@ puts ""
##########################################################
restore [locate_data_file BUC60877_lh.brep] sh
updatetolerance sh
checkshape sh
plane pl 820 198 140 -1e-06 0 1

View File

@@ -21,8 +21,10 @@ proc myoffset {result sh val tan} {
}
testreadiges [locate_data_file OCC8842_cone_CATIA.igs] a1
checkshape a1
sewing con1 a1
checkshape con1
# join type Arc
puts "***** offsetting with join type Arc"
@@ -31,6 +33,7 @@ puts " cone_CATIA + 5"
if [catch { myoffset result con1 5 0 } catch_result] {
puts "${BugNumber}: Faulty (1)"
} else {
checkshape result
set square 32396.2

View File

@@ -14,6 +14,7 @@ explode a
# See comment in CR23244:
restore [locate_data_file OCC919-PROC.brep] a_1
updatetolerance a_1
#
checkshape a_1

View File

@@ -7,6 +7,7 @@ puts "=========="
pload QAcommands
restore [locate_data_file buc60652b.brep] result
updatetolerance result
checkshape result
BUC60652 result

View File

@@ -7,6 +7,7 @@ puts "==========="
pload QAcommands
restore [locate_data_file buc60652c.brep] result
updatetolerance result
checkshape result
BUC60652 result

View File

@@ -7,6 +7,7 @@ puts ""
## Fillets created in CasCade version 3 do not display as shaded surfaces.
#################################################
restore [locate_data_file buc60707a.brep] result
updatetolerance result
checkshape result
tclean result

View File

@@ -9,6 +9,7 @@ puts ""
##############################################
restore [locate_data_file OCC368.brep] result
updatetolerance result
checkshape result
tclean result

View File

@@ -9,11 +9,14 @@ puts "case 2"
###############################
restore [locate_data_file BUC60861_gap1.brep] ss
updatetolerance ss
checkshape ss
plane pl1 25680.2288 21428 9995 1 0 0
mkface f1 pl1 -1 11 -5 5
checkshape f1
bsection result ss f1 -n2d
checkshape result
set good_len 10.0009
regexp { +Edge +: +Min +[-0-9.+eE]+ +Max +([-0-9.+eE]+)} [maxtolerance result] full tol

View File

@@ -8,6 +8,7 @@ puts "=================================="
puts ""
restore [locate_data_file fra62476b.brep] result
updatetolerance result
checkshape result
tclean result

View File

@@ -5,6 +5,7 @@ puts "==========="
restore [locate_data_file ger61235a.brep] tool
checkshape tool
restore [locate_data_file ger61235b.brep] object
updatetolerance object
checkshape object
bsection result object tool

View File

@@ -8,6 +8,7 @@ puts "It takes visual check for this BUG"
puts "=================================="
restore [locate_data_file pro20333a.brep] result
updatetolerance result
checkshape result
tclean result

View File

@@ -5,6 +5,7 @@ puts "BUC60948"
puts "========================"
restore [locate_data_file pump4.brep] a_1
updatetolerance a_1
checkshape a_1
#####################################################################

View File

@@ -7,6 +7,7 @@ puts ""
########################################################
restore [locate_data_file OCC630.brep] a1
updatetolerance a1
checkshape a1
######################################################################

View File

@@ -13,6 +13,7 @@ pload XDE
##################################################################
restore [locate_data_file buc60661a.brep] buc60661
updatetolerance buc60661
checkshape buc60661
######################################################################

View File

@@ -4,6 +4,7 @@ puts "(case 1)"
puts "========================"
restore [locate_data_file shading_058.brep] result
updatetolerance result
checkshape result
tclean result

View File

@@ -9,6 +9,8 @@ puts ""
set BugNumber OCC288
restore [locate_data_file shading_151.brep] result
updatetolerance result
checkshape result
set square 54328.8

View File

@@ -4,6 +4,7 @@ puts "(case 4)"
puts "========================"
restore [locate_data_file shading_151.brep] result
updatetolerance result
checkshape result
tclean result

Some files were not shown because too many files have changed in this diff Show More