// Created on: 1993-07-22
// Created by: Remi LEQUETTE
// Copyright (c) 1993-1999 Matra Datavision
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 1999-2014 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.
+// This file is part of Open CASCADE Technology software library.
//
-// 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.
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
//
-// 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.
-
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+#include <BRepTest.hxx>
+#include <BRepTest_Objects.hxx>
-#include <BRepTest.hxx>
#include <DBRep.hxx>
#include <Draw_Interpretor.hxx>
#include <Draw_Appli.hxx>
#include <gp_Pnt2d.hxx>
#include <TColgp_Array1OfPnt2d.hxx>
-static BRepOffsetAPI_MakePipeShell* Sweep= 0;
+static BRepOffsetAPI_MakePipeShell* Sweep = 0;
+static BRepOffsetAPI_ThruSections* Generator = 0;
-//#ifdef WNT
#include <stdio.h>
#include <Geom_Curve.hxx>
#include <GeomAdaptor_HCurve.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRep_Tool.hxx>
#include <gp_Pnt.hxx>
-//#endi#include <gp_Vec.hxx>
#include <gp_Vec.hxx>
#include <Geom_Circle.hxx>
#include <gp_Ax2.hxx>
+
//=======================================================================
// prism
//=======================================================================
-static Standard_Integer prism(Draw_Interpretor& , Standard_Integer n, const char** a)
+static Standard_Integer prism(Draw_Interpretor&, Standard_Integer n, const char** a)
{
if (n < 6) return 1;
TopoDS_Shape base = DBRep::Get(a[2]);
if (base.IsNull()) return 1;
- gp_Vec V(Draw::Atof(a[3]),Draw::Atof(a[4]),Draw::Atof(a[5]));
-
+ gp_Vec V(Draw::Atof(a[3]), Draw::Atof(a[4]), Draw::Atof(a[5]));
+
Standard_Boolean copy = Standard_False;
- Standard_Boolean inf = Standard_False;
+ Standard_Boolean inf = Standard_False;
Standard_Boolean sinf = Standard_False;
if (n > 6) {
copy = (*a[6] == 'c') || (*a[6] == 'C');
- inf = (*a[6] == 'i') || (*a[6] == 'I');
+ inf = (*a[6] == 'i') || (*a[6] == 'I');
sinf = (*a[6] == 's') || (*a[6] == 'S');
}
TopoDS_Shape res;
- if (inf || sinf)
- res = BRepPrimAPI_MakePrism(base,gp_Dir(V),inf);
+ BRepPrimAPI_MakePrism* Prism;
+ if (inf || sinf)
+ {
+ Prism = new BRepPrimAPI_MakePrism(base, gp_Dir(V), inf);
+ }
else
- res = BRepPrimAPI_MakePrism(base,V,copy);
+ {
+ Prism = new BRepPrimAPI_MakePrism(base, V, copy);
+ }
+
+ res = Prism->Shape();
+
+ DBRep::Set(a[1], res);
+
+ //History
+ TopTools_ListOfShape anArgs;
+ anArgs.Append(base);
+ BRepTest_Objects::SetHistory(anArgs, *Prism);
- DBRep::Set(a[1],res);
+ delete Prism;
return 0;
}
//=======================================================================
// revol
//=======================================================================
-
-static Standard_Integer revol(Draw_Interpretor& ,
- Standard_Integer n, const char** a)
+static Standard_Integer revol(Draw_Interpretor&,
+ Standard_Integer n, const char** a)
{
- if (n < 10) return 1;
+ if (n < 10) return 1;
TopoDS_Shape base = DBRep::Get(a[2]);
if (base.IsNull()) return 1;
- gp_Pnt P(Draw::Atof(a[3]),Draw::Atof(a[4]),Draw::Atof(a[5]));
- gp_Dir D(Draw::Atof(a[6]),Draw::Atof(a[7]),Draw::Atof(a[8]));
- gp_Ax1 A(P,D);
+ gp_Pnt P(Draw::Atof(a[3]), Draw::Atof(a[4]), Draw::Atof(a[5]));
+ gp_Dir D(Draw::Atof(a[6]), Draw::Atof(a[7]), Draw::Atof(a[8]));
+ gp_Ax1 A(P, D);
Standard_Real angle = Draw::Atof(a[9]) * (M_PI / 180.0);
-
+
Standard_Boolean copy = n > 10;
- TopoDS_Shape res = BRepPrimAPI_MakeRevol(base,A,angle,copy);
- DBRep::Set(a[1],res);
+ BRepPrimAPI_MakeRevol Revol(base, A, angle, copy);
+
+ TopoDS_Shape res = Revol.Shape();
+
+ DBRep::Set(a[1], res);
+
+ //History
+ TopTools_ListOfShape anArgs;
+ anArgs.Append(base);
+ BRepTest_Objects::SetHistory(anArgs, Revol);
return 0;
}
//=======================================================================
static Standard_Integer pipe(Draw_Interpretor& di,
- Standard_Integer n, const char** a)
+ Standard_Integer n, const char** a)
{
if (n == 1)
{
- di << "pipe result Wire_spine Profile [Mode [Approx]]" << "\n";
- di << "Mode = 0 - CorrectedFrenet," << "\n";
- di << " = 1 - Frenet," << "\n";
- di << " = 2 - DiscreteTrihedron" << "\n";
- di << "Approx - force C1-approximation if result is C0" << "\n";
+ di << "pipe result Wire_spine Profile [Mode [Approx]]\n";
+ di << "Mode = 0 - CorrectedFrenet,\n";
+ di << " = 1 - Frenet,\n";
+ di << " = 2 - DiscreteTrihedron\n";
+ di << "Approx - force C1-approximation if result is C0\n";
return 0;
}
-
+
if (n > 1 && n < 4) return 1;
- TopoDS_Shape Spine = DBRep::Get(a[2],TopAbs_WIRE);
- if ( Spine.IsNull()) return 1;
+ TopoDS_Shape Spine = DBRep::Get(a[2], TopAbs_WIRE);
+ if (Spine.IsNull()) return 1;
TopoDS_Shape Profile = DBRep::Get(a[3]);
- if ( Profile.IsNull()) return 1;
+ if (Profile.IsNull()) return 1;
GeomFill_Trihedron Mode = GeomFill_IsCorrectedFrenet;
if (n >= 5)
Standard_Boolean ForceApproxC1 = Standard_False;
if (n >= 6)
ForceApproxC1 = Standard_True;
-
- TopoDS_Shape S = BRepOffsetAPI_MakePipe(TopoDS::Wire(Spine),
- Profile,
- Mode,
- ForceApproxC1);
-
- DBRep::Set(a[1],S);
-
+
+ BRepOffsetAPI_MakePipe PipeBuilder(TopoDS::Wire(Spine),
+ Profile,
+ Mode,
+ ForceApproxC1);
+ TopoDS_Shape S = PipeBuilder.Shape();
+
+ DBRep::Set(a[1], S);
+
+ // Save history of pipe
+ if (BRepTest_Objects::IsHistoryNeeded())
+ {
+ TopTools_ListOfShape aList;
+ aList.Append(Profile);
+ aList.Append(Spine);
+ BRepTest_Objects::SetHistory(aList, PipeBuilder);
+ }
+
return 0;
}
//=======================================================================
-static Standard_Integer geompipe(Draw_Interpretor& ,
- Standard_Integer n, const char** a)
+static Standard_Integer geompipe(Draw_Interpretor&,
+ Standard_Integer n, const char** a)
{
- TopoDS_Shape Spine = DBRep::Get(a[2],TopAbs_EDGE);
- if ( Spine.IsNull()) return 1;
- if ( n < 5) return 1;
- TopoDS_Shape Profile = DBRep::Get(a[3],TopAbs_EDGE);
- if ( Profile.IsNull()) return 1;
- Standard_Real aSpFirst,aSpLast,aPrFirst,aPrLast;
- Handle(Geom_Curve) SpineCurve = BRep_Tool::Curve(TopoDS::Edge(Spine),aSpFirst,aSpLast);
- Handle(Geom_Curve) ProfileCurve = BRep_Tool::Curve(TopoDS::Edge(Profile),aPrFirst,aPrLast);
- Handle(GeomAdaptor_HCurve) aAdaptCurve = new GeomAdaptor_HCurve(SpineCurve,aSpFirst,aSpLast);
+ TopoDS_Shape Spine = DBRep::Get(a[2], TopAbs_EDGE);
+ if (Spine.IsNull()) return 1;
+ if (n < 5) return 1;
+ TopoDS_Shape Profile = DBRep::Get(a[3], TopAbs_EDGE);
+ if (Profile.IsNull()) return 1;
+ Standard_Real aSpFirst, aSpLast, aPrFirst, aPrLast;
+ Handle(Geom_Curve) SpineCurve = BRep_Tool::Curve(TopoDS::Edge(Spine), aSpFirst, aSpLast);
+ Handle(Geom_Curve) ProfileCurve = BRep_Tool::Curve(TopoDS::Edge(Profile), aPrFirst, aPrLast);
+ Handle(GeomAdaptor_HCurve) aAdaptCurve = new GeomAdaptor_HCurve(SpineCurve, aSpFirst, aSpLast);
Standard_Boolean ByACR = Standard_False;
Standard_Boolean rotate = Standard_False;
Standard_Real Radius = Draw::Atof(a[4]);
gp_Pnt ctr;
gp_Vec norm;
- ProfileCurve->D1(aSpFirst,ctr,norm);
- gp_Vec xAxisStart(ctr,SpineCurve->Value(aSpFirst));
- gp_Ax2 aAx2Start(ctr,norm,xAxisStart);
- Handle(Geom_Circle) cStart=new Geom_Circle(aAx2Start,Radius);
- Standard_Integer k =5;
- if(n > k)
- ByACR = (Draw::Atoi(a[k++]) ==1);
- if(n > k)
- rotate = (Draw::Atoi(a[k++])==1);
- GeomFill_Pipe aPipe(ProfileCurve,aAdaptCurve,cStart,ByACR,rotate);
+ ProfileCurve->D1(aSpFirst, ctr, norm);
+ gp_Vec xAxisStart(ctr, SpineCurve->Value(aSpFirst));
+ gp_Ax2 aAx2Start(ctr, norm, xAxisStart);
+ Handle(Geom_Circle) cStart = new Geom_Circle(aAx2Start, Radius);
+ Standard_Integer k = 5;
+ if (n > k)
+ ByACR = (Draw::Atoi(a[k++]) == 1);
+ if (n > k)
+ rotate = (Draw::Atoi(a[k++]) == 1);
+ GeomFill_Pipe aPipe(ProfileCurve, aAdaptCurve, cStart, ByACR, rotate);
aPipe.Perform(Standard_True);
- Handle(Geom_Surface) Sur=aPipe.Surface();
+ if (!aPipe.IsDone())
+ {
+ cout << "GeomFill_Pipe cannot make a surface" << endl;
+ return 1;
+ }
+ Handle(Geom_Surface) Sur = aPipe.Surface();
TopoDS_Face F;
- if(!Sur.IsNull())
+ if (!Sur.IsNull())
F = BRepBuilderAPI_MakeFace(Sur, Precision::Confusion());
- DBRep::Set(a[1],F);
+ DBRep::Set(a[1], F);
return 0;
}
Standard_Integer evolved(Draw_Interpretor& di, Standard_Integer n, const char** a)
{
- if ( n == 1) {
+ if (n == 1) {
//cout << " 1) evolved result base profil : "<< endl;
//cout << " The relative position of the profil on the base" << endl;
//cout << " is given in the referencial axis. " << endl;
//cout << " 2) evolved result base profil o : "<< endl;
//cout << " This position is automatically computed." << endl;
- di << " 1) evolved result base profil : "<< "\n";
- di << " The relative position of the profil on the base" << "\n";
- di << " is given in the referencial axis. " << "\n";
- di << " 2) evolved result base profil o : "<< "\n";
- di << " This position is automatically computed." << "\n";
+ di << " 1) evolved result base profil : \n";
+ di << " The relative position of the profil on the base\n";
+ di << " is given in the referencial axis. \n";
+ di << " 2) evolved result base profil o : \n";
+ di << " This position is automatically computed.\n";
return 0;
}
- if ( n < 4 ) return 1;
+ if (n < 4) return 1;
Standard_Boolean IsAFace = Standard_False;
- Standard_Boolean Solid = (!strcmp(a[0],"evolvedsolid"));
+ Standard_Boolean Solid = (!strcmp(a[0], "evolvedsolid"));
+
-
- TopoDS_Shape Base = DBRep::Get(a[2],TopAbs_WIRE,Standard_False);
- if ( Base.IsNull()) {
- Base = DBRep::Get(a[2],TopAbs_FACE,Standard_False);
- IsAFace = Standard_True;
+ TopoDS_Shape Base = DBRep::Get(a[2], TopAbs_WIRE, Standard_False);
+ if (Base.IsNull()) {
+ Base = DBRep::Get(a[2], TopAbs_FACE, Standard_False);
+ IsAFace = Standard_True;
}
- if ( Base.IsNull()) return 1;
+ if (Base.IsNull()) return 1;
- TopoDS_Shape InpuTShape(DBRep::Get(a[3],TopAbs_WIRE,Standard_False));
+ TopoDS_Shape InpuTShape(DBRep::Get(a[3], TopAbs_WIRE, Standard_False));
TopoDS_Wire Prof = TopoDS::Wire(InpuTShape);
-// TopoDS_Wire Prof =
-// TopoDS::Wire(DBRep::Get(a[3],TopAbs_WIRE,Standard_False));
- if ( Prof.IsNull()) return 1;
+ // TopoDS_Wire Prof =
+ // TopoDS::Wire(DBRep::Get(a[3],TopAbs_WIRE,Standard_False));
+ if (Prof.IsNull()) return 1;
if (IsAFace) {
- TopoDS_Shape Volevo
- = BRepOffsetAPI_MakeEvolved(TopoDS::Face(Base),Prof,GeomAbs_Arc,n == 4,Solid);
- DBRep::Set(a[1],Volevo);
+ TopoDS_Shape Volevo
+ = BRepOffsetAPI_MakeEvolved(TopoDS::Face(Base), Prof, GeomAbs_Arc, n == 4, Solid);
+ DBRep::Set(a[1], Volevo);
}
else {
- TopoDS_Shape Volevo
- = BRepOffsetAPI_MakeEvolved(TopoDS::Wire(Base),Prof,GeomAbs_Arc,n == 4,Solid);
- DBRep::Set(a[1],Volevo);
+ TopoDS_Shape Volevo
+ = BRepOffsetAPI_MakeEvolved(TopoDS::Wire(Base), Prof, GeomAbs_Arc, n == 4, Solid);
+ DBRep::Set(a[1], Volevo);
}
return 0;
//purpose :
//=======================================================================
-static Standard_Integer pruled(Draw_Interpretor& ,
- Standard_Integer n, const char** a)
+static Standard_Integer pruled(Draw_Interpretor&,
+ Standard_Integer n, const char** a)
{
- if ( n != 4) return 1;
+ if (n != 4) return 1;
Standard_Boolean YaWIRE = Standard_False;
- TopoDS_Shape S1 = DBRep::Get(a[2],TopAbs_EDGE);
- if ( S1.IsNull()) {
- S1 = DBRep::Get(a[2],TopAbs_WIRE);
+ TopoDS_Shape S1 = DBRep::Get(a[2], TopAbs_EDGE);
+ if (S1.IsNull()) {
+ S1 = DBRep::Get(a[2], TopAbs_WIRE);
if (S1.IsNull()) return 1;
YaWIRE = Standard_True;
}
- TopoDS_Shape S2 = DBRep::Get(a[3],TopAbs_EDGE);
- if ( S2.IsNull()) {
- S2 = DBRep::Get(a[3],TopAbs_WIRE);
- if ( S2.IsNull()) return 1;
+ TopoDS_Shape S2 = DBRep::Get(a[3], TopAbs_EDGE);
+ if (S2.IsNull()) {
+ S2 = DBRep::Get(a[3], TopAbs_WIRE);
+ if (S2.IsNull()) return 1;
if (!YaWIRE) {
S1 = BRepLib_MakeWire(TopoDS::Edge(S1));
YaWIRE = Standard_True;
}
}
- else if ( YaWIRE) {
+ else if (YaWIRE) {
S2 = BRepLib_MakeWire(TopoDS::Edge(S2));
}
TopoDS_Shape Result;
- if ( YaWIRE) {
- Result = BRepFill::Shell(TopoDS::Wire(S1),TopoDS::Wire(S2));
+ if (YaWIRE) {
+ Result = BRepFill::Shell(TopoDS::Wire(S1), TopoDS::Wire(S2));
}
else {
- Result = BRepFill::Face(TopoDS::Edge(S1),TopoDS::Edge(S2));
+ Result = BRepFill::Face(TopoDS::Edge(S1), TopoDS::Edge(S2));
}
- DBRep::Set(a[1],Result);
+ DBRep::Set(a[1], Result);
return 0;
}
Standard_Integer gener(Draw_Interpretor&, Standard_Integer n, const char** a)
{
- if ( n < 4) return 1;
+ if (n < 4) return 1;
+
+ TopoDS_Shape Shape;
- TopoDS_Shape Shape;
+ BRepFill_Generator aGenerator;
- BRepFill_Generator Generator;
-
- for ( Standard_Integer i = 2; i<= n-1 ; i++) {
- Shape = DBRep::Get(a[i],TopAbs_WIRE);
- if ( Shape.IsNull())
+ for (Standard_Integer i = 2; i <= n - 1; i++) {
+ Shape = DBRep::Get(a[i], TopAbs_WIRE);
+ if (Shape.IsNull())
return 1;
- Generator.AddWire(TopoDS::Wire(Shape));
+ aGenerator.AddWire(TopoDS::Wire(Shape));
}
- Generator.Perform();
+ aGenerator.Perform();
+
+ TopoDS_Shell Shell = aGenerator.Shell();
- TopoDS_Shell Shell = Generator.Shell();
-
DBRep::Set(a[1], Shell);
Standard_Integer thrusections(Draw_Interpretor&, Standard_Integer n, const char** a)
{
- if (n<6) return 1;
+ if (n < 6) return 1;
Standard_Boolean check = Standard_True;
Standard_Boolean samenumber = Standard_True;
Standard_Integer index = 2;
- // Lecture option
- if (!strcmp(a[1],"-N")) {
- if (n<7) return 1;
+ // Lecture option
+ if (!strcmp(a[1], "-N")) {
+ if (n < 7) return 1;
check = Standard_False;
index++;
}
- TopoDS_Shape Shape;
+ TopoDS_Shape Shape;
- Standard_Boolean issolid = ( Draw::Atoi(a[index]) == 1 );
- Standard_Boolean isruled = ( Draw::Atoi(a[index+1]) == 1 );
+ Standard_Boolean issolid = (Draw::Atoi(a[index]) == 1);
+ Standard_Boolean isruled = (Draw::Atoi(a[index + 1]) == 1);
+
+ if (Generator != 0)
+ {
+ delete Generator;
+ Generator = 0;
+ }
+ Generator = new BRepOffsetAPI_ThruSections(issolid, isruled);
- BRepOffsetAPI_ThruSections Generator(issolid,isruled);
-
Standard_Integer NbEdges = 0;
Standard_Boolean IsFirstWire = Standard_False;
- for ( Standard_Integer i = index+2; i<= n-1 ; i++) {
+ for (Standard_Integer i = index + 2; i <= n - 1; i++) {
Standard_Boolean IsWire = Standard_True;
Shape = DBRep::Get(a[i], TopAbs_WIRE);
if (!Shape.IsNull())
- {
- Generator.AddWire(TopoDS::Wire(Shape));
- if (!IsFirstWire)
- IsFirstWire = Standard_True;
- else
- IsFirstWire = Standard_False;
- }
+ {
+ Generator->AddWire(TopoDS::Wire(Shape));
+ if (!IsFirstWire)
+ IsFirstWire = Standard_True;
+ else
+ IsFirstWire = Standard_False;
+ }
else
- {
- Shape = DBRep::Get(a[i], TopAbs_VERTEX);
- IsWire = Standard_False;
- if (!Shape.IsNull())
- Generator.AddVertex(TopoDS::Vertex(Shape));
- else
- return 1;
- }
+ {
+ Shape = DBRep::Get(a[i], TopAbs_VERTEX);
+ IsWire = Standard_False;
+ if (!Shape.IsNull())
+ Generator->AddVertex(TopoDS::Vertex(Shape));
+ else
+ return 1;
+ }
Standard_Integer cpt = 0;
TopExp_Explorer PE;
for (PE.Init(Shape, TopAbs_EDGE); PE.More(); PE.Next()) {
cpt++;
}
- if (IsFirstWire)
+ if (IsFirstWire)
NbEdges = cpt;
else
if (IsWire && cpt != NbEdges)
- samenumber = Standard_False;
-
+ samenumber = Standard_False;
+
}
check = (check || !samenumber);
- Generator.CheckCompatibility(check);
+ Generator->CheckCompatibility(check);
- Generator.Build();
+ Generator->Build();
- TopoDS_Shape Shell = Generator.Shape();
-
- DBRep::Set(a[index-1], Shell);
+ if (Generator->IsDone()) {
+ TopoDS_Shape Shell = Generator->Shape();
+ DBRep::Set(a[index - 1], Shell);
+ // Save history of the lofting
+ if (BRepTest_Objects::IsHistoryNeeded())
+ BRepTest_Objects::SetHistory(Generator->Wires(), *Generator);
+ }
+ else {
+ cout << "Algorithm is not done" << endl;
+ }
return 0;
}
//=======================================================================
// mksweep
//=======================================================================
-static Standard_Integer mksweep(Draw_Interpretor& ,
- Standard_Integer n, const char** a)
+static Standard_Integer mksweep(Draw_Interpretor&,
+ Standard_Integer n, const char** a)
{
- if ( n != 2) return 1;
- TopoDS_Shape Spine = DBRep::Get(a[1],TopAbs_WIRE);
- if ( Spine.IsNull()) return 1;
- if (Sweep !=0) {
- delete Sweep;
+ if (n != 2) return 1;
+ TopoDS_Shape Spine = DBRep::Get(a[1], TopAbs_WIRE);
+ if (Spine.IsNull()) return 1;
+ if (Sweep != 0) {
+ delete Sweep;
Sweep = 0;
}
Sweep = new BRepOffsetAPI_MakePipeShell(TopoDS::Wire(Spine));
// setsweep
//=======================================================================
static Standard_Integer setsweep(Draw_Interpretor& di,
- Standard_Integer n, const char** a)
+ Standard_Integer n, const char** a)
{
- if ( n == 1) {
+ if (n == 1) {
//cout << "setsweep options [arg1 [arg2 [...]]] : options are :" << endl;
//cout << " -FR : Tangent and Normal are given by Frenet trihedron" <<endl;
//cout << " -CF : Tangente is given by Frenet," << endl;
//cout << " -CN dx dy dz : BiNormal is given by dx dy dz" << endl;
//cout << " -FX Tx Ty TZ [Nx Ny Nz] : Tangent and Normal are fixed" <<endl;
//cout << " -G guide 0|1(ACR|Plan) 0|1(contact|no contact) : with guide"<<endl;
- di << "setsweep options [arg1 [arg2 [...]]] : options are :" << "\n";
- di << " -FR : Tangent and Normal are given by Frenet trihedron" <<"\n";
- di << " -CF : Tangente is given by Frenet," << "\n";
- di << " the Normal is computed to minimize the torsion " << "\n";
- di << " -DT : discrete trihedron" << "\n";
- di << " -DX Surf : Tangent and Normal are given by Darboux trihedron," <<"\n";
- di << " Surf have to be a shell or a face" <<"\n";
- di << " -CN dx dy dz : BiNormal is given by dx dy dz" << "\n";
- di << " -FX Tx Ty TZ [Nx Ny Nz] : Tangent and Normal are fixed" <<"\n";
- di << " -G guide 0|1(ACR|Plan) 0|1(contact|no contact) : with guide"<<"\n";
+ di << "setsweep options [arg1 [arg2 [...]]] : options are :\n";
+ di << " -FR : Tangent and Normal are given by Frenet trihedron\n";
+ di << " -CF : Tangente is given by Frenet,\n";
+ di << " the Normal is computed to minimize the torsion \n";
+ di << " -DT : discrete trihedron\n";
+ di << " -DX Surf : Tangent and Normal are given by Darboux trihedron,\n";
+ di << " Surf have to be a shell or a face\n";
+ di << " -CN dx dy dz : BiNormal is given by dx dy dz\n";
+ di << " -FX Tx Ty TZ [Nx Ny Nz] : Tangent and Normal are fixed\n";
+ di << " -G guide 0|1(Plan|ACR) 0|1|2(no contact|contact|contact on border) : with guide\n";
return 0;
}
- if (Sweep ==0) {
- //cout << "You have forgotten the <<mksweep>> command !"<< endl;
- di << "You have forgotten the <<mksweep>> command !"<< "\n";
- return 1;
- }
- if (!strcmp(a[1],"-FR")) {
+ if (Sweep == 0) {
+ //cout << "You have forgotten the <<mksweep>> command !"<< endl;
+ di << "You have forgotten the <<mksweep>> command !\n";
+ return 1;
+ }
+ if (!strcmp(a[1], "-FR")) {
Sweep->SetMode(Standard_True);
}
- else if (!strcmp(a[1],"-CF")) {
+ else if (!strcmp(a[1], "-CF")) {
Sweep->SetMode(Standard_False);
}
- else if (!strcmp(a[1],"-DT")) {
+ else if (!strcmp(a[1], "-DT")) {
Sweep->SetDiscreteMode();
}
- else if (!strcmp(a[1],"-DX")) {
- if (n!=3) {
+ else if (!strcmp(a[1], "-DX")) {
+ if (n != 3) {
//cout << "bad arguments !" << endl;
- di << "bad arguments !" << "\n";
+ di << "bad arguments !\n";
return 1;
}
TopoDS_Shape Surf;
- Surf = DBRep::Get(a[2],TopAbs_SHAPE);
+ Surf = DBRep::Get(a[2], TopAbs_SHAPE);
if (Surf.IsNull()) {
- //cout << a[2] <<"is not a shape !" << endl;
- di << a[2] <<"is not a shape !" << "\n";
+ //cout << a[2] <<"is not a shape !" << endl;
+ di << a[2] << "is not a shape !\n";
return 1;
}
Sweep->SetMode(Surf);
}
- else if (!strcmp(a[1],"-CN")) {
- if (n!=5) {
+ else if (!strcmp(a[1], "-CN")) {
+ if (n != 5) {
//cout << "bad arguments !" << endl;
- di << "bad arguments !" << "\n";
+ di << "bad arguments !\n";
return 1;
}
gp_Dir D(Draw::Atof(a[2]), Draw::Atof(a[3]), Draw::Atof(a[4]));
Sweep->SetMode(D);;
}
- else if (!strcmp(a[1],"-FX")) {
- if ((n!=5)&&(n!=8)) {
+ else if (!strcmp(a[1], "-FX")) {
+ if ((n != 5) && (n != 8)) {
//cout << "bad arguments !" << endl;
- di << "bad arguments !" << "\n";
+ di << "bad arguments !\n";
return 1;
}
gp_Dir D(Draw::Atof(a[2]), Draw::Atof(a[3]), Draw::Atof(a[4]));
- if (n==8) {
+ if (n == 8) {
gp_Dir DN(Draw::Atof(a[5]), Draw::Atof(a[6]), Draw::Atof(a[7]));
gp_Ax2 Axe(gp_Pnt(0., 0., 0.), D, DN);
Sweep->SetMode(Axe);
Sweep->SetMode(Axe);
}
}
- else if (!strcmp(a[1],"-G")) // contour guide
+ else if (!strcmp(a[1], "-G")) // contour guide
+ {
+ if (n != 5)
+ {
+ //cout << "bad arguments !" << endl;
+ di << "bad arguments !\n";
+ return 1;
+ }
+ else
{
- if (n != 5)
- {
- //cout << "bad arguments !" << endl;
- di << "bad arguments !" << "\n";
- return 1;
- }
- else
- {
- TopoDS_Shape Guide = DBRep::Get(a[2],TopAbs_WIRE);
- Sweep->SetMode(TopoDS::Wire(Guide), Draw::Atoi(a[3]), Draw::Atoi(a[4]));
- }
+ TopoDS_Shape Guide = DBRep::Get(a[2], TopAbs_WIRE);
+ Standard_Boolean CurvilinearEquivalence = Draw::Atoi(a[3]) != 0;
+ Standard_Integer KeepContact = Draw::Atoi(a[4]);
+ Sweep->SetMode(TopoDS::Wire(Guide),
+ CurvilinearEquivalence,
+ (BRepFill_TypeOfContact)KeepContact);
}
-
+ }
+
else {
//cout << "The option "<< a[1] << " is unknown !" << endl;
- di << "The option "<< a[1] << " is unknown !" << "\n";
+ di << "The option " << a[1] << " is unknown !\n";
return 1;
}
return 0;
// addsweep
//=======================================================================
static Standard_Integer addsweep(Draw_Interpretor& di,
- Standard_Integer n, const char** a)
+ Standard_Integer n, const char** a)
{
- if ( n == 1) {
+ if (n == 1) {
//cout << "addsweep wire/vertex [Vertex] [-T] [-R] [u0 v0 u1 v1 [...[uN vN]]] : options are :" << endl;
//cout << " -T : the wire/vertex have to be translated to assume contact"<< endl;
//cout << " with the spine" <<endl;
//cout << " -R : the wire have to be rotated to assume orthogonality"<<endl;
//cout << " with the spine's tangent" << endl;
- di << "addsweep wire/vertex [Vertex] [-T] [-R] [u0 v0 u1 v1 [...[uN vN]]] : options are :" << "\n";
- di << " -T : the wire/vertex have to be translated to assume contact"<< "\n";
- di << " with the spine" <<"\n";
- di << " -R : the wire have to be rotated to assume orthogonality"<<"\n";
- di << " with the spine's tangent" << "\n";
+ di << "addsweep wire/vertex [Vertex] [-T] [-R] [u0 v0 u1 v1 [...[uN vN]]] : options are :\n";
+ di << " -T : the wire/vertex have to be translated to assume contact\n";
+ di << " with the spine\n";
+ di << " -R : the wire have to be rotated to assume orthogonality\n";
+ di << " with the spine's tangent\n";
return 0;
}
- if (Sweep ==0) {
+ if (Sweep == 0) {
//cout << "You have forgotten the <<mksweep>> command !"<< endl;
- di << "You have forgotten the <<mksweep>> command !"<< "\n";
+ di << "You have forgotten the <<mksweep>> command !\n";
return 1;
}
Handle(Law_Interpol) thelaw;
Section = DBRep::Get(a[1], TopAbs_SHAPE);
- if (Section.ShapeType() != TopAbs_WIRE &&
- Section.ShapeType() != TopAbs_VERTEX)
- {
- //cout << a[1] <<"is not a wire and is not a vertex!" << endl;
- di << a[1] <<"is not a wire and is not a vertex!" << "\n";
- return 1;
- }
+ if (Section.IsNull() ||
+ (Section.ShapeType() != TopAbs_WIRE &&
+ Section.ShapeType() != TopAbs_VERTEX))
+ {
+ //cout << a[1] <<"is not a wire and is not a vertex!" << endl;
+ di << a[1] << " is not a wire and is not a vertex!\n";
+ return 1;
+ }
- Standard_Boolean HasVertex=Standard_False,
- isT=Standard_False,
- isR=Standard_False;
+ Standard_Boolean HasVertex = Standard_False,
+ isT = Standard_False,
+ isR = Standard_False;
- if (n > 2) {
+ if (n > 2) {
Standard_Integer cur = 2;
// Reading of Vertex
- TopoDS_Shape InputVertex(DBRep::Get(a[cur],TopAbs_VERTEX));
+ TopoDS_Shape InputVertex(DBRep::Get(a[cur], TopAbs_VERTEX));
Vertex = TopoDS::Vertex(InputVertex);
-// Vertex = TopoDS::Vertex(DBRep::Get(a[cur],TopAbs_VERTEX));
+ // Vertex = TopoDS::Vertex(DBRep::Get(a[cur],TopAbs_VERTEX));
if (!Vertex.IsNull()) {
cur++;
HasVertex = Standard_True;
}
-
+
// Reading of the translation option
- if ((n>cur) && !strcmp(a[cur],"-T")) {
+ if ((n > cur) && !strcmp(a[cur], "-T")) {
cur++;
isT = Standard_True;
}
// Reading of the rotation option
- if ((n>cur) && !strcmp(a[cur],"-R")) {
+ if ((n > cur) && !strcmp(a[cur], "-R")) {
cur++;
isR = Standard_True;
}
// law ?
- if (n>cur) {
- Standard_Integer nbreal = n-cur;
- if ( (nbreal < 4) || (nbreal % 2 != 0) ) {
- //cout << "bad arguments ! :" <<a[cur] << endl;
- di << "bad arguments ! :" <<a[cur] << "\n";
- } else { //law of interpolation
- Standard_Integer ii, L= nbreal/2;
- TColgp_Array1OfPnt2d ParAndRad(1, L);
- for (ii=1; ii<=L; ii++, cur+=2) {
- ParAndRad(ii).SetX(Draw::Atof(a[cur]));
- ParAndRad(ii).SetY(Draw::Atof(a[cur+1]));
- }
- thelaw = new (Law_Interpol) ();
- thelaw->Set(ParAndRad,
- Abs(ParAndRad(1).Y() - ParAndRad(L).Y()) < Precision::Confusion());
+ if (n > cur) {
+ Standard_Integer nbreal = n - cur;
+ if ((nbreal < 4) || (nbreal % 2 != 0)) {
+ //cout << "bad arguments ! :" <<a[cur] << endl;
+ di << "bad arguments ! :" << a[cur] << "\n";
+ }
+ else { //law of interpolation
+ Standard_Integer ii, L = nbreal / 2;
+ TColgp_Array1OfPnt2d ParAndRad(1, L);
+ for (ii = 1; ii <= L; ii++, cur += 2) {
+ ParAndRad(ii).SetX(Draw::Atof(a[cur]));
+ ParAndRad(ii).SetY(Draw::Atof(a[cur + 1]));
+ }
+ thelaw = new (Law_Interpol)();
+ thelaw->Set(ParAndRad,
+ Abs(ParAndRad(1).Y() - ParAndRad(L).Y()) < Precision::Confusion());
}
}
}
// deletesweep
//=======================================================================
static Standard_Integer deletesweep(Draw_Interpretor& di,
- Standard_Integer n, const char** a)
+ Standard_Integer n, const char** a)
{
- if ( n != 2) {
+ if (n != 2) {
return 1;
}
TopoDS_Wire Section;
- TopoDS_Shape InputShape(DBRep::Get(a[1],TopAbs_SHAPE));
+ TopoDS_Shape InputShape(DBRep::Get(a[1], TopAbs_SHAPE));
Section = TopoDS::Wire(InputShape);
-// Section = TopoDS::Wire(DBRep::Get(a[1],TopAbs_SHAPE));
+ // Section = TopoDS::Wire(DBRep::Get(a[1],TopAbs_SHAPE));
if (Section.IsNull()) {
//cout << a[1] <<"is not a wire !" << endl;
- di << a[1] <<"is not a wire !" << "\n";
+ di << a[1] << "is not a wire !\n";
return 1;
- }
+ }
Sweep->Delete(Section);
// buildsweep
//=======================================================================
static Standard_Integer buildsweep(Draw_Interpretor& di,
- Standard_Integer n, const char** a)
+ Standard_Integer n, const char** a)
{
- if ( n == 1) {
+ if (n == 1) {
//cout << "build sweep result [-M/-C/-R] [-S] [tol] : options are" << endl;
//cout << " -M : Discontinuities are treated by Modfication of"<< endl;
//cout << " the sweeping mode : it is the default" <<endl;
//cout << " -R : Discontinuities are treated like Round Corner" << endl;
//cout << " Treatement is Intersect and Fill" << endl;
//cout << " -S : To build a Solid" << endl;
- di << "build sweep result [-M/-C/-R] [-S] [tol] : options are" << "\n";
- di << " -M : Discontinuities are treated by Modfication of"<< "\n";
- di << " the sweeping mode : it is the default" <<"\n";
- di << " -C : Discontinuities are treated like Right Corner" << "\n";
- di << " Treatement is Extent && Intersect" << "\n";
- di << " -R : Discontinuities are treated like Round Corner" << "\n";
- di << " Treatement is Intersect and Fill" << "\n";
- di << " -S : To build a Solid" << "\n";
+ di << "build sweep result [-M/-C/-R] [-S] [tol] : options are\n";
+ di << " -M : Discontinuities are treated by Modfication of\n";
+ di << " the sweeping mode : it is the default\n";
+ di << " -C : Discontinuities are treated like Right Corner\n";
+ di << " Treatement is Extent && Intersect\n";
+ di << " -R : Discontinuities are treated like Round Corner\n";
+ di << " Treatement is Intersect and Fill\n";
+ di << " -S : To build a Solid\n";
return 0;
}
Standard_Boolean mksolid = Standard_False;
- if (Sweep ==0) {
+ if (Sweep == 0) {
//cout << "You have forgotten the <<mksweep>> command !"<< endl;
- di << "You have forgotten the <<mksweep>> command !"<< "\n";
+ di << "You have forgotten the <<mksweep>> command !\n";
return 1;
}
if (!Sweep->IsReady()) {
//cout << "You have forgotten the <<addsweep>> command !"<< endl;
- di << "You have forgotten the <<addsweep>> command !"<< "\n";
+ di << "You have forgotten the <<addsweep>> command !\n";
return 1;
}
TopoDS_Shape result;
- Standard_Integer cur=2;
- if (n>cur) {
+ Standard_Integer cur = 2;
+ if (n > cur) {
BRepBuilderAPI_TransitionMode Transition = BRepBuilderAPI_Transformed;
// Reading Transition
- if (!strcmp(a[cur],"-C")) {
+ if (!strcmp(a[cur], "-C")) {
Transition = BRepBuilderAPI_RightCorner;
cur++;
}
- else if (!strcmp(a[cur],"-R")) {
+ else if (!strcmp(a[cur], "-R")) {
Transition = BRepBuilderAPI_RoundCorner;
cur++;
}
Sweep->SetTransitionMode(Transition);
}
// Reading solid ?
- if ((n>cur) && (!strcmp(a[cur],"-S")) ) mksolid = Standard_True;
+ if ((n > cur) && (!strcmp(a[cur], "-S"))) mksolid = Standard_True;
// Calcul le resultat
Sweep->Build();
if (!Sweep->IsDone()) {
//cout << "Buildsweep : Not Done" << endl;
- di << "Buildsweep : Not Done" << "\n";
- BRepBuilderAPI_PipeError Stat = Sweep->GetStatus();
+ di << "Buildsweep : Not Done\n";
+ BRepBuilderAPI_PipeError Stat = Sweep->GetStatus();
if (Stat == BRepBuilderAPI_PlaneNotIntersectGuide) {
//cout << "Buildsweep : One Plane not intersect the guide" << endl;
- di << "Buildsweep : One Plane not intersect the guide" << "\n";
+ di << "Buildsweep : One Plane not intersect the guide\n";
}
if (Stat == BRepBuilderAPI_ImpossibleContact) {
//cout << "BuildSweep : One section can not be in contact with the guide" << endl;
- di << "BuildSweep : One section can not be in contact with the guide" << "\n";
+ di << "BuildSweep : One section can not be in contact with the guide\n";
}
- return 1;
}
else {
if (mksolid) {
Standard_Boolean B;
B = Sweep->MakeSolid();
//if (!B) cout << " BuildSweep : It is impossible to make a solid !" << endl;
- if (!B) di << " BuildSweep : It is impossible to make a solid !" << "\n";
+ if (!B) di << " BuildSweep : It is impossible to make a solid !\n";
}
result = Sweep->Shape();
- DBRep::Set(a[1],result);
+ DBRep::Set(a[1], result);
+ // Save history of sweep
+ if (BRepTest_Objects::IsHistoryNeeded())
+ {
+ TopTools_ListOfShape aList;
+ Sweep->Profiles(aList);
+ TopoDS_Shape aSpine = Sweep->Spine();
+ aList.Append(aSpine);
+ BRepTest_Objects::SetHistory(aList, *Sweep);
+ }
}
return 0;
}
+//=======================================================================
+//function : errorsweep
+//purpose : returns the summary error on resulting surfaces
+// reached by Sweep
+//=======================================================================
+static Standard_Integer errorsweep(Draw_Interpretor& di,
+ Standard_Integer, const char**)
+{
+ if (!Sweep->IsDone())
+ {
+ di << "Sweep is not done\n";
+ return 1;
+ }
+ Standard_Real ErrorOnSurfaces = Sweep->ErrorOnSurface();
+ di << "Tolerance on surfaces = " << ErrorOnSurfaces << "\n";
+ return 0;
+}
+
//=======================================================================
// simulsweep
//=======================================================================
static Standard_Integer simulsweep(Draw_Interpretor& di,
- Standard_Integer n, const char** a)
+ Standard_Integer n, const char** a)
{
- if ( (n!=3) && (n!=4) ) return 1;
-
- if (Sweep ==0) {
+ if ((n != 3) && (n != 4)) return 1;
+
+ if (Sweep == 0) {
//cout << "You have forgotten the <<mksweep>> command !"<< endl;
- di << "You have forgotten the <<mksweep>> command !"<< "\n";
+ di << "You have forgotten the <<mksweep>> command !\n";
return 1;
}
-
+
if (!Sweep->IsReady()) {
//cout << "You have forgotten the <<addsweep>> command !"<< endl;
- di << "You have forgotten the <<addsweep>> command !"<< "\n";
+ di << "You have forgotten the <<addsweep>> command !\n";
return 1;
}
-
+
char name[100];
TopTools_ListOfShape List;
TopTools_ListIteratorOfListOfShape it;
Standard_Integer N, ii;
N = Draw::Atoi(a[2]);
- if (n>3) {
+ if (n > 3) {
BRepBuilderAPI_TransitionMode Transition = BRepBuilderAPI_Transformed;
// Lecture Transition
- if (!strcmp(a[3],"-C")) {
+ if (!strcmp(a[3], "-C")) {
Transition = BRepBuilderAPI_RightCorner;
}
- else if (!strcmp(a[3],"-R")) {
+ else if (!strcmp(a[3], "-R")) {
Transition = BRepBuilderAPI_RoundCorner;
}
Sweep->SetTransitionMode(Transition);
// Calculate the result
Sweep->Simulate(N, List);
- for (ii=1, it.Initialize(List); it.More(); it.Next(), ii++) {
- Sprintf(name,"%s_%d",a[1],ii);
+ for (ii = 1, it.Initialize(List); it.More(); it.Next(), ii++) {
+ Sprintf(name, "%s_%d", a[1], ii);
DBRep::Set(name, it.Value());
}
//=======================================================================
// middlepath
//=======================================================================
-static Standard_Integer middlepath(Draw_Interpretor& di,
- Standard_Integer n, const char** a)
+static Standard_Integer middlepath(Draw_Interpretor& /*di*/,
+ Standard_Integer n, const char** a)
{
if (n < 5) return 1;
TopoDS_Shape StartShape = DBRep::Get(a[3]);
if (StartShape.IsNull()) return 1;
-
- TopoDS_Shape EndShape = DBRep::Get(a[4]);
+
+ TopoDS_Shape EndShape = DBRep::Get(a[4]);
if (EndShape.IsNull()) return 1;
BRepOffsetAPI_MiddlePath Builder(aShape, StartShape, EndShape);
DBRep::BasicCommands(theCommands);
const char* g = "Sweep commands";
-
+
theCommands.Add("prism",
- "prism result base dx dy dz [Copy | Inf | Seminf]",
- __FILE__,prism,g);
-
+ "prism result base dx dy dz [Copy | Inf | Seminf]",
+ __FILE__, prism, g);
+
theCommands.Add("revol",
- "revol result base px py pz dx dy dz angle [Copy]",
- __FILE__,revol,g);
-
+ "revol result base px py pz dx dy dz angle [Copy]",
+ __FILE__, revol, g);
+
theCommands.Add("pipe",
- "pipe result Wire_spine Profile [Mode [Approx]], no args to get help",
- __FILE__,pipe,g);
-
+ "pipe result Wire_spine Profile [Mode [Approx]], no args to get help",
+ __FILE__, pipe, g);
+
theCommands.Add("evolved",
- "evolved , no args to get help",
- __FILE__,evolved,g);
+ "evolved , no args to get help",
+ __FILE__, evolved, g);
theCommands.Add("evolvedsolid",
- "evolved , no args to get help",
- __FILE__,evolved,g);
-
+ "evolved , no args to get help",
+ __FILE__, evolved, g);
+
theCommands.Add("pruled",
- "pruled result Edge1/Wire1 Edge2/Wire2",
- __FILE__,pruled,g);
+ "pruled result Edge1/Wire1 Edge2/Wire2",
+ __FILE__, pruled, g);
theCommands.Add("gener", "gener result wire1 wire2 [..wire..]",
- __FILE__,gener,g);
+ __FILE__, gener, g);
theCommands.Add("thrusections", "thrusections [-N] result issolid isruled shape1 shape2 [..shape..], the option -N means no check on wires, shapes must be wires or vertices (only first or last)",
- __FILE__,thrusections,g);
+ __FILE__, thrusections, g);
-
theCommands.Add("mksweep", "mksweep wire",
- __FILE__,mksweep,g);
+ __FILE__, mksweep, g);
theCommands.Add("setsweep", "setsweep no args to get help",
- __FILE__,setsweep,g);
-
- theCommands.Add("addsweep",
- "addsweep wire [vertex] [-M ] [-C] [auxiilaryshape]:no args to get help",
- __FILE__,addsweep,g);
+ __FILE__, setsweep, g);
+
+ theCommands.Add("addsweep",
+ "addsweep wire [vertex] [-M ] [-C] [auxiilaryshape]:no args to get help",
+ __FILE__, addsweep, g);
- theCommands.Add("deletesweep",
- "deletesweep wire, To delete a section",
- __FILE__,deletesweep,g);
+ theCommands.Add("deletesweep",
+ "deletesweep wire, To delete a section",
+ __FILE__, deletesweep, g);
- theCommands.Add("buildsweep", "builsweep [r] [option] [Tol] , no args to get help"
- __FILE__,buildsweep,g);
+ theCommands.Add("buildsweep", "builsweep [r] [option] [Tol] , no args to get help",
+ __FILE__, buildsweep, g);
+
+ theCommands.Add("errorsweep", "errorsweep: returns the summary error on resulting surfaces reached by Sweep",
+ __FILE__, errorsweep, g);
theCommands.Add("simulsweep", "simulsweep r [n] [option]"
- __FILE__,simulsweep,g);
+ __FILE__, simulsweep, g);
theCommands.Add("geompipe", "geompipe r spineedge profileedge radius [byACR [byrotate]]"
- __FILE__,geompipe,g);
-
+ __FILE__, geompipe, g);
+
theCommands.Add("middlepath", "middlepath res shape startshape endshape",
- __FILE__,middlepath,g);
+ __FILE__, middlepath, g);
}