mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
0025174: Provide ShapeCustom and BRepModifier with ProgressIndicator and ReShape features
Conflicts: src/TNaming/TNaming_Name.cxx
This commit is contained in:
parent
2958244411
commit
b350f6ee1e
@ -352,7 +352,7 @@ class BOPTools_CheckCurveOnSurface :
|
|||||||
//
|
//
|
||||||
theFVal = -1.0*aP1.SquareDistance(aP2);
|
theFVal = -1.0*aP1.SquareDistance(aP2);
|
||||||
}
|
}
|
||||||
catch(...) {
|
catch(Standard_Failure) {
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@ -382,7 +382,7 @@ class BOPTools_CheckCurveOnSurface :
|
|||||||
|
|
||||||
theGrad(1) = -2.0*aP1.XYZ().Dot(aP2.XYZ());
|
theGrad(1) = -2.0*aP1.XYZ().Dot(aP2.XYZ());
|
||||||
}
|
}
|
||||||
catch(...) {
|
catch(Standard_Failure) {
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1260,7 +1260,7 @@ Standard_Boolean BOPTools_AlgoTools::
|
|||||||
|
|
||||||
theMaxDist = sqrt(Abs(theMaxDist));
|
theMaxDist = sqrt(Abs(theMaxDist));
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (Standard_Failure) {
|
||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
@ -644,7 +644,7 @@ void BRepFill_OffsetWire::Perform (const Standard_Real Offset,
|
|||||||
PerformWithBiLo(myWorkSpine,Offset,myBilo,myLink,myJoinType,Alt);
|
PerformWithBiLo(myWorkSpine,Offset,myBilo,myLink,myJoinType,Alt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (...)//Every exception was caught.
|
catch (Standard_Failure)//Every exception was caught.
|
||||||
{
|
{
|
||||||
myShape.Nullify();
|
myShape.Nullify();
|
||||||
myIsDone = Standard_False;
|
myIsDone = Standard_False;
|
||||||
|
@ -333,7 +333,7 @@ void BRepOffsetAPI_MakeOffset::Perform(const Standard_Real Offset,
|
|||||||
else
|
else
|
||||||
Done();
|
Done();
|
||||||
}
|
}
|
||||||
catch(...) //Every exception was caught.
|
catch(Standard_Failure) //Every exception was caught.
|
||||||
{
|
{
|
||||||
#ifdef OCCT_DEBUG
|
#ifdef OCCT_DEBUG
|
||||||
cout<<"An exception was caught in BRepOffsetAPI_MakeOffset::Perform : ";
|
cout<<"An exception was caught in BRepOffsetAPI_MakeOffset::Perform : ";
|
||||||
|
@ -20,7 +20,8 @@ class Modifier from BRepTools
|
|||||||
|
|
||||||
uses Shape from TopoDS,
|
uses Shape from TopoDS,
|
||||||
Modification from BRepTools,
|
Modification from BRepTools,
|
||||||
DataMapOfShapeShape from TopTools
|
DataMapOfShapeShape from TopTools,
|
||||||
|
ProgressIndicator from Message
|
||||||
|
|
||||||
raises NullObject from Standard,
|
raises NullObject from Standard,
|
||||||
NoSuchObject from Standard
|
NoSuchObject from Standard
|
||||||
@ -47,7 +48,7 @@ is
|
|||||||
---Purpose: Initializes the modifier with the shape <S>.
|
---Purpose: Initializes the modifier with the shape <S>.
|
||||||
|
|
||||||
|
|
||||||
Perform(me: in out; M: Modification from BRepTools)
|
Perform(me: in out; M: Modification from BRepTools; aProgress: ProgressIndicator from Message = NULL)
|
||||||
---Purpose: Performs the modifications described by <M>.
|
---Purpose: Performs the modifications described by <M>.
|
||||||
raises NullObject from Standard
|
raises NullObject from Standard
|
||||||
-- if the modifier has not been initialized with a shape.
|
-- if the modifier has not been initialized with a shape.
|
||||||
@ -61,7 +62,7 @@ is
|
|||||||
---C++: inline
|
---C++: inline
|
||||||
returns Boolean from Standard
|
returns Boolean from Standard
|
||||||
is static;
|
is static;
|
||||||
|
|
||||||
|
|
||||||
ModifiedShape(me; S: Shape from TopoDS)
|
ModifiedShape(me; S: Shape from TopoDS)
|
||||||
returns Shape from TopoDS
|
returns Shape from TopoDS
|
||||||
@ -82,7 +83,7 @@ is
|
|||||||
is static private;
|
is static private;
|
||||||
|
|
||||||
|
|
||||||
Rebuild(me: in out; S: Shape from TopoDS; M: Modification from BRepTools)
|
Rebuild(me: in out; S: Shape from TopoDS; M: Modification from BRepTools; aProgress: ProgressIndicator from Message = NULL)
|
||||||
returns Boolean from Standard
|
returns Boolean from Standard
|
||||||
is static private;
|
is static private;
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
#include <Standard_NullObject.hxx>
|
#include <Standard_NullObject.hxx>
|
||||||
#include <gp_Trsf.hxx>
|
#include <gp_Trsf.hxx>
|
||||||
#include <BRepTools_TrsfModification.hxx>
|
#include <BRepTools_TrsfModification.hxx>
|
||||||
|
#include <Message_ProgressSentry.hxx>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -108,7 +109,7 @@ void BRepTools_Modifier::Init(const TopoDS_Shape& S)
|
|||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M)
|
void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M, const Handle(Message_ProgressIndicator) & aProgress)
|
||||||
{
|
{
|
||||||
if (myShape.IsNull()) {
|
if (myShape.IsNull()) {
|
||||||
Standard_NullObject::Raise();
|
Standard_NullObject::Raise();
|
||||||
@ -132,7 +133,17 @@ void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Rebuild(myShape,M);
|
Message_ProgressSentry aPSentry(aProgress, "Converting Shape", 0, 2, 1);
|
||||||
|
|
||||||
|
Rebuild(myShape, M, aProgress);
|
||||||
|
|
||||||
|
if (!aPSentry.More())
|
||||||
|
{
|
||||||
|
// The processing was broken
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aPSentry.Next();
|
||||||
|
|
||||||
if (myShape.ShapeType() == TopAbs_FACE) {
|
if (myShape.ShapeType() == TopAbs_FACE) {
|
||||||
if (myShape.Orientation() == TopAbs_REVERSED) {
|
if (myShape.Orientation() == TopAbs_REVERSED) {
|
||||||
@ -166,8 +177,8 @@ void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M)
|
|||||||
if (S.ShapeType() == TopAbs_FACE && !S.IsSame(theIter.Value())) {
|
if (S.ShapeType() == TopAbs_FACE && !S.IsSame(theIter.Value())) {
|
||||||
Tr = BRep_Tool::Triangulation(TopoDS::Face(S),Loc);
|
Tr = BRep_Tool::Triangulation(TopoDS::Face(S),Loc);
|
||||||
if (!Tr.IsNull()) {
|
if (!Tr.IsNull()) {
|
||||||
RecomputeTriangles = Standard_True;
|
RecomputeTriangles = Standard_True;
|
||||||
MaxDeflection = Max(MaxDeflection,Tr->Deflection());
|
MaxDeflection = Max(MaxDeflection,Tr->Deflection());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else */ if (S.ShapeType() == TopAbs_EDGE && !S.IsSame(theIter.Value())) {
|
else */ if (S.ShapeType() == TopAbs_EDGE && !S.IsSame(theIter.Value())) {
|
||||||
@ -183,22 +194,22 @@ void BRepTools_Modifier::Perform(const Handle(BRepTools_Modification)& M)
|
|||||||
it.Initialize(theEFMap.FindFromKey(edg));
|
it.Initialize(theEFMap.FindFromKey(edg));
|
||||||
TopoDS_Face F1,F2;
|
TopoDS_Face F1,F2;
|
||||||
while (it.More() && F2.IsNull()) {
|
while (it.More() && F2.IsNull()) {
|
||||||
if (F1.IsNull()) {
|
if (F1.IsNull()) {
|
||||||
F1 = TopoDS::Face(it.Value());
|
F1 = TopoDS::Face(it.Value());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
F2 = TopoDS::Face(it.Value());
|
F2 = TopoDS::Face(it.Value());
|
||||||
}
|
}
|
||||||
it.Next();
|
it.Next();
|
||||||
}
|
}
|
||||||
if (!F2.IsNull()) {
|
if (!F2.IsNull()) {
|
||||||
const TopoDS_Edge& newedg = TopoDS::Edge(myMap(edg));
|
const TopoDS_Edge& newedg = TopoDS::Edge(myMap(edg));
|
||||||
const TopoDS_Face& newf1 = TopoDS::Face(myMap(F1));
|
const TopoDS_Face& newf1 = TopoDS::Face(myMap(F1));
|
||||||
const TopoDS_Face& newf2 = TopoDS::Face(myMap(F2));
|
const TopoDS_Face& newf2 = TopoDS::Face(myMap(F2));
|
||||||
GeomAbs_Shape Newcont = M->Continuity(edg,F1,F2,newedg,newf1,newf2);
|
GeomAbs_Shape Newcont = M->Continuity(edg,F1,F2,newedg,newf1,newf2);
|
||||||
if (Newcont > GeomAbs_C0) {
|
if (Newcont > GeomAbs_C0) {
|
||||||
B.Continuity(newedg,newf1,newf2,Newcont);
|
B.Continuity(newedg,newf1,newf2,Newcont);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
theIter.Next();
|
theIter.Next();
|
||||||
@ -236,7 +247,8 @@ void BRepTools_Modifier::Put(const TopoDS_Shape& S)
|
|||||||
|
|
||||||
Standard_Boolean BRepTools_Modifier::Rebuild
|
Standard_Boolean BRepTools_Modifier::Rebuild
|
||||||
(const TopoDS_Shape& S,
|
(const TopoDS_Shape& S,
|
||||||
const Handle(BRepTools_Modification)& M)
|
const Handle(BRepTools_Modification)& M,
|
||||||
|
const Handle(Message_ProgressIndicator)& aProgress)
|
||||||
{
|
{
|
||||||
TopoDS_Shape& result = myMap(S);
|
TopoDS_Shape& result = myMap(S);
|
||||||
// if (!result.IsNull()) return ! S.IsEqual(result);
|
// if (!result.IsNull()) return ! S.IsEqual(result);
|
||||||
@ -325,10 +337,24 @@ Standard_Boolean BRepTools_Modifier::Rebuild
|
|||||||
|
|
||||||
TopoDS_Iterator it;
|
TopoDS_Iterator it;
|
||||||
|
|
||||||
for (it.Initialize(S, Standard_False); it.More(); it.Next()) {
|
{
|
||||||
// always call Rebuild
|
Standard_Integer aShapeCount = 0;
|
||||||
Standard_Boolean subrebuilt = Rebuild(it.Value(),M);
|
{
|
||||||
rebuild = subrebuilt || rebuild ;
|
for (it.Initialize(S, Standard_False); it.More(); it.Next()) ++aShapeCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
Message_ProgressSentry aPSentry(aProgress, "Converting SubShapes", 0, aShapeCount, 1);
|
||||||
|
//
|
||||||
|
for (it.Initialize(S, Standard_False); it.More() && aPSentry.More(); it.Next(), aPSentry.Next()) {
|
||||||
|
// always call Rebuild
|
||||||
|
Standard_Boolean subrebuilt = Rebuild(it.Value(), M, aProgress);
|
||||||
|
rebuild = subrebuilt || rebuild ;
|
||||||
|
}
|
||||||
|
if (!aPSentry.More())
|
||||||
|
{
|
||||||
|
// The processing was broken
|
||||||
|
return Standard_False;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// make an empty copy
|
// make an empty copy
|
||||||
@ -360,15 +386,14 @@ Standard_Boolean BRepTools_Modifier::Rebuild
|
|||||||
TopExp_Explorer ex(face.Oriented(fcor),TopAbs_EDGE);
|
TopExp_Explorer ex(face.Oriented(fcor),TopAbs_EDGE);
|
||||||
for (;ex.More(); ex.Next())
|
for (;ex.More(); ex.Next())
|
||||||
{
|
{
|
||||||
const TopoDS_Edge& edge = TopoDS::Edge(ex.Current());
|
const TopoDS_Edge& edge = TopoDS::Edge(ex.Current());
|
||||||
|
|
||||||
if (M->NewCurve2d(edge, face,TopoDS::Edge(myMap(ex.Current())),
|
if (M->NewCurve2d(edge, face, TopoDS::Edge(myMap(ex.Current())), TopoDS::Face(result), curve2d, tol))
|
||||||
TopoDS::Face(result),curve2d, tol))
|
|
||||||
{
|
{
|
||||||
// rem dub 16/09/97 : Make constant topology or not make at all.
|
// rem dub 16/09/97 : Make constant topology or not make at all.
|
||||||
// Do not make if CopySurface = 1
|
// Do not make if CopySurface = 1
|
||||||
// Atention, TRUE sewing edges (RealyClosed)
|
// Atention, TRUE sewing edges (RealyClosed)
|
||||||
// stay even if CopySurface is true.
|
// stay even if CopySurface is true.
|
||||||
|
|
||||||
// check that edge contains two pcurves on this surface:
|
// check that edge contains two pcurves on this surface:
|
||||||
// either it is true seam on the current face, or belongs to two faces
|
// either it is true seam on the current face, or belongs to two faces
|
||||||
@ -407,72 +432,67 @@ Standard_Boolean BRepTools_Modifier::Rebuild
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isClosed)
|
if (isClosed)
|
||||||
{
|
{
|
||||||
TopoDS_Edge CurE = TopoDS::Edge(myMap(edge));
|
TopoDS_Edge CurE = TopoDS::Edge(myMap(edge));
|
||||||
TopoDS_Shape aLocalResult = result;
|
TopoDS_Shape aLocalResult = result;
|
||||||
aLocalResult.Orientation(TopAbs_FORWARD);
|
aLocalResult.Orientation(TopAbs_FORWARD);
|
||||||
TopoDS_Face CurF = TopoDS::Face(aLocalResult);
|
TopoDS_Face CurF = TopoDS::Face(aLocalResult);
|
||||||
Handle(Geom2d_Curve) curve2d1, currcurv;
|
Handle(Geom2d_Curve) curve2d1, currcurv;
|
||||||
Standard_Real f,l;
|
Standard_Real f,l;
|
||||||
if ((!RevWires && fcor != edge.Orientation()) ||
|
if ((!RevWires && fcor != edge.Orientation()) ||
|
||||||
( RevWires && fcor == edge.Orientation())) {
|
( RevWires && fcor == edge.Orientation())) {
|
||||||
CurE.Orientation(TopAbs_FORWARD);
|
CurE.Orientation(TopAbs_FORWARD);
|
||||||
curve2d1 = BRep_Tool::CurveOnSurface(CurE,CurF,f,l);
|
curve2d1 = BRep_Tool::CurveOnSurface(CurE,CurF,f,l);
|
||||||
if (curve2d1.IsNull()) curve2d1 = new Geom2d_Line(gp::OX2d());
|
if (curve2d1.IsNull()) curve2d1 = new Geom2d_Line(gp::OX2d());
|
||||||
B.UpdateEdge (CurE, curve2d1, curve2d, CurF, 0.);
|
B.UpdateEdge (CurE, curve2d1, curve2d, CurF, 0.);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
CurE.Orientation(TopAbs_REVERSED);
|
CurE.Orientation(TopAbs_REVERSED);
|
||||||
curve2d1 = BRep_Tool::CurveOnSurface(CurE,CurF,f,l);
|
curve2d1 = BRep_Tool::CurveOnSurface(CurE,CurF,f,l);
|
||||||
if (curve2d1.IsNull()) curve2d1 = new Geom2d_Line(gp::OX2d());
|
if (curve2d1.IsNull()) curve2d1 = new Geom2d_Line(gp::OX2d());
|
||||||
B.UpdateEdge (CurE, curve2d, curve2d1, CurF, 0.);
|
B.UpdateEdge (CurE, curve2d, curve2d1, CurF, 0.);
|
||||||
}
|
}
|
||||||
currcurv = BRep_Tool::CurveOnSurface(edge,face,f,l);
|
currcurv = BRep_Tool::CurveOnSurface(edge,face,f,l);
|
||||||
B.Range(edge,f,l);
|
B.Range(edge,f,l);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
B.UpdateEdge(TopoDS::Edge(myMap(ex.Current())),
|
B.UpdateEdge(TopoDS::Edge(myMap(ex.Current())),
|
||||||
curve2d,
|
curve2d,
|
||||||
TopoDS::Face(result), 0.);
|
TopoDS::Face(result), 0.);
|
||||||
}
|
}
|
||||||
|
|
||||||
TopLoc_Location theLoc;
|
TopLoc_Location theLoc;
|
||||||
Standard_Real theF,theL;
|
Standard_Real theF,theL;
|
||||||
Handle(Geom_Curve) C3D =
|
Handle(Geom_Curve) C3D = BRep_Tool::Curve(TopoDS::Edge(myMap(ex.Current())), theLoc, theF, theL);
|
||||||
BRep_Tool::Curve(TopoDS::Edge(myMap(ex.Current())),
|
if (C3D.IsNull()) { // Update vertices
|
||||||
theLoc,theF,theL);
|
Standard_Real param;
|
||||||
if (C3D.IsNull()) { // Update vertices
|
TopExp_Explorer ex2(edge,TopAbs_VERTEX);
|
||||||
Standard_Real param;
|
while (ex2.More()) {
|
||||||
TopExp_Explorer ex2(edge,TopAbs_VERTEX);
|
const TopoDS_Vertex& vertex = TopoDS::Vertex(ex2.Current());
|
||||||
while (ex2.More()) {
|
if (!M->NewParameter(vertex, edge, param, tol)) {
|
||||||
const TopoDS_Vertex& vertex = TopoDS::Vertex(ex2.Current());
|
tol = BRep_Tool::Tolerance(vertex);
|
||||||
if (!M->NewParameter(vertex, edge, param, tol)) {
|
param = BRep_Tool::Parameter(vertex,edge);
|
||||||
tol = BRep_Tool::Tolerance(vertex);
|
}
|
||||||
param = BRep_Tool::Parameter(vertex,edge);
|
|
||||||
}
|
|
||||||
|
|
||||||
TopAbs_Orientation vtxrelat = vertex.Orientation();
|
TopAbs_Orientation vtxrelat = vertex.Orientation();
|
||||||
if (edge.Orientation() == TopAbs_REVERSED) {
|
if (edge.Orientation() == TopAbs_REVERSED) {
|
||||||
// Update considere l'edge FORWARD, et le vertex en relatif
|
// Update considere l'edge FORWARD, et le vertex en relatif
|
||||||
vtxrelat= TopAbs::Reverse(vtxrelat);
|
vtxrelat= TopAbs::Reverse(vtxrelat);
|
||||||
}
|
}
|
||||||
// if (myMap(edge).Orientation() == TopAbs_REVERSED) {
|
//if (myMap(edge).Orientation() == TopAbs_REVERSED) {
|
||||||
// vtxrelat= TopAbs::Reverse(vtxrelat);
|
// vtxrelat= TopAbs::Reverse(vtxrelat);
|
||||||
// }
|
//}
|
||||||
TopoDS_Vertex aLocalVertex = TopoDS::Vertex(myMap(vertex));
|
|
||||||
aLocalVertex.Orientation(vtxrelat);
|
|
||||||
// B.UpdateVertex(TopoDS::Vertex
|
|
||||||
// (myMap(vertex).Oriented(vtxrelat)),
|
|
||||||
B.UpdateVertex(aLocalVertex,
|
|
||||||
param,
|
|
||||||
TopoDS::Edge(myMap(edge)),
|
|
||||||
tol);
|
|
||||||
ex2.Next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
TopoDS_Vertex aLocalVertex = TopoDS::Vertex(myMap(vertex));
|
||||||
|
aLocalVertex.Orientation(vtxrelat);
|
||||||
|
//B.UpdateVertex(TopoDS::Vertex
|
||||||
|
//(myMap(vertex).Oriented(vtxrelat)),
|
||||||
|
B.UpdateVertex(aLocalVertex, param, TopoDS::Edge(myMap(edge)), tol);
|
||||||
|
ex2.Next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -486,32 +506,28 @@ Standard_Boolean BRepTools_Modifier::Rebuild
|
|||||||
if(edor != TopAbs_REVERSED) edor = TopAbs_FORWARD;
|
if(edor != TopAbs_REVERSED) edor = TopAbs_FORWARD;
|
||||||
TopExp_Explorer ex(edge.Oriented(edor), TopAbs_VERTEX);
|
TopExp_Explorer ex(edge.Oriented(edor), TopAbs_VERTEX);
|
||||||
while (ex.More()) {
|
while (ex.More()) {
|
||||||
const TopoDS_Vertex& vertex = TopoDS::Vertex(ex.Current());
|
const TopoDS_Vertex& vertex = TopoDS::Vertex(ex.Current());
|
||||||
|
|
||||||
if (!M->NewParameter(vertex, edge, param, tol)) {
|
if (!M->NewParameter(vertex, edge, param, tol)) {
|
||||||
tol = BRep_Tool::Tolerance(vertex);
|
tol = BRep_Tool::Tolerance(vertex);
|
||||||
param = BRep_Tool::Parameter(vertex,edge);
|
param = BRep_Tool::Parameter(vertex,edge);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TopAbs_Orientation vtxrelat = vertex.Orientation();
|
||||||
|
if (edor == TopAbs_REVERSED) {
|
||||||
|
// Update considere l'edge FORWARD, et le vertex en relatif
|
||||||
|
vtxrelat= TopAbs::Reverse(vtxrelat);
|
||||||
|
}
|
||||||
|
|
||||||
TopAbs_Orientation vtxrelat = vertex.Orientation();
|
//if (result.Orientation() == TopAbs_REVERSED) {
|
||||||
if (edor == TopAbs_REVERSED) {
|
// vtxrelat= TopAbs::Reverse(vtxrelat);
|
||||||
// Update considere l'edge FORWARD, et le vertex en relatif
|
//}
|
||||||
vtxrelat= TopAbs::Reverse(vtxrelat);
|
TopoDS_Vertex aLocalVertex = TopoDS::Vertex(myMap(vertex));
|
||||||
}
|
aLocalVertex.Orientation(vtxrelat);
|
||||||
// if (result.Orientation() == TopAbs_REVERSED) {
|
//B.UpdateVertex(TopoDS::Vertex(myMap(vertex).Oriented(vtxrelat)),
|
||||||
// vtxrelat= TopAbs::Reverse(vtxrelat);
|
B.UpdateVertex(aLocalVertex, param, TopoDS::Edge(result), tol);
|
||||||
// }
|
|
||||||
TopoDS_Vertex aLocalVertex = TopoDS::Vertex(myMap(vertex));
|
|
||||||
aLocalVertex.Orientation(vtxrelat);
|
|
||||||
// B.UpdateVertex(TopoDS::Vertex
|
|
||||||
// (myMap(vertex).Oriented(vtxrelat)),
|
|
||||||
B.UpdateVertex(aLocalVertex,
|
|
||||||
param,
|
|
||||||
TopoDS::Edge(result),
|
|
||||||
tol);
|
|
||||||
|
|
||||||
ex.Next();
|
ex.Next();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -697,7 +697,8 @@ static Standard_Integer DNaming_AttachShape (Draw_Interpretor& di,
|
|||||||
TNaming_Selector aSelector(aResultLabel);
|
TNaming_Selector aSelector(aResultLabel);
|
||||||
if(!aSelector.Select(aShape, aCONTEXT, aGeometry, aKeepOrientation))
|
if(!aSelector.Select(aShape, aCONTEXT, aGeometry, aKeepOrientation))
|
||||||
return 1;
|
return 1;
|
||||||
}catch (...) {
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
cout << "EXCEPTION: SELECTION_IMPOSSIBLE" <<endl;
|
cout << "EXCEPTION: SELECTION_IMPOSSIBLE" <<endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -773,7 +774,8 @@ static Standard_Integer DNaming_XAttachShape (Draw_Interpretor& di,
|
|||||||
TNaming_Selector aSelector(aResultLabel);
|
TNaming_Selector aSelector(aResultLabel);
|
||||||
if(!aSelector.Select(aShape, aCONTEXT, aGeometry, aKeepOrientation))
|
if(!aSelector.Select(aShape, aCONTEXT, aGeometry, aKeepOrientation))
|
||||||
return 1;
|
return 1;
|
||||||
} catch (...) {
|
}
|
||||||
|
catch (Standard_Failure) {
|
||||||
cout << "EXCEPTION: SELECTION_IMPOSSIBLE" <<endl;
|
cout << "EXCEPTION: SELECTION_IMPOSSIBLE" <<endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,9 @@ uses
|
|||||||
BRepTools,
|
BRepTools,
|
||||||
TopTools,
|
TopTools,
|
||||||
TColgp,
|
TColgp,
|
||||||
Precision
|
Precision,
|
||||||
|
Message,
|
||||||
|
ShapeBuild
|
||||||
|
|
||||||
is
|
is
|
||||||
|
|
||||||
@ -64,7 +66,9 @@ is
|
|||||||
ApplyModifier(S : Shape from TopoDS;
|
ApplyModifier(S : Shape from TopoDS;
|
||||||
M : Modification from BRepTools;
|
M : Modification from BRepTools;
|
||||||
context: in out DataMapOfShapeShape from TopTools;
|
context: in out DataMapOfShapeShape from TopTools;
|
||||||
MD : in out Modifier from BRepTools)
|
MD : in out Modifier from BRepTools;
|
||||||
|
aProgress : ProgressIndicator from Message = NULL;
|
||||||
|
aReShape : ReShape from ShapeBuild = NULL )
|
||||||
|
|
||||||
returns Shape from TopoDS;
|
returns Shape from TopoDS;
|
||||||
---Purpose: Applies modifier to shape and checks sharing in the case assemblies.
|
---Purpose: Applies modifier to shape and checks sharing in the case assemblies.
|
||||||
|
@ -32,7 +32,11 @@
|
|||||||
#include <TopoDS_Iterator.hxx>
|
#include <TopoDS_Iterator.hxx>
|
||||||
#include <BRep_Builder.hxx>
|
#include <BRep_Builder.hxx>
|
||||||
#include <BRepTools_Modifier.hxx>
|
#include <BRepTools_Modifier.hxx>
|
||||||
|
#include <ShapeBuild_ReShape.hxx>
|
||||||
|
#include <Standard_ErrorHandler.hxx>
|
||||||
|
|
||||||
|
#include <Message_ProgressIndicator.hxx>
|
||||||
|
#include <Message_ProgressSentry.hxx>
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
//function : ApplyModifier
|
//function : ApplyModifier
|
||||||
@ -42,7 +46,9 @@
|
|||||||
TopoDS_Shape ShapeCustom::ApplyModifier (const TopoDS_Shape &S,
|
TopoDS_Shape ShapeCustom::ApplyModifier (const TopoDS_Shape &S,
|
||||||
const Handle(BRepTools_Modification) &M,
|
const Handle(BRepTools_Modification) &M,
|
||||||
TopTools_DataMapOfShapeShape &context,
|
TopTools_DataMapOfShapeShape &context,
|
||||||
BRepTools_Modifier& MD )
|
BRepTools_Modifier& MD,
|
||||||
|
const Handle(Message_ProgressIndicator) & aProgress,
|
||||||
|
const Handle(ShapeBuild_ReShape) & aReShape)
|
||||||
{
|
{
|
||||||
// protect against INTERNAL/EXTERNAL shapes
|
// protect against INTERNAL/EXTERNAL shapes
|
||||||
TopoDS_Shape SF = S.Oriented(TopAbs_FORWARD);
|
TopoDS_Shape SF = S.Oriented(TopAbs_FORWARD);
|
||||||
@ -53,14 +59,23 @@ TopoDS_Shape ShapeCustom::ApplyModifier (const TopoDS_Shape &S,
|
|||||||
TopoDS_Compound C;
|
TopoDS_Compound C;
|
||||||
BRep_Builder B;
|
BRep_Builder B;
|
||||||
B.MakeCompound ( C );
|
B.MakeCompound ( C );
|
||||||
for ( TopoDS_Iterator it(SF); it.More(); it.Next() ) {
|
|
||||||
|
Standard_Integer aShapeCount = 0;
|
||||||
|
{
|
||||||
|
for (TopoDS_Iterator it(SF); it.More(); it.Next()) ++aShapeCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
Message_ProgressSentry aPSentry(aProgress, "Applying Modifier For Solids", 0, aShapeCount, 1);
|
||||||
|
for ( TopoDS_Iterator it(SF); it.More() && aPSentry.More(); it.Next(), aPSentry.Next() ) {
|
||||||
TopoDS_Shape shape = it.Value();
|
TopoDS_Shape shape = it.Value();
|
||||||
TopLoc_Location L = shape.Location(), nullLoc;
|
TopLoc_Location L = shape.Location(), nullLoc;
|
||||||
shape.Location ( nullLoc );
|
shape.Location ( nullLoc );
|
||||||
TopoDS_Shape res;
|
TopoDS_Shape res;
|
||||||
if ( context.IsBound ( shape ) )
|
if ( context.IsBound ( shape ) )
|
||||||
res = context.Find ( shape ).Oriented ( shape.Orientation() );
|
res = context.Find ( shape ).Oriented ( shape.Orientation() );
|
||||||
else res = ApplyModifier ( shape, M, context ,MD);
|
else
|
||||||
|
res = ApplyModifier ( shape, M, context ,MD, aProgress);
|
||||||
|
|
||||||
if ( ! res.IsSame ( shape ) ) {
|
if ( ! res.IsSame ( shape ) ) {
|
||||||
context.Bind ( shape, res );
|
context.Bind ( shape, res );
|
||||||
locModified = Standard_True;
|
locModified = Standard_True;
|
||||||
@ -68,17 +83,48 @@ TopoDS_Shape ShapeCustom::ApplyModifier (const TopoDS_Shape &S,
|
|||||||
res.Location ( L );
|
res.Location ( L );
|
||||||
B.Add ( C, res );
|
B.Add ( C, res );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !aPSentry.More() )
|
||||||
|
{
|
||||||
|
// Was cancelled
|
||||||
|
return S;
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! locModified ) return S;
|
if ( ! locModified ) return S;
|
||||||
context.Bind ( SF, C );
|
context.Bind ( SF, C );
|
||||||
return C.Oriented ( S.Orientation() );
|
return C.Oriented ( S.Orientation() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Message_ProgressSentry aPSentry(aProgress, "Modify the Shape", 0, 1, 1);
|
||||||
// Modify the shape
|
// Modify the shape
|
||||||
//BRepTools_Modifier Op(SF,M);
|
|
||||||
MD.Init(SF);
|
MD.Init(SF);
|
||||||
MD.Perform(M);
|
MD.Perform(M, aProgress);
|
||||||
|
|
||||||
if ( ! MD.IsDone() ) return S;
|
if ( !aPSentry.More() || !MD.IsDone() ) return S;
|
||||||
|
if ( !aReShape.IsNull() )
|
||||||
|
{
|
||||||
|
for(TopoDS_Iterator theIterator(SF,Standard_False);theIterator.More();theIterator.Next())
|
||||||
|
{
|
||||||
|
const TopoDS_Shape & current = theIterator.Value();
|
||||||
|
TopoDS_Shape result;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OCC_CATCH_SIGNALS
|
||||||
|
result = MD.ModifiedShape( current );
|
||||||
|
}
|
||||||
|
catch (Standard_NoSuchObject)
|
||||||
|
{
|
||||||
|
// the sub shape isn't in the map
|
||||||
|
result.Nullify();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!result.IsNull() && !current.IsSame(result))
|
||||||
|
{
|
||||||
|
aReShape->Replace(current, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return MD.ModifiedShape(SF).Oriented(S.Orientation());
|
return MD.ModifiedShape(SF).Oriented(S.Orientation());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@
|
|||||||
|
|
||||||
#include <Standard_NotImplemented.hxx>
|
#include <Standard_NotImplemented.hxx>
|
||||||
#include <Standard_ConstructionError.hxx>
|
#include <Standard_ConstructionError.hxx>
|
||||||
|
#include <Standard_ErrorHandler.hxx>
|
||||||
#include <TopTools_Array1OfShape.hxx>
|
#include <TopTools_Array1OfShape.hxx>
|
||||||
#include <TColStd_Array1OfInteger.hxx>
|
#include <TColStd_Array1OfInteger.hxx>
|
||||||
#include <TopoDS_Wire.hxx>
|
#include <TopoDS_Wire.hxx>
|
||||||
@ -2075,6 +2076,7 @@ Standard_Boolean TNaming_Name::Solve(const TDF_Label& aLab,
|
|||||||
PrintEntry(aLab);
|
PrintEntry(aLab);
|
||||||
#endif
|
#endif
|
||||||
try {
|
try {
|
||||||
|
OCC_CATCH_SIGNALS
|
||||||
switch (myType) {
|
switch (myType) {
|
||||||
case TNaming_UNKNOWN :
|
case TNaming_UNKNOWN :
|
||||||
{
|
{
|
||||||
@ -2145,7 +2147,7 @@ case TNaming_SHELLIN:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (...) {
|
} catch (Standard_Failure) {
|
||||||
#ifdef OCCT_DEBUG
|
#ifdef OCCT_DEBUG
|
||||||
cout << "Name::Solve: EXCEPTION==> NameType = " << NameTypeToString(myType) << " ";
|
cout << "Name::Solve: EXCEPTION==> NameType = " << NameTypeToString(myType) << " ";
|
||||||
PrintEntry(aLab);
|
PrintEntry(aLab);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user