#include <TopoDS.hxx>
#include <TopoDS_Iterator.hxx>
+#include <TopoDS_LockedShape.hxx>
#include <Precision.hxx>
const Standard_Real Tol) const
{
Handle(BRep_TFace) TF = new BRep_TFace();
+ if(!F.IsNull() && F.Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::MakeFace");
+ }
TF->Surface(S);
TF->Tolerance(Tol);
MakeShape(F,TF);
const Handle(Poly_Triangulation)& T) const
{
Handle(BRep_TFace) TF = new BRep_TFace();
+ if(!F.IsNull() && F.Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::MakeFace");
+ }
TF->Triangulation(T);
MakeShape(F, TF);
}
const Standard_Real Tol) const
{
Handle(BRep_TFace) TF = new BRep_TFace();
+ if(!F.IsNull() && F.Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::MakeFace");
+ }
TF->Surface(S);
TF->Tolerance(Tol);
TF->Location(L);
const Standard_Real Tol) const
{
const Handle(BRep_TFace)& TF = *((Handle(BRep_TFace)*) &F.TShape());
+ if(TF->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateFace");
+ }
TF->Surface(S);
TF->Tolerance(Tol);
TF->Location(L.Predivided(F.Location()));
void BRep_Builder::UpdateFace(const TopoDS_Face& F,
const Handle(Poly_Triangulation)& T) const
{
- (*((Handle(BRep_TFace)*) &F.TShape()))->Triangulation(T);
+ const Handle(BRep_TFace)& TF = *((Handle(BRep_TFace)*) &F.TShape());
+ if(TF->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateFace");
+ }
+ TF->Triangulation(T);
F.TShape()->Modified(Standard_True);
}
void BRep_Builder::UpdateFace(const TopoDS_Face& F,
const Standard_Real Tol) const
{
- (*((Handle(BRep_TFace)*) &F.TShape()))->Tolerance(Tol);
+ const Handle(BRep_TFace)& TF = *((Handle(BRep_TFace)*) &F.TShape());
+ if(TF->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateFace");
+ }
+ TF->Tolerance(Tol);
F.TShape()->Modified(Standard_True);
}
void BRep_Builder::NaturalRestriction(const TopoDS_Face& F,
const Standard_Boolean N) const
{
- (*((Handle(BRep_TFace)*) &F.TShape()))->NaturalRestriction(N);
+ const Handle(BRep_TFace)& TF = (*((Handle(BRep_TFace)*) &F.TShape()));
+ if(TF->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::NaturalRestriction");
+ }
+ TF->NaturalRestriction(N);
F.TShape()->Modified(Standard_True);
}
void BRep_Builder::MakeEdge(TopoDS_Edge& E) const
{
Handle(BRep_TEdge) TE = new BRep_TEdge();
+ if(!E.IsNull() && E.Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::MakeEdge");
+ }
TE->Closed(Standard_False);
MakeShape(E,TE);
}
const Standard_Real Tol) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
const TopLoc_Location l = L.Predivided(E.Location());
UpdateCurves(TE->ChangeCurves(),C,l);
const Standard_Real Tol) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
const TopLoc_Location l = L.Predivided(E.Location());
UpdateCurves(TE->ChangeCurves(),C,S,l);
const gp_Pnt2d& Pl) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
const TopLoc_Location l = L.Predivided(E.Location());
UpdateCurves(TE->ChangeCurves(),C,S,l,Pf,Pl);
const Standard_Real Tol) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
const TopLoc_Location l = L.Predivided(E.Location());
UpdateCurves(TE->ChangeCurves(),C1,C2,S,l);
const gp_Pnt2d& Pl) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
const TopLoc_Location l = L.Predivided(E.Location());
UpdateCurves(TE->ChangeCurves(),C1,C2,S,l,Pf,Pl);
const TopLoc_Location& L) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
-
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves();
BRep_ListIteratorOfListOfCurveRepresentation itcr(lcr);
const TopLoc_Location& L) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
const TopLoc_Location l = L.Predivided(E.Location());
Standard_Boolean isModified = Standard_False;
const TopLoc_Location& L) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
const TopLoc_Location l = L.Predivided(E.Location());
Standard_Boolean isModified = Standard_False;
const TopLoc_Location& L) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
TopLoc_Location l = L.Predivided(E.Location());
BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves();
const TopLoc_Location& L) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
TopLoc_Location l = L.Predivided(E.Location());
BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves();
const Standard_Real Tol) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateEdge");
+ }
TE->UpdateTolerance(Tol);
TE->Modified(Standard_True);
}
const GeomAbs_Shape C)const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
-
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::Continuity");
+ }
const TopLoc_Location l1 = L1.Predivided(E.Location());
const TopLoc_Location l2 = L2.Predivided(E.Location());
const Standard_Boolean S) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::SameParameter");
+ }
TE->SameParameter(S);
TE->Modified(Standard_True);
}
const Standard_Boolean S) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::SameRange");
+ }
TE->SameRange(S);
TE->Modified(Standard_True);
}
const Standard_Boolean D) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::Degenerated");
+ }
TE->Degenerated(D);
if (D) {
// set a null 3d curve
{
// set the range to all the representations if Only3d=FALSE
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
-
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::Range");
+ }
BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves();
BRep_ListIteratorOfListOfCurveRepresentation itcr(lcr);
Handle(BRep_GCurve) GC;
const Standard_Real Last) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::Range");
+ }
const TopLoc_Location l = L.Predivided(E.Location());
BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves();
const TopoDS_Edge& Eout) const
{
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &Ein.TShape());
-
+ if(TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::Transfert");
+ }
const Standard_Real tol = TE->Tolerance();
-
+
BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves();
BRep_ListIteratorOfListOfCurveRepresentation itcr(lcr);
const Standard_Real Tol) const
{
const Handle(BRep_TVertex)& TV = *((Handle(BRep_TVertex)*) &V.TShape());
-
+ if(TV->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateVertex");
+ }
TV->Pnt(P.Transformed(V.Location().Inverted().Transformation()));
TV->UpdateTolerance(Tol);
TV->Modified(Standard_True);
const Handle(BRep_TVertex)& TV = *((Handle(BRep_TVertex)*) &V.TShape());
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TV->Locked() || TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateVertex");
+ }
+
TopLoc_Location L = E.Location().Predivided(V.Location());
// Search the vertex in the edge
const Handle(BRep_TVertex)& TV = *((Handle(BRep_TVertex)*) &V.TShape());
const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
+ if(TV->Locked() || TE->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateVertex");
+ }
// Search the vertex in the edge
TopAbs_Orientation ori = TopAbs_INTERNAL;
{
const Handle(BRep_TVertex)& TV = *((Handle(BRep_TVertex)*) &Ve.TShape());
+ if(TV->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateVertex");
+ }
+
TopLoc_Location L;
const Handle(Geom_Surface)& S = BRep_Tool::Surface(F,L);
L = L.Predivided(Ve.Location());
const Standard_Real Tol) const
{
const Handle(BRep_TVertex)& TV = *((Handle(BRep_TVertex)*) &V.TShape());
+
+ if(TV->Locked())
+ {
+ TopoDS_LockedShape::Raise("BRep_Builder::UpdateVertex");
+ }
+
TV->UpdateTolerance(Tol);
TV->Modified(Standard_True);
}
#include <BRepTools_WireExplorer.hxx>
#include <BRepTools_ShapeSet.hxx>
#include <BRepAdaptor_Surface.hxx>
+#include <BRep_TEdge.hxx>
#include <Precision.hxx>
#include <Poly_Triangulation.hxx>
#include <gp_Ax2.hxx>
return 0;
}
+//=======================================================================
+//
+//=======================================================================
+void setProp(TopoDS_Shape Sh, const char** a, Standard_Integer n)
+{
+ Standard_Integer i;
+ for(i = 2; i < n; i++) {
+ if (strstr ( a[i], "free" )) {
+ if(a[i][0] == '-') {
+ Sh.Free(Standard_False);
+ }
+ else {
+ Sh.Free(Standard_True);
+ }
+ }
+ if (strstr ( a[i], "modified" )) {
+ if(a[i][0] == '-') {
+ Sh.Modified(Standard_False);
+ }
+ else {
+ Sh.Modified(Standard_True);
+ }
+ }
+ if (strstr ( a[i], "checked" )) {
+ if(a[i][0] == '-') {
+ Sh.Checked(Standard_False);
+ }
+ else {
+ Sh.Checked(Standard_True);
+ }
+ }
+ if (strstr ( a[i], "orientable" )) {
+ if(a[i][0] == '-') {
+ Sh.Orientable(Standard_False);
+ }
+ else {
+ Sh.Orientable(Standard_True);
+ }
+ }
+ if (strstr ( a[i], "closed" )) {
+ if(a[i][0] == '-') {
+ Sh.Closed(Standard_False);
+ }
+ else {
+ Sh.Closed(Standard_True);
+ }
+ }
+ if (strstr ( a[i], "infinite" )) {
+ if(a[i][0] == '-') {
+ Sh.Infinite(Standard_False);
+ }
+ else {
+ Sh.Infinite(Standard_True);
+ }
+ }
+ if (strstr ( a[i], "convex" )) {
+ if(a[i][0] == '-') {
+ Sh.Convex(Standard_False);
+ }
+ else {
+ Sh.Convex(Standard_True);
+ }
+ }
+ if (strstr ( a[i], "locked" )) {
+ if(a[i][0] == '-') {
+ Sh.Locked(Standard_False);
+ }
+ else {
+ Sh.Locked(Standard_True);
+ }
+ }
+ }
+}
+
+//=======================================================================
+//
+//=======================================================================
+static Standard_Integer setFlags(Draw_Interpretor& ,
+ Standard_Integer n, const char** a)
+{
+ if (n < 3) return 1;
+
+ TopExp_Explorer ex;
+ TopoDS_Shape Sh = DBRep::Get(a[1]);
+
+ if (Sh.IsNull()) return 1;
+
+ setProp(Sh, a, n);
+ for (ex.Init (Sh,TopAbs_VERTEX); ex.More(); ex.Next()) {
+ TopoDS_Shape S = ex.Current();
+ setProp(S, a, n);
+ }
+
+ for (ex.Init (Sh,TopAbs_EDGE); ex.More(); ex.Next()) {
+ TopoDS_Shape S = ex.Current();
+ setProp(S, a, n);
+ }
+
+ for (ex.Init (Sh,TopAbs_FACE); ex.More(); ex.Next()) {
+ TopoDS_Shape S = ex.Current();
+ setProp(S, a, n);
+ }
+
+ return 0;
+}
+
//=======================================================================
//memory management
//=======================================================================
__FILE__,nbshapes,g);
theCommands.Add("numshapes","numshapes s; size of shape",__FILE__,numshapes,g);
theCommands.Add("countshapes","countshapes s; count of shape",__FILE__,countshapes,g);
+ theCommands.Add("setflags",
+ "setflags shape_name flag1[flag2...]\n sets flags for shape(free, modidfied, checked, orientable, closed, infinite, convex, locked), for exmple <setflags a free> or <setflags a -free> if necessary unflag ",
+ __FILE__,setFlags,g);
// theCommands.Add("dumpmmgt",
// "dump le contenu du gestionnaire de memoire",__FILE__,dumpmmgt,g);