mirror of
https://github.com/Open-Cascade-SAS/OCCT.git
synced 2026-05-18 07:57:31 +08:00
1594 lines
53 KiB
C++
Executable File
1594 lines
53 KiB
C++
Executable File
// File: Viewer2dTest_ObjectsCommands.cxx
|
|
|
|
//===============================================
|
|
//
|
|
// AIS2D Objects Creation : Datums (axis,trihedrons,lines,planes)
|
|
//
|
|
//===============================================
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
# include <config.h>
|
|
#endif
|
|
|
|
#include <Viewer2dTest.hxx>
|
|
|
|
#include <string.h>
|
|
|
|
#include <Quantity_NameOfColor.hxx>
|
|
|
|
#include <Draw_Interpretor.hxx>
|
|
#include <Draw.hxx>
|
|
#include <Draw_Appli.hxx>
|
|
#include <DBRep.hxx>
|
|
|
|
#include <TCollection_AsciiString.hxx>
|
|
#include <TCollection_ExtendedString.hxx>
|
|
#include <TColStd_MapOfInteger.hxx>
|
|
|
|
#include <V2d_Viewer.hxx>
|
|
#include <V2d_View.hxx>
|
|
#include <V2d.hxx>
|
|
|
|
#include <Viewer2dTest_DoubleMapOfInteractiveAndName.hxx>
|
|
#include <Viewer2dTest_DoubleMapIteratorOfDoubleMapOfInteractiveAndName.hxx>
|
|
#include <Viewer2dTest_EventManager.hxx>
|
|
|
|
#include <BRepTools.hxx>
|
|
#include <BRep_Tool.hxx>
|
|
#include <BRep_Builder.hxx>
|
|
#include <BRepAdaptor_Curve.hxx>
|
|
#include <BRepAdaptor_Surface.hxx>
|
|
|
|
#include <TopoDS.hxx>
|
|
#include <TopoDS_Solid.hxx>
|
|
#include <TopoDS_Vertex.hxx>
|
|
#include <TopoDS_Shape.hxx>
|
|
#include <TopoDS_Face.hxx>
|
|
#include <TopoDS_Edge.hxx>
|
|
|
|
#include <TopAbs.hxx>
|
|
#include <TopAbs_ShapeEnum.hxx>
|
|
#include <TopExp.hxx>
|
|
#include <TopExp_Explorer.hxx>
|
|
|
|
#include <Draw_Window.hxx>
|
|
|
|
#include <AIS2D_ProjShape.hxx>
|
|
#include <AIS2D_InteractiveContext.hxx>
|
|
|
|
#include <Graphic2d_InfiniteLine.hxx>
|
|
#include <Graphic2d_Circle.hxx>
|
|
|
|
#include <Geom2d_Line.hxx>
|
|
#include <Geom2d_CartesianPoint.hxx>
|
|
|
|
#include <Geom_Line.hxx>
|
|
#include <Geom_Plane.hxx>
|
|
#include <Geom_Axis2Placement.hxx>
|
|
#include <Geom_Axis1Placement.hxx>
|
|
#include <Geom_CartesianPoint.hxx>
|
|
|
|
#include <gp_Pln.hxx>
|
|
#include <gp_Circ.hxx>
|
|
|
|
#include <GC_MakePlane.hxx>
|
|
|
|
extern Viewer2dTest_DoubleMapOfInteractiveAndName& GetMapOfAIS2D();
|
|
Standard_IMPORT int ViewerMainLoop2d (Standard_Integer argc, const char** argv);
|
|
extern Handle(AIS2D_InteractiveContext)& TheAIS2DContext();
|
|
|
|
//==============================================================================
|
|
//function : SelectShape2d
|
|
//purpose :
|
|
//==============================================================================
|
|
TopoDS_Shape SelectShape2d (int theSelType)
|
|
{
|
|
TopoDS_Shape ShapeA;
|
|
|
|
// if (theSelType != 5)
|
|
// TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(theSelType));
|
|
|
|
switch (theSelType)
|
|
{
|
|
case 1:
|
|
cout << " Select a vertex ..." << endl;
|
|
break;
|
|
case 2:
|
|
cout << " Select an edge ..." << endl;
|
|
break;
|
|
case 4:
|
|
cout << " Select a face ..." << endl;
|
|
break;
|
|
case 5: // user defined text
|
|
break;
|
|
default:
|
|
cout << " Incorrect selection mode" << endl;
|
|
break;
|
|
}
|
|
|
|
Standard_Integer argcc = 5;
|
|
const char *buff[] = { "VPick", "X", "VPickY","VPickZ", "VPickShape" };
|
|
const char **argvv = (const char **) buff;
|
|
while (ViewerMainLoop2d(argcc, argvv)) {}
|
|
|
|
/* for (TheAIS2DContext()->InitSelected();
|
|
TheAIS2DContext()->MoreSelected();
|
|
TheAIS2DContext()->NextSelected())
|
|
{
|
|
ShapeA = TheAIS2DContext()->SelectedShape();
|
|
}*/
|
|
|
|
// if (theSelType != 5)
|
|
// TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(theSelType));
|
|
|
|
return ShapeA;
|
|
}
|
|
#if 0
|
|
//==============================================================================
|
|
//function : V2dTrihedron2D
|
|
//purpose : Create a plane with a 2D trihedron from a faceselection
|
|
//Draw arg : v2dtri2d name
|
|
//==============================================================================
|
|
static int V2dTrihedron2D (Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
if (argc != 2)
|
|
{
|
|
cout << argv[0] << " wrong arguments number" << endl;
|
|
return 1;
|
|
}
|
|
|
|
// Declarations
|
|
Standard_Integer myCurrentIndex;
|
|
|
|
// Fermeture des contextes
|
|
TheAIS2DContext()->CloseAllContext();
|
|
|
|
// Ouverture d'un contexte local et recuperation de son index.
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
myCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
TopoDS_Shape ShapeB = SelectShape2d(4); // Face
|
|
TopoDS_Face FaceB = TopoDS::Face(ShapeB);
|
|
|
|
// Construction du Plane
|
|
// recuperation des edges des faces.
|
|
TopExp_Explorer FaceExpB (FaceB, TopAbs_EDGE);
|
|
|
|
TopoDS_Edge EdgeB = TopoDS::Edge(FaceExpB.Current());
|
|
|
|
// declarations
|
|
gp_Pnt A,B,C;
|
|
|
|
// si il y a plusieurs edges
|
|
if (FaceExpB.More())
|
|
{
|
|
FaceExpB.Next();
|
|
TopoDS_Edge EdgeC = TopoDS::Edge(FaceExpB.Current());
|
|
BRepAdaptor_Curve theCurveB (EdgeB);
|
|
BRepAdaptor_Curve theCurveC (EdgeC);
|
|
A = theCurveC.Value(0.1);
|
|
B = theCurveC.Value(0.9);
|
|
C = theCurveB.Value(0.5);
|
|
}
|
|
else
|
|
{
|
|
// FaceB a 1 unique edge courbe
|
|
BRepAdaptor_Curve theCurveB (EdgeB);
|
|
A = theCurveB.Value(0.1);
|
|
B = theCurveB.Value(0.9);
|
|
C = theCurveB.Value(0.5);
|
|
}
|
|
// Construction du Geom_Plane
|
|
GC_MakePlane MkPlane (A,B,C);
|
|
Handle(Geom_Plane) theGeomPlane = MkPlane.Value();
|
|
|
|
// Construction de l'AIS2D_PlaneTrihedron
|
|
// Handle(AIS2D_PlaneTrihedron) theAIS2DPlaneTri = new AIS2D_PlaneTrihedron(theGeomPlane);
|
|
|
|
// Fermeture du contexte local.
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// on le display & bind
|
|
// TheAIS2DContext()->Display(theAIS2DPlaneTri);
|
|
// GetMapOfAIS2D().Bind(theAIS2DPlaneTri, argv[1]);
|
|
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
//==============================================================================
|
|
//function : V2dTrihedron
|
|
//purpose : Create a trihedron. If no arguments are set, the default
|
|
// trihedron (Oxyz) is created.
|
|
//Draw arg : vtrihedron name [Xo] [Yo] [Zo] [Zu] [Zv] [Zw] [Xu] [Xv] [Xw]
|
|
//==============================================================================
|
|
/*static int V2dTrihedron (Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
// Verification des arguments
|
|
if (argc < 2 || argc > 11)
|
|
{
|
|
cout << argv[0] << " Syntaxe error" << endl;
|
|
return 1;
|
|
}
|
|
|
|
TCollection_AsciiString name = argv[1];
|
|
|
|
if (argc > 5 && argc != 11)
|
|
{
|
|
cout << argv[0] << " Syntaxe error" << endl;
|
|
return 1;
|
|
}
|
|
|
|
Standard_Real coord[9] = {0.,0.,0.,0.,0.,1.,1.,0.,0.};
|
|
if (argc > 2)
|
|
{
|
|
Standard_Integer i;
|
|
for (i = 0; i <= 2; i++)
|
|
coord[i] = atof(argv[2+i]);
|
|
|
|
if (argc > 5)
|
|
{
|
|
for (i = 0; i <= 2; i++)
|
|
{
|
|
coord[3+i] = atof(argv[6+i]);
|
|
coord[6+i] = atof(argv[8+i]);
|
|
}
|
|
}
|
|
}
|
|
gp_Pnt ThePoint (coord[0],coord[1],coord[2]);
|
|
gp_Dir TheZVector (coord[3],coord[4],coord[5]);
|
|
gp_Dir TheXVector (coord[6],coord[7],coord[8]);
|
|
|
|
if (!TheZVector.IsNormal(TheXVector,PI/180))
|
|
{
|
|
cout << argv[0] << " VectorX is not normal to VectorZ" << endl;
|
|
return 1;
|
|
}
|
|
|
|
Handle(Geom_Axis2Placement) OrigineAndAxii = new Geom_Axis2Placement(ThePoint,TheZVector,TheXVector);
|
|
|
|
// Creation du triedre
|
|
Handle(AIS2D_Trihedron) aShape = new AIS2D_Trihedron(OrigineAndAxii);
|
|
GetMapOfAIS2D().Bind(aShape,name);
|
|
TheAIS2DContext()->Display(aShape);
|
|
|
|
return 0;
|
|
}*/
|
|
#if 0
|
|
//==============================================================================
|
|
//function : V2dSize
|
|
//purpose : Change the size of a named or selected trihedron
|
|
// if no name : it affects the trihedrons witch are selected otherwise nothing is donne
|
|
// if no value, the value is set at 100 by default
|
|
//Draw arg : v2dsize [name] [size]
|
|
//==============================================================================
|
|
static int V2dSize (Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
Standard_Boolean ThereIsName;
|
|
Standard_Real value;
|
|
// Quantity_NameOfColor col = Quantity_NOC_BLACK;
|
|
|
|
if (argc > 3)
|
|
{
|
|
cout << argv[0] << " Syntaxe error" << endl;
|
|
return 1;
|
|
}
|
|
|
|
if (argc == 1)
|
|
{
|
|
ThereIsName = Standard_False;
|
|
value = 100;
|
|
}
|
|
else if (argc == 2)
|
|
{
|
|
ThereIsName = Standard_False;
|
|
value = atof(argv[1]);
|
|
}
|
|
else
|
|
{
|
|
ThereIsName = Standard_True;
|
|
value = atof(argv[2]);
|
|
}
|
|
|
|
if (TheAIS2DContext()->HasOpenedContext()) TheAIS2DContext()->CloseLocalContext();
|
|
|
|
if (!ThereIsName)
|
|
{
|
|
// if (TheAIS2DContext()->NbCurrents() <= 0) return -1;
|
|
Viewer2dTest_DoubleMapIteratorOfDoubleMapOfInteractiveAndName it (GetMapOfAIS2D());
|
|
|
|
while (it.More())
|
|
{
|
|
Handle(AIS2D_InteractiveObject) aShape = it.Key1();
|
|
|
|
if (TheAIS2DContext()->IsCurrent(aShape))
|
|
{
|
|
/* if (aShape->Type() == AIS2D_KOI_Datum && aShape->Signature() == 3)
|
|
{
|
|
if (aShape->HasColor())
|
|
{
|
|
hascol = Standard_True;
|
|
col = aShape->Color();
|
|
}
|
|
else hascol = Standard_False;
|
|
|
|
Handle(AIS2D_Trihedron) aTrihedron = *(Handle(AIS2D_Trihedron)*) &aShape;
|
|
|
|
aTrihedron->SetSize(value);
|
|
|
|
if (hascol) aTrihedron->SetColor(col);
|
|
else aTrihedron->UnsetColor();
|
|
|
|
// The trihedron hasn't be errased from the map
|
|
// so you just have to redisplay it
|
|
TheAIS2DContext()->Redisplay(aTrihedron, Standard_False);
|
|
}*/
|
|
}
|
|
it.Next();
|
|
}
|
|
TheAIS2DContext()->UpdateCurrentViewer();
|
|
}
|
|
else
|
|
{
|
|
TCollection_AsciiString name = argv[1];
|
|
|
|
if (GetMapOfAIS2D().IsBound2(name))
|
|
{
|
|
Handle(AIS2D_InteractiveObject) aShape = GetMapOfAIS2D().Find2(name);
|
|
|
|
/* if (aShape->Type() == AIS2D_KOI_Datum && aShape->Signature() == 3)
|
|
{
|
|
if (aShape->HasColor())
|
|
{
|
|
hascol = Standard_True;
|
|
col = aShape->Color();
|
|
}
|
|
else hascol = Standard_False;
|
|
|
|
// On downcast aShape de AIS2D_InteractiveObject a AIS2D_Trihedron
|
|
// pour lui appliquer la methode SetSize()
|
|
Handle(AIS2D_Trihedron) aTrihedron = *(Handle(AIS2D_Trihedron)*) &aShape;
|
|
|
|
aTrihedron->SetSize(value);
|
|
|
|
if (hascol) aTrihedron->SetColor(col);
|
|
else aTrihedron->UnsetColor();
|
|
|
|
// The trihedron hasn't be errased from the map
|
|
// so you just have to redisplay it
|
|
TheAIS2DContext()->Redisplay(aTrihedron, Standard_False);
|
|
|
|
TheAIS2DContext()->UpdateCurrentViewer();
|
|
}*/
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
//==============================================================================
|
|
//function : V2dPlaneTrihedron
|
|
//purpose : Create a plane from a trihedron selection. If no arguments are set, the default
|
|
//Draw arg : v2dplanetri name
|
|
//==============================================================================
|
|
/*static int V2dPlaneTrihedron (Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
if (argc != 2)
|
|
{
|
|
cout << argv[0] << " error" << endl;
|
|
return 1;
|
|
}
|
|
|
|
Standard_Integer myCurrentIndex;
|
|
TheAIS2DContext()->CloseAllContexts();
|
|
TheAIS2DContext()->OpenLocalContext(Standard_False);
|
|
myCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
Viewer2dTest_DoubleMapIteratorOfDoubleMapOfInteractiveAndName it (GetMapOfAIS2D());
|
|
while (it.More())
|
|
{
|
|
Handle(AIS2D_InteractiveObject) ShapeA = it.Key1();
|
|
if (ShapeA->Type() == AIS2D_KOI_Datum && ShapeA->Signature() == 3)
|
|
{
|
|
Handle(AIS2D_Trihedron) TrihedronA = ((*(Handle(AIS2D_Trihedron)*)&ShapeA));
|
|
TheAIS2DContext()->Load(TrihedronA,0,Standard_False);
|
|
TheAIS2DContext()->Activate(TrihedronA,3);
|
|
}
|
|
it.Next();
|
|
}
|
|
|
|
cout<<" Select a plane."<<endl;
|
|
Standard_Integer argccc = 5;
|
|
char *bufff[] = { "VPick", "X", "VPickY","VPickZ", "VPickShape" };
|
|
char **argvvv = bufff;
|
|
while (ViewerMainLoop2d(argccc, argvvv)) {}
|
|
|
|
Handle(AIS2D_InteractiveObject) theIOB;
|
|
for (TheAIS2DContext()->InitSelected();
|
|
TheAIS2DContext()->MoreSelected(); TheAIS2DContext()->NextSelected())
|
|
{
|
|
theIOB = TheAIS2DContext()->Interactive();
|
|
}
|
|
Handle(AIS2D_Plane) PlaneB = ((*(Handle(AIS2D_Plane)*)&theIOB));
|
|
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction de l'AIS2D_Plane
|
|
//gp_Pnt A,B,C;
|
|
//Handle(Geom_Plane) theGeomPlane;
|
|
//PlaneB->PlaneAttributes(theGeomPlane,A,B,C);
|
|
//Handle(AIS2D_PlaneTrihedron) theAIS2DPlaneTri= new AIS2D_PlaneTrihedron(theGeomPlane );
|
|
|
|
// on le display & bind
|
|
TheAIS2DContext()->Display(PlaneB);
|
|
GetMapOfAIS2D().Bind(PlaneB, argv[1]);
|
|
|
|
return 0;
|
|
}*/
|
|
|
|
//==============================================================================
|
|
// Fonction First click 2de click
|
|
//
|
|
// v2daxis vertex vertex
|
|
// edge None
|
|
// v2daxispara edge vertex
|
|
// v2daxisortho edge Vertex
|
|
// v2daxisinter Face Face
|
|
//==============================================================================
|
|
|
|
//==============================================================================
|
|
//function : V2dAxisBuilder
|
|
//purpose :
|
|
//Draw arg : v2daxis AxisName Xa Ya Xb Yb
|
|
//==============================================================================
|
|
static int V2dAxisBuilder (Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
Standard_Boolean HasArg;
|
|
TCollection_AsciiString name;
|
|
Standard_Integer MyCurrentIndex;
|
|
|
|
if (argc < 2 || argc > 6)
|
|
{
|
|
cout << " Syntaxe error" << endl;
|
|
return 1;
|
|
}
|
|
if (argc == 6) HasArg = Standard_True;
|
|
else HasArg = Standard_False;
|
|
|
|
name = argv[1];
|
|
TheAIS2DContext()->CloseAllContext();
|
|
|
|
Handle(V2d_View) V = Viewer2dTest::CurrentView();
|
|
|
|
if (HasArg)
|
|
{
|
|
Standard_Real coord [4];
|
|
for (Standard_Integer i = 0; i <= 3; i++)
|
|
{
|
|
coord[i] = atof(argv[2+i]);
|
|
}
|
|
// gp_Pnt2d p1 (coord[0],coord[1]);
|
|
// gp_Pnt2d p2 (coord[2],coord[3]);
|
|
|
|
Handle(Graphic2d_GraphicObject) obj =
|
|
new Graphic2d_GraphicObject(V->View());
|
|
|
|
Handle(Graphic2d_InfiniteLine) line = new Graphic2d_InfiniteLine
|
|
(obj, coord[0], coord[1], coord[2] - coord[0], coord[3] - coord[1]);
|
|
|
|
obj->Display();
|
|
V->Viewer()->Update();
|
|
// gp_Vec2d myVect (p1, p2);
|
|
// Handle(Geom2d_Line) myLine = new Geom2d_Line(p1, myVect);
|
|
// Handle(AIS2D_Axis) TheAxis = new AIS2D_Axis(myLine);
|
|
// GetMapOfAIS2D().Bind(TheAxis,name);
|
|
// TheAIS2DContext()->Display(TheAxis);
|
|
}
|
|
else
|
|
{
|
|
// fonction vaxis
|
|
// Purpose: Teste le constructeur AIS2D_Axis::AIS2D_Axis (x:Axis1Placement from Geom)
|
|
if (!strcasecmp(argv[0], "v2daxis"))
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
MyCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
// Active le mode edge et le mode vertex
|
|
// TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(1));
|
|
// TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(2));
|
|
cout << " Select an edge or a vertex." << endl;
|
|
|
|
TopoDS_Shape ShapeA = SelectShape2d(5);
|
|
|
|
if (ShapeA.ShapeType() == TopAbs_VERTEX)
|
|
{
|
|
// TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(2));
|
|
cout << " Select a different vertex." << endl;
|
|
|
|
TopoDS_Shape ShapeB;
|
|
do
|
|
{
|
|
ShapeB = SelectShape2d(5);
|
|
} while (ShapeB.IsSame(ShapeA));
|
|
|
|
TheAIS2DContext()->CloseLocalContext(MyCurrentIndex);
|
|
|
|
// Construction de l'axe
|
|
gp_Pnt A = BRep_Tool::Pnt(TopoDS::Vertex(ShapeA));
|
|
gp_Pnt B = BRep_Tool::Pnt(TopoDS::Vertex(ShapeB));
|
|
gp_Vec aV (A,B);
|
|
gp_Dir D (aV);
|
|
Handle(Geom_Axis1Placement) OrigineAndVect = new Geom_Axis1Placement(A,D);
|
|
// Handle(AIS2D_Axis) TheAxis = new AIS2D_Axis(OrigineAndVect);
|
|
// GetMapOfAIS2D().Bind(TheAxis,name);
|
|
// TheAIS2DContext()->Display(TheAxis);
|
|
}
|
|
else
|
|
{
|
|
// Un unique edge (ShapeA) a ete picke
|
|
// Fermeture du context local
|
|
TheAIS2DContext()->CloseLocalContext(MyCurrentIndex);
|
|
// Constuction de l'axe
|
|
TopoDS_Edge ed = TopoDS::Edge(ShapeA);
|
|
TopoDS_Vertex Va,Vb;
|
|
TopExp::Vertices(ed,Va,Vb );
|
|
gp_Pnt A = BRep_Tool::Pnt(Va);
|
|
gp_Pnt B = BRep_Tool::Pnt(Vb);
|
|
gp_Vec aV (A,B);
|
|
gp_Dir D (aV);
|
|
Handle(Geom_Axis1Placement) OrigineAndVect = new Geom_Axis1Placement(A,D);
|
|
// Handle(AIS2D_Axis) TheAxis = new AIS2D_Axis(OrigineAndVect);
|
|
// GetMapOfAIS2D().Bind(TheAxis,name);
|
|
// TheAIS2DContext()->Display(TheAxis);
|
|
}
|
|
}
|
|
|
|
// Fonction axispara
|
|
// Purpose: Teste le constructeur AIS2D_Axis::AIS2D_Axis(x: Axis2Placement from Geom, y: TypeOfAxis from AIS2D)
|
|
else if (!strcasecmp(argv[0], "v2daxispara"))
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
MyCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
TopoDS_Shape ShapeA = SelectShape2d(2); // Edge
|
|
TopoDS_Shape ShapeB = SelectShape2d(1); // Vertex
|
|
|
|
// Fermeture du context local
|
|
TheAIS2DContext()->CloseLocalContext(MyCurrentIndex);
|
|
|
|
// Construction de l'axe
|
|
TopoDS_Edge ed = TopoDS::Edge(ShapeA);
|
|
gp_Pnt B = BRep_Tool::Pnt(TopoDS::Vertex(ShapeB));
|
|
TopoDS_Vertex Va,Vc;
|
|
TopExp::Vertices(ed,Va,Vc);
|
|
gp_Pnt A = BRep_Tool::Pnt(Va);
|
|
gp_Pnt C = BRep_Tool::Pnt(Vc);
|
|
gp_Vec aV (A,C);
|
|
gp_Dir D (aV);
|
|
Handle(Geom_Axis1Placement) OrigineAndVect = new Geom_Axis1Placement(B,D);
|
|
// Handle(AIS2D_Axis) TheAxis = new AIS2D_Axis(OrigineAndVect);
|
|
// GetMapOfAIS2D().Bind(TheAxis,name);
|
|
// TheAIS2DContext()->Display(TheAxis);
|
|
}
|
|
else // Fonction axisortho
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
MyCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
TopoDS_Shape ShapeA = SelectShape2d(2); // Edge
|
|
TopoDS_Shape ShapeB = SelectShape2d(1); // Vertex
|
|
|
|
// Fermeture du context local
|
|
TheAIS2DContext()->CloseLocalContext(MyCurrentIndex);
|
|
|
|
// Construction de l'axe
|
|
TopoDS_Edge ed = TopoDS::Edge(ShapeA);
|
|
gp_Pnt B = BRep_Tool::Pnt(TopoDS::Vertex(ShapeB));
|
|
TopoDS_Vertex Va,Vc;
|
|
TopExp::Vertices(ed,Va,Vc);
|
|
gp_Pnt A = BRep_Tool::Pnt(Va);
|
|
gp_Pnt C = BRep_Tool::Pnt(Vc);
|
|
gp_Pnt E (A.Y()+A.Z()-C.Y()-C.Z(), C.X()-A.X(), C.X()-A.X());
|
|
// W = AE est un vecteur orthogonal a AC
|
|
gp_Vec aV (A,E);
|
|
gp_Dir D (aV);
|
|
Handle(Geom_Axis1Placement) OrigineAndVect = new Geom_Axis1Placement(B,D);
|
|
// Handle(AIS2D_Axis) TheAxis = new AIS2D_Axis(OrigineAndVect);
|
|
// GetMapOfAIS2D().Bind(TheAxis,name);
|
|
// TheAIS2DContext()->Display(TheAxis);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//==============================================================================
|
|
// Fonction First click Result
|
|
//
|
|
// vpoint vertex AIS2D_Point=Vertex
|
|
// edge AIS2D_Point=Middle of the edge
|
|
//==============================================================================
|
|
|
|
#if 0
|
|
//==============================================================================
|
|
//function : V2dPointBuilder
|
|
//purpose : Build an AIS2D_Point from coordinates or with a selected vertex or edge
|
|
//Draw arg : v2dpoint PoinName [Xa] [Ya]
|
|
//==============================================================================
|
|
static int V2dPointBuilder (Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
// Declarations
|
|
Standard_Boolean HasArg;
|
|
TCollection_AsciiString name;
|
|
Standard_Integer myCurrentIndex;
|
|
|
|
// Verification
|
|
if (argc < 2 || argc > 4 )
|
|
{
|
|
cout << " Syntaxe error" << endl;
|
|
return 1;
|
|
}
|
|
if (argc == 4) HasArg = Standard_True;
|
|
else HasArg = Standard_False;
|
|
|
|
name = argv[1];
|
|
// Fermeture des contextes
|
|
TheAIS2DContext()->CloseAllContext();
|
|
|
|
// Il y a des arguments: teste l'unique constructeur AIS2D_Pnt::AIS2D_Pnt(Point from Geom)
|
|
if (HasArg)
|
|
{
|
|
Standard_Real thecoord[3];
|
|
for (Standard_Integer i = 0; i <= 2; i++) thecoord[i] = atof(argv[2+i]);
|
|
Handle(Geom2d_CartesianPoint) myGeomPoint = new Geom2d_CartesianPoint(thecoord[0],thecoord[1]);
|
|
// Handle(AIS2D_Point) myAIS2DPoint = new AIS2D_Point(myGeomPoint);
|
|
// GetMapOfAIS2D().Bind(myAIS2DPoint, name);
|
|
// TheAIS2DContext()->Display(myAIS2DPoint);
|
|
}
|
|
else // Il n'a pas d'arguments
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
myCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
// TheAIS2DContext()->ActivateStandardMode (AIS2D_ProjShape::SelectionType(1));
|
|
// TheAIS2DContext()->ActivateStandardMode (AIS2D_ProjShape::SelectionType(2));
|
|
cout << " Select a vertex or an edge (build the middle)" << endl;
|
|
TopoDS_Shape ShapeA = SelectShape2d(5);
|
|
|
|
if (ShapeA.ShapeType() == TopAbs_VERTEX)
|
|
{
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du point
|
|
gp_Pnt A = BRep_Tool::Pnt(TopoDS::Vertex(ShapeA));
|
|
Handle(Geom_CartesianPoint) myGeomPoint = new Geom_CartesianPoint(A);
|
|
// Handle(AIS2D_Point) myAIS2DPoint = new AIS2D_Point(myGeomPoint);
|
|
// GetMapOfAIS2D().Bind(myAIS2DPoint,name);
|
|
// TheAIS2DContext()->Display(myAIS2DPoint);
|
|
}
|
|
else
|
|
{
|
|
// Un Edge a ete selectionne
|
|
// Fermeture du context local
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du point milieu de l'edge
|
|
TopoDS_Edge myEdge = TopoDS::Edge(ShapeA);
|
|
TopoDS_Vertex myVertexA,myVertexB;
|
|
TopExp::Vertices (myEdge, myVertexA, myVertexB);
|
|
gp_Pnt A = BRep_Tool::Pnt(myVertexA);
|
|
gp_Pnt B = BRep_Tool::Pnt(myVertexB);
|
|
|
|
Handle(Geom_CartesianPoint) myGeomPointM =
|
|
new Geom_CartesianPoint((A.X()+B.X())/2, (A.Y()+B.Y())/2, (A.Z()+B.Z())/2);
|
|
// Handle(AIS2D_Point) myAIS2DPointM = new AIS2D_Point(myGeomPointM);
|
|
// GetMapOfAIS2D().Bind(myAIS2DPointM, name);
|
|
// TheAIS2DContext()->Display(myAIS2DPointM);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
//==============================================================================
|
|
// Fonction 1st click 2de click 3de click
|
|
// v2dplane Vertex Vertex Vertex
|
|
// Vertex Edge
|
|
// Edge Vertex
|
|
// Face
|
|
// v2dplanepara Face Vertex
|
|
// Vertex Face
|
|
// v2dplaneortho Face Edge
|
|
// Edge Face
|
|
//==============================================================================
|
|
|
|
//==============================================================================
|
|
//function : V2dPlaneBuilder
|
|
//purpose : Build an AIS2D_Plane from selected entities or Named AIs components
|
|
//Draw arg : v2dplane PlaneName [AxisName] [PointName]
|
|
// [PointName] [PointName] [PointName]
|
|
// [PlaneName] [PointName]
|
|
//==============================================================================
|
|
/*#include <BRepExtrema_ExtPC.hxx>
|
|
#include <BRepExtrema_ExtPF.hxx>
|
|
#include <BRepAdaptor_Surface.hxx>
|
|
#include <gp_Pln.hxx>
|
|
#include <GC_MakePlane.hxx>
|
|
static int V2dPlaneBuilder (Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
Standard_Boolean HasArg;
|
|
TCollection_AsciiString name;
|
|
Standard_Integer myCurrentIndex;
|
|
|
|
if (argc < 2 || argc > 5)
|
|
{
|
|
cout << " Syntaxe error" << endl;
|
|
return 1;
|
|
}
|
|
|
|
if (argc == 5 || argc == 4) HasArg = Standard_True;
|
|
else HasArg = Standard_False;
|
|
|
|
name = argv[1];
|
|
TheAIS2DContext()->CloseAllContexts();
|
|
|
|
if (HasArg)
|
|
{
|
|
if (!GetMapOfAIS2D().IsBound2(argv[2]))
|
|
{
|
|
cout << "v2dplane: error 1st name doesn't exist in the GetMapOfAIS2D()." << endl;
|
|
return 1;
|
|
}
|
|
Handle(AIS2D_InteractiveObject) theShapeA = GetMapOfAIS2D().Find2(argv[2]);
|
|
|
|
if (theShapeA->Type() == AIS2D_KOI_Datum && theShapeA->Signature() == 1)
|
|
{
|
|
if (argc < 5 || !GetMapOfAIS2D().IsBound2(argv[3]))
|
|
{
|
|
cout << "v2dplane: error 2de name doesn't exist in the GetMapOfAIS2D()." << endl;
|
|
return 1;
|
|
}
|
|
Handle(AIS2D_InteractiveObject) theShapeB = GetMapOfAIS2D().Find2(argv[3]);
|
|
if (!(theShapeB->Type() == AIS2D_KOI_Datum && theShapeB->Signature() == 1))
|
|
{
|
|
cout << "v2dplane: error 2de object is expected to be an AIS2D_Point. " << endl;
|
|
return 1;
|
|
}
|
|
if (!GetMapOfAIS2D().IsBound2(argv[4]))
|
|
{
|
|
cout << "v2dplane: error 3de name doesn't exist in the GetMapOfAIS2D()." << endl;
|
|
return 1;
|
|
}
|
|
Handle(AIS2D_InteractiveObject) theShapeC = GetMapOfAIS2D().Find2(argv[4]);
|
|
if (!(theShapeC->Type() == AIS2D_KOI_Datum && theShapeC->Signature() == 1))
|
|
{
|
|
cout << "v2dplane: error 3de object is expected to be an AIS2D_Point. " << endl;
|
|
return 1;
|
|
}
|
|
|
|
Handle(AIS2D_Point) theAIS2DPointA = *(Handle(AIS2D_Point)*)& theShapeA;
|
|
Handle(AIS2D_Point) theAIS2DPointB = *(Handle(AIS2D_Point)*)& theShapeB;
|
|
Handle(AIS2D_Point) theAIS2DPointC = *(Handle(AIS2D_Point)*)& theShapeC;
|
|
|
|
Handle(Geom_Point) myGeomPointA = theAIS2DPointA->Component();
|
|
Handle(Geom_CartesianPoint) myCartPointA = *((Handle(Geom_CartesianPoint)*)& myGeomPointA);
|
|
|
|
Handle(Geom_Point) myGeomPointB = theAIS2DPointB->Component();
|
|
Handle(Geom_CartesianPoint) myCartPointB= *((Handle(Geom_CartesianPoint)*)& theAIS2DPointB);
|
|
|
|
Handle(Geom_Point) myGeomPointBC = theAIS2DPointC->Component();
|
|
Handle(Geom_CartesianPoint) myCartPointC = *((Handle(Geom_CartesianPoint)*)& theAIS2DPointC);
|
|
|
|
if (myCartPointB->X() == myCartPointA->X() &&
|
|
myCartPointB->Y() == myCartPointA->Y() && myCartPointB->Z() == myCartPointA->Z())
|
|
{
|
|
// B=A
|
|
cout << "v2dplane error: same points" << endl;
|
|
return 1;
|
|
}
|
|
if (myCartPointC->X() == myCartPointA->X() &&
|
|
myCartPointC->Y() == myCartPointA->Y() && myCartPointC->Z() == myCartPointA->Z())
|
|
{
|
|
// C=A
|
|
cout << "v2dplane error: same points" << endl;
|
|
return 1;
|
|
}
|
|
if (myCartPointC->X() == myCartPointB->X() &&
|
|
myCartPointC->Y() == myCartPointB->Y() && myCartPointC->Z() == myCartPointB->Z())
|
|
{
|
|
// C=B
|
|
cout << "v2dplane error: same points" << endl;
|
|
return 1;
|
|
}
|
|
|
|
gp_Pnt A = myCartPointA->Pnt();
|
|
gp_Pnt B = myCartPointB->Pnt();
|
|
gp_Pnt C = myCartPointC->Pnt();
|
|
|
|
// Construction de l'AIS2D_Plane
|
|
GC_MakePlane MkPlane (A,B,C);
|
|
Handle(Geom_Plane) myGeomPlane = MkPlane.Value();
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(myGeomPlane);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
|
|
else if (theShapeA->Type() == AIS2D_KOI_Datum && theShapeA->Signature() == 2)
|
|
{
|
|
if (argc != 4 || !GetMapOfAIS2D().IsBound2(argv[3]))
|
|
{
|
|
cout << "v2dplane: error 2de name doesn't exist in the GetMapOfAIS2D()." << endl;
|
|
return 1;
|
|
}
|
|
Handle(AIS2D_InteractiveObject) theShapeB = GetMapOfAIS2D().Find2(argv[3]);
|
|
if (!(theShapeB->Type() == AIS2D_KOI_Datum && theShapeB->Signature() == 1))
|
|
{
|
|
cout << "v2dplane: error 2de object is expected to be an AIS2D_Point." << endl;
|
|
return 1;
|
|
}
|
|
|
|
Handle(AIS2D_Axis) theAIS2DAxisA = *(Handle(AIS2D_Axis)*)& theShapeA;
|
|
Handle(AIS2D_Point) theAIS2DPointB = *(Handle(AIS2D_Point)*)& theShapeB;
|
|
|
|
Handle(Geom_Line) myGeomLineA = theAIS2DAxisA->Component();
|
|
Handle(Geom_Point) myGeomPointB = theAIS2DPointB->Component();
|
|
|
|
gp_Ax1 myAxis = myGeomLineA->Position();
|
|
Handle(Geom_CartesianPoint) myCartPointB = *(Handle(Geom_CartesianPoint)*)& myGeomPointB;
|
|
|
|
gp_Dir D = myAxis.Direction();
|
|
gp_Pnt B = myCartPointB->Pnt();
|
|
|
|
// Construction de l'AIS2D_Plane
|
|
Handle(Geom_Plane) myGeomPlane = new Geom_Plane(B,D);
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(myGeomPlane,B);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
else if (theShapeA->Type() == AIS2D_KOI_Datum && theShapeA->Signature() == 7)
|
|
{
|
|
if (argc != 4 || !GetMapOfAIS2D().IsBound2(argv[3]))
|
|
{
|
|
cout << "vplane: error 2de name doesn't exist in the GetMapOfAIS2D()." << endl;
|
|
return 1;
|
|
}
|
|
Handle(AIS2D_InteractiveObject) theShapeB = GetMapOfAIS2D().Find2(argv[3]);
|
|
if (!(theShapeB->Type() == AIS2D_KOI_Datum && theShapeB->Signature() == 1))
|
|
{
|
|
cout << "vplane: error 2de object is expected to be an AIS2D_Point." << endl;
|
|
return 1;
|
|
}
|
|
|
|
Handle(AIS2D_Plane) theAIS2DPlaneA = *(Handle(AIS2D_Plane)*)& theShapeA;
|
|
Handle(AIS2D_Point) theAIS2DPointB = *(Handle(AIS2D_Point)*)& theShapeB;
|
|
|
|
Handle(Geom_Plane) theNewGeomPlane = theAIS2DPlaneA->Component();
|
|
Handle(Geom_Point) myGeomPointB = theAIS2DPointB->Component();
|
|
|
|
Handle(Geom_CartesianPoint) myCartPointB = *(Handle(Geom_CartesianPoint)*)& myGeomPointB;
|
|
gp_Pnt B = myCartPointB->Pnt();
|
|
|
|
// Construction de l'AIS2D_Plane
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theNewGeomPlane,B);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
else
|
|
{
|
|
cout << "v2dplane: error 1st object is not an AIS2D." << endl;
|
|
return 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!strcasecmp(argv[0] ,"v2dplane"))
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
myCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(1));
|
|
TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(2));
|
|
cout << "Select a vertex, a face or an edge." << endl;
|
|
ShapeA = SelectShape2d(5); // User-defined mode
|
|
TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
|
|
if (ShapeA.ShapeType() == TopAbs_VERTEX)
|
|
{
|
|
TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
cout << " Select an edge or a different vertex." << endl;
|
|
TopoDS_Shape ShapeB = SelectShape2d(5);
|
|
|
|
if (ShapeB.ShapeType() == TopAbs_VERTEX)
|
|
{
|
|
if (ShapeB.IsSame(ShapeA))
|
|
{
|
|
cout << " v2dplane: error, same points selected" << endl;
|
|
return 1;
|
|
}
|
|
TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(2));
|
|
cout<<" Select a different vertex."<<endl;
|
|
TopoDS_Shape ShapeC = SelectShape2d(5);
|
|
|
|
if (ShapeC.IsSame(ShapeA) || ShapeC.IsSame(ShapeB))
|
|
{
|
|
cout << " v2dplane: error, same points selected" << endl;
|
|
return 1;
|
|
}
|
|
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du plane
|
|
gp_Pnt A = BRep_Tool::Pnt(TopoDS::Vertex(ShapeA));
|
|
gp_Pnt B = BRep_Tool::Pnt(TopoDS::Vertex(ShapeB));
|
|
gp_Pnt C = BRep_Tool::Pnt(TopoDS::Vertex(ShapeC));
|
|
GC_MakePlane MkPlane (A,B,C);
|
|
Handle(Geom_Plane) theGeomPlane = MkPlane.Value();
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theGeomPlane);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
else // ShapeB est un edge
|
|
{
|
|
TopoDS_Edge EdgeB = TopoDS::Edge(ShapeB);
|
|
TopoDS_Vertex VertA = TopoDS::Vertex(ShapeA);
|
|
|
|
BRepExtrema_ExtPC OrthoProj (VertA, EdgeB);
|
|
if (OrthoProj.Value(1) < 0.001)
|
|
{
|
|
cout << " v2dplane: error point is on the edge." << endl;
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
// Construction du plane
|
|
gp_Pnt A = BRep_Tool::Pnt(VertA);
|
|
TopoDS_Vertex VBa, VBb;
|
|
TopExp::Vertices(EdgeB, VBa, VBb);
|
|
gp_Pnt Ba = BRep_Tool::Pnt(VBa);
|
|
gp_Pnt Bb = BRep_Tool::Pnt(VBb);
|
|
GC_MakePlane MkPlane (A,Ba,Bb);
|
|
Handle(Geom_Plane) theGeomPlane = MkPlane.Value();
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theGeomPlane);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
}
|
|
}
|
|
else if (ShapeA.ShapeType() == TopAbs_EDGE)
|
|
{
|
|
TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(2));
|
|
cout << " Select a vertex that don't belong to the edge." << endl;
|
|
TopoDS_Shape ShapeB = SelectShape2d(5);
|
|
|
|
TopoDS_Edge EdgeA = TopoDS::Edge(ShapeA);
|
|
TopoDS_Vertex VertB = TopoDS::Vertex(ShapeB);
|
|
|
|
BRepExtrema_ExtPC OrthoProj (VertB,EdgeA);
|
|
if (OrthoProj.Value(1) < 0.001)
|
|
{
|
|
cout << " v2dplane: error point is on the edge." << endl;
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
// Construction du plane
|
|
gp_Pnt B = BRep_Tool::Pnt(VertB);
|
|
TopoDS_Vertex VAa, VAb;
|
|
TopExp::Vertices(EdgeA, VAa, VAb);
|
|
gp_Pnt Aa = BRep_Tool::Pnt(VAa);
|
|
gp_Pnt Ab = BRep_Tool::Pnt(VAb);
|
|
GC_MakePlane MkPlane (B,Aa,Ab);
|
|
Handle(Geom_Plane) theGeomPlane = MkPlane.Value();
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theGeomPlane);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
}
|
|
else // ShapeA est une Face
|
|
{
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
// Construction du plane
|
|
TopoDS_Face myFace = TopoDS::Face(ShapeA);
|
|
BRepAdaptor_Surface mySurface (myFace, Standard_False);
|
|
if (mySurface.GetType() == GeomAbs_Plane)
|
|
{
|
|
gp_Pln myPlane = mySurface.Plane();
|
|
Handle(Geom_Plane) theGeomPlane = new Geom_Plane(myPlane);
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theGeomPlane);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
else
|
|
{
|
|
cout << " v2dplane: error" << endl;
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
else if (!strcasecmp(argv[0], "v2dplanepara"))
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
myCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(1));
|
|
TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
cout << " Select a vertex or a face." << endl;
|
|
TopoDS_Shape ShapeA = SelectShape2d(5);
|
|
|
|
if (ShapeA.ShapeType() == TopAbs_VERTEX)
|
|
{
|
|
TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(1));
|
|
cout<<" Select a face."<<endl;
|
|
TopoDS_Shape ShapeB = SelectShape2d(5);
|
|
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du plane
|
|
gp_Pnt A = BRep_Tool::Pnt(TopoDS::Vertex(ShapeA));
|
|
|
|
TopoDS_Face myFace = TopoDS::Face(ShapeB);
|
|
BRepAdaptor_Surface mySurface (myFace, Standard_False);
|
|
if (mySurface.GetType() == GeomAbs_Plane)
|
|
{
|
|
gp_Pln myPlane = mySurface.Plane();
|
|
myPlane.SetLocation(A);
|
|
Handle(Geom_Plane) theGeomPlane = new Geom_Plane(myPlane);
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theGeomPlane, A);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
else
|
|
{
|
|
cout << " vplane: error" << endl;
|
|
return 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
cout<<" Select a vertex."<<endl;
|
|
TopoDS_Shape ShapeB = SelectShape2d(5);
|
|
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du plane
|
|
gp_Pnt B = BRep_Tool::Pnt(TopoDS::Vertex(ShapeB ) );
|
|
|
|
TopoDS_Face myFace = TopoDS::Face(ShapeA);
|
|
BRepAdaptor_Surface mySurface (myFace, Standard_False);
|
|
if (mySurface.GetType() == GeomAbs_Plane)
|
|
{
|
|
gp_Pln myPlane = mySurface.Plane();
|
|
myPlane.SetLocation(B);
|
|
Handle(Geom_Plane) theGeomPlane = new Geom_Plane(myPlane);
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theGeomPlane, B);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
else
|
|
{
|
|
cout << " v2dplane: error" << endl;
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
else // Fonction v2dplaneortho
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
myCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(2));
|
|
TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
cout << " Select a face and an edge coplanar." << endl;
|
|
TopoDS_Shape ShapeA = SelectShape2d(5);
|
|
|
|
if (ShapeA.ShapeType() == TopAbs_EDGE)
|
|
{
|
|
// ShapeA est un edge, on desactive le mode edge...
|
|
TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(2));
|
|
cout<<" Select a face."<<endl;
|
|
TopoDS_Shape ShapeB = SelectShape2d(5);
|
|
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du plane
|
|
TopoDS_Edge EdgeA = TopoDS::Edge(ShapeA);
|
|
TopoDS_Vertex VAa, VAb;
|
|
|
|
TopExp::Vertices(EdgeA, VAa, VAb);
|
|
gp_Pnt Aa = BRep_Tool::Pnt(VAa);
|
|
gp_Pnt Ab = BRep_Tool::Pnt(VAb);
|
|
gp_Vec ab (Aa,Ab);
|
|
|
|
gp_Dir Dab (ab);
|
|
// Creation de mon axe de rotation
|
|
gp_Ax1 myRotAxis (Aa,Dab);
|
|
|
|
TopoDS_Face myFace = TopoDS::Face(ShapeB);
|
|
BRepExtrema_ExtPF myHauteurA (VAa, myFace);
|
|
BRepExtrema_ExtPF myHauteurB (VAb, myFace);
|
|
if (fabs(myHauteurA.Value(1) - myHauteurB.Value(1) ) > 0.1)
|
|
{
|
|
cout << " v2dplaneOrtho error: l'edge n'est pas parallele a la face." << endl;
|
|
return 1;
|
|
}
|
|
BRepAdaptor_Surface mySurface (myFace, Standard_False);
|
|
if (mySurface.GetType() == GeomAbs_Plane)
|
|
{
|
|
gp_Pln myPlane = mySurface.Plane();
|
|
myPlane.Rotate(myRotAxis, PI/2);
|
|
|
|
Handle(Geom_Plane) theGeomPlane = new Geom_Plane(myPlane);
|
|
gp_Pnt theMiddle ((Aa.X()+Ab.X())/2, (Aa.Y()+Ab.Y())/2, (Aa.Z()+Ab.Z())/2);
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theGeomPlane, theMiddle);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
|
|
}
|
|
else
|
|
{
|
|
cout << " v2dplaneOrtho: error" << endl;
|
|
return 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
cout << " Select an edge." << endl;
|
|
TopoDS_Shape ShapeB = SelectShape2d(5);
|
|
|
|
// Fermeture du context local
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du plane
|
|
TopoDS_Edge EdgeB = TopoDS::Edge(ShapeB);
|
|
TopoDS_Vertex VBa, VBb;
|
|
TopExp::Vertices(EdgeB, VBa, VBb);
|
|
gp_Pnt Ba = BRep_Tool::Pnt(VBa);
|
|
gp_Pnt Bb = BRep_Tool::Pnt(VBb);
|
|
gp_Vec ab (Ba,Bb);
|
|
gp_Dir Dab (ab);
|
|
// Creation de mon axe de rotation
|
|
gp_Ax1 myRotAxis (Ba,Dab);
|
|
|
|
TopoDS_Face myFace = TopoDS::Face(ShapeA);
|
|
BRepExtrema_ExtPF myHauteurA (VBa, myFace);
|
|
BRepExtrema_ExtPF myHauteurB (VBb, myFace);
|
|
|
|
if (fabs(myHauteurA.Value(1) - myHauteurB.Value(1) ) > 0.1)
|
|
{
|
|
cout << " v2dplaneOrtho error: l'edge n'est pas parallele a la face." << endl;
|
|
return 1;
|
|
}
|
|
BRepAdaptor_Surface mySurface (myFace, Standard_False);
|
|
if (mySurface.GetType() == GeomAbs_Plane)
|
|
{
|
|
gp_Pln myPlane = mySurface.Plane();
|
|
myPlane.Rotate(myRotAxis, PI/2);
|
|
Handle(Geom_Plane) theGeomPlane = new Geom_Plane(myPlane);
|
|
gp_Pnt theMiddle ((Ba.X()+Bb.X())/2, (Ba.Y()+Bb.Y())/2, (Ba.Z()+Bb.Z())/2);
|
|
Handle(AIS2D_Plane) myAIS2DPlane = new AIS2D_Plane(theGeomPlane, theMiddle);
|
|
GetMapOfAIS2D().Bind(myAIS2DPlane, name);
|
|
TheAIS2DContext()->Display(myAIS2DPlane);
|
|
}
|
|
else
|
|
{
|
|
cout << " v2dplaneOrtho: error" << endl;
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}*/
|
|
|
|
//==============================================================================
|
|
// Fonction vline
|
|
// --------------- Uniquement par parametre. Pas de selection dans le viewer.
|
|
//==============================================================================
|
|
|
|
//==============================================================================
|
|
//function : V2dLineBuilder
|
|
//purpose : Build a Graphic2d_Line
|
|
//Draw arg : v2dline LineName [AIS2D_PointName] [AIS2D_PointName]
|
|
// [Xa] [Ya] [Za] [Xb] [Yb] [Zb]
|
|
//==============================================================================
|
|
/*static int V2dLineBuilder(Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
Standard_Integer myCurrentIndex;
|
|
if (argc != 4 && argc != 8 && argc != 2)
|
|
{
|
|
cout << "vline error: number of arguments not correct " << endl;
|
|
return 1;
|
|
}
|
|
TheAIS2DContext()->CloseAllContext();
|
|
|
|
// On recupere les parametres
|
|
Handle(AIS2D_InteractiveObject) theShapeA;
|
|
Handle(AIS2D_InteractiveObject) theShapeB;
|
|
|
|
// Parametres: AIS2D_Point AIS2D_Point
|
|
if (argc == 4)
|
|
{
|
|
theShapeA = GetMapOfAIS2D().Find2(argv[2] );
|
|
if (theShapeA->Type() == AIS2D_KOI_Datum && theShapeA->Signature() == 1)
|
|
{
|
|
theShapeB = GetMapOfAIS2D().Find2(argv[3]);
|
|
if (!(theShapeB->Type() == AIS2D_KOI_Datum && theShapeB->Signature() == 1))
|
|
{
|
|
cout << "v2dline error: wrong type of 2de argument." << endl;
|
|
return 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
cout << "v2dline error: wrong type of 1st argument." << endl;
|
|
return 1;
|
|
}
|
|
|
|
Handle(AIS2D_Point) theAIS2DPointA = *(Handle(AIS2D_Point)*)& theShapeA;
|
|
Handle(AIS2D_Point) theAIS2DPointB = *(Handle(AIS2D_Point)*)& theShapeB;
|
|
|
|
Handle(Geom_Point) myGeomPointBA = theAIS2DPointA->Component();
|
|
Handle(Geom_CartesianPoint) myCartPointA = *((Handle(Geom_CartesianPoint)*)& myGeomPointBA);
|
|
|
|
Handle(Geom_Point) myGeomPointB = theAIS2DPointB->Component();
|
|
Handle(Geom_CartesianPoint) myCartPointB = *((Handle(Geom_CartesianPoint)*)& myGeomPointB);
|
|
|
|
if (myCartPointB->X() == myCartPointA->X() &&
|
|
myCartPointB->Y() == myCartPointA->Y() && myCartPointB->Z() == myCartPointA->Z())
|
|
{
|
|
// B=A
|
|
cout << "v2dline error: same points" << endl;
|
|
return 1;
|
|
}
|
|
Handle(AIS2D_Line) theAIS2DLine = new AIS2D_Line(myCartPointA, myCartPointB);
|
|
GetMapOfAIS2D().Bind(theAIS2DLine, argv[1]);
|
|
TheAIS2DContext()->Display(theAIS2DLine);
|
|
}
|
|
else if (argc == 8) // Parametres 6 Reals
|
|
{
|
|
Standard_Real coord[6];
|
|
for (Standard_Integer i = 0; i <= 2; i++)
|
|
{
|
|
coord[i] = atof(argv[2+i]);
|
|
coord[i+3] = atof(argv[5+i]);
|
|
}
|
|
|
|
Handle(Geom_CartesianPoint) myCartPointA = new Geom_CartesianPoint(coord[0],coord[1],coord[2]);
|
|
Handle(Geom_CartesianPoint) myCartPointB = new Geom_CartesianPoint(coord[3],coord[4],coord[5]);
|
|
|
|
Handle(AIS2D_Line) theAIS2DLine = new AIS2D_Line(myCartPointA, myCartPointB);
|
|
GetMapOfAIS2D().Bind(theAIS2DLine, argv[1]);
|
|
TheAIS2DContext()->Display(theAIS2DLine);
|
|
}
|
|
else
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
myCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
// Active le mode Vertex.
|
|
TopoDS_Shape ShapeA = SelectShape2d(1);
|
|
|
|
if (ShapeA.ShapeType() == TopAbs_VERTEX)
|
|
{
|
|
// TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(1));
|
|
cout << " Select a different vertex." << endl;
|
|
|
|
TopoDS_Shape ShapeB;
|
|
do
|
|
{
|
|
ShapeB = SelectShape2d(5);
|
|
} while (ShapeB.IsSame(ShapeA));
|
|
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction de la line
|
|
gp_Pnt A = BRep_Tool::Pnt(TopoDS::Vertex(ShapeA));
|
|
gp_Pnt B = BRep_Tool::Pnt(TopoDS::Vertex(ShapeB));
|
|
|
|
Handle(Geom_CartesianPoint) myCartPointA = new Geom_CartesianPoint(A);
|
|
Handle(Geom_CartesianPoint) myCartPointB = new Geom_CartesianPoint(B);
|
|
|
|
Handle(AIS2D_Line) theAIS2DLine = new AIS2D_Line(myCartPointA, myCartPointB);
|
|
GetMapOfAIS2D().Bind(theAIS2DLine, argv[1]);
|
|
TheAIS2DContext()->Display(theAIS2DLine);
|
|
}
|
|
else
|
|
{
|
|
cout << "v2dline error." << endl;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}*/
|
|
|
|
//==============================================================================
|
|
//function : V2dCircleBuilder
|
|
//purpose : Build an Graphic2d_Circle
|
|
//Draw arg : v2dcircle CircleName X Y Radius [Color_index]
|
|
//==============================================================================
|
|
static int V2dCircleBuilder (Draw_Interpretor& , Standard_Integer argc, const char** argv)
|
|
{
|
|
Standard_Integer myCurrentIndex;
|
|
// verification of the arguments
|
|
if (argc < 2)
|
|
{
|
|
cout << "Usage: v2dcircle CircleName X Y Radius [Color_index]" << endl;
|
|
return 1;
|
|
}
|
|
TheAIS2DContext()->CloseAllContext();
|
|
Handle(V2d_View) V = Viewer2dTest::CurrentView();
|
|
|
|
TCollection_AsciiString name = argv[1];
|
|
|
|
if (argc >= 5)
|
|
{
|
|
// Handle(AIS2D_InteractiveObject) theShapeA;
|
|
// Handle(AIS2D_InteractiveObject) theShapeB;
|
|
// theShapeA=GetMapOfAIS2D().Find2(argv[2]);
|
|
// theShapeB=GetMapOfAIS2D().Find2(argv[3]);
|
|
|
|
// Arguments: AIS2D_Point AIS2D_Point AIS2D_Point
|
|
// ========================================
|
|
/* if (theShapeA->Type() == AIS2D_KOI_Datum && theShapeA->Signature() == 1)
|
|
{
|
|
if (theShapeB->Type() != AIS2D_KOI_Datum || theShapeB->Signature() != 1)
|
|
{
|
|
cout<<"vcircle error: 2de argument is unexpected to be a point."<<endl;return 1;
|
|
}
|
|
Handle(AIS2D_InteractiveObject) theShapeC=GetMapOfAIS2D().Find2(argv[4]);
|
|
if (theShapeC->Type()!=AIS2D_KOI_Datum || theShapeC->Signature()!=1 ) {
|
|
cout<<"vcircle error: 3de argument is unexpected to be a point."<<endl;return 1;
|
|
}
|
|
// tag
|
|
Handle(AIS2D_Point) theAIS2DPointA = *(Handle(AIS2D_Point)*)& theShapeA;
|
|
Handle(AIS2D_Point) theAIS2DPointB = *(Handle(AIS2D_Point)*)& theShapeB;
|
|
Handle(AIS2D_Point) theAIS2DPointC = *(Handle(AIS2D_Point)*)& theShapeC;
|
|
|
|
Handle(Geom_Point) myGeomPointA = theAIS2DPointA->Component();
|
|
Handle(Geom_CartesianPoint) myCartPointA = *((Handle(Geom_CartesianPoint)*)& myGeomPointA);
|
|
|
|
Handle(Geom_Point ) myGeomPointB = theAIS2DPointB->Component();
|
|
Handle(Geom_CartesianPoint ) myCartPointB= *((Handle(Geom_CartesianPoint)*)& theAIS2DPointB);
|
|
|
|
Handle(Geom_Point ) myGeomPointBC= theAIS2DPointC->Component();
|
|
Handle(Geom_CartesianPoint ) myCartPointC= *((Handle(Geom_CartesianPoint)*)& theAIS2DPointC);
|
|
|
|
// Test A=B
|
|
if (myCartPointA->X()==myCartPointB->X() && myCartPointA->Y()==myCartPointB->Y() && myCartPointA->Z()==myCartPointB->Z() ) {
|
|
cout<<"vcircle error: Same points."<<endl;return 1;
|
|
}
|
|
// Test A=C
|
|
if (myCartPointA->X()==myCartPointC->X() && myCartPointA->Y()==myCartPointC->Y() && myCartPointA->Z()==myCartPointC->Z() ) {
|
|
cout<<"vcircle error: Same points."<<endl;return 1;
|
|
}
|
|
// Test B=C
|
|
if (myCartPointB->X()==myCartPointC->X() && myCartPointB->Y()==myCartPointC->Y() && myCartPointB->Z()==myCartPointC->Z() ) {
|
|
cout<<"vcircle error: Same points."<<endl;return 1;
|
|
}
|
|
// Construction du cercle
|
|
GC_MakeCircle Cir=GC_MakeCircle (myCartPointA->Pnt(),myCartPointB->Pnt(),myCartPointC->Pnt() );
|
|
Handle (Geom_Circle) theGeomCircle=Cir.Value();
|
|
Handle(AIS2D_Circle) theAIS2DCircle=new AIS2D_Circle(theGeomCircle );
|
|
GetMapOfAIS2D().Bind(theAIS2DCircle,argv[1] );
|
|
TheAIS2DContext()->Display(theAIS2DCircle );
|
|
|
|
}
|
|
// Arguments: ASI_Plane AIS2D_Point Real
|
|
// ===================================
|
|
else if (theShapeA->Type()==AIS2D_KOI_Datum && theShapeA->Signature()==7 ) {
|
|
if (theShapeB->Type()!=AIS2D_KOI_Datum || theShapeB->Signature()!=1 ) {
|
|
cout<<"vcircle error: 2de element is a unexpected to be a point."<<endl;return 1;
|
|
}
|
|
// On verifie que le rayon est bien >=0
|
|
if (atof(argv[4])<=0 ) {cout<<"vcircle error: the radius must be >=0."<<endl;return 1; }
|
|
|
|
// On recupere la normale au Plane.
|
|
Handle(AIS2D_Plane) theAIS2DPlane= *(Handle(AIS2D_Plane)*)& theShapeA;
|
|
Handle(AIS2D_Point) theAIS2DPointB= *(Handle(AIS2D_Point)*)& theShapeB;
|
|
|
|
|
|
// Handle(Geom_Plane ) myGeomPlane= *(Handle(Geom_Plane)*)& (theAIS2DPlane->Component() );
|
|
Handle(Geom_Plane ) myGeomPlane= theAIS2DPlane->Component();
|
|
Handle(Geom_Point ) myGeomPointB = theAIS2DPointB->Component();
|
|
Handle(Geom_CartesianPoint ) myCartPointB= *((Handle(Geom_CartesianPoint)*)& theAIS2DPointB);
|
|
// Handle(Geom_CartesianPoint ) myCartPointB= *(Handle(Geom_CartesianPoint)*)& (theAIS2DPointB->Component() );
|
|
|
|
//Handle(Geom_Axis2Placement) OrigineAndAxii=myGeomPlane->Axis();
|
|
gp_Pln mygpPlane = myGeomPlane->Pln();
|
|
gp_Ax1 thegpAxe = mygpPlane.Axis();
|
|
gp_Dir theDir = thegpAxe.Direction();
|
|
gp_Pnt theCenter=myCartPointB->Pnt();
|
|
Standard_Real TheR = atof(argv[4]);
|
|
GC_MakeCircle Cir=GC_MakeCircle (theCenter, theDir ,TheR);
|
|
Handle (Geom_Circle) theGeomCircle=Cir.Value();
|
|
Handle(AIS2D_Circle) theAIS2DCircle=new AIS2D_Circle(theGeomCircle );
|
|
GetMapOfAIS2D().Bind(theAIS2DCircle,argv[1] );
|
|
TheAIS2DContext()->Display(theAIS2DCircle );
|
|
}
|
|
else // Error
|
|
{
|
|
cout << "v2dcircle error: !st argument is a unexpected type." << endl;
|
|
return 1;
|
|
}
|
|
*/
|
|
//Draw arg : v2dcircle CircleName X Y Radius [Color_index]
|
|
if (GetMapOfAIS2D().IsBound2(name))
|
|
{
|
|
cout << "There is already an object with name " << name << endl;
|
|
return -1;
|
|
}
|
|
Handle(AIS2D_InteractiveObject) aisobj = new AIS2D_InteractiveObject();
|
|
aisobj->SetView(V->View());
|
|
// Handle(Graphic2d_GraphicObject) obj =
|
|
// new Graphic2d_GraphicObject(V->View());
|
|
|
|
Handle(Graphic2d_Circle) circle = new Graphic2d_Circle
|
|
(aisobj, atof(argv[2]), atof(argv[3]), atof(argv[4]));
|
|
|
|
if (argc > 5)
|
|
{
|
|
circle->SetTypeOfPolygonFilling(Graphic2d_TOPF_FILLED);
|
|
circle->SetInteriorColorIndex(atoi(argv[5]));
|
|
}
|
|
|
|
// obj->Display();
|
|
GetMapOfAIS2D().Bind(aisobj, name);
|
|
// TheAIS2DContext()->Display(aisobj, Standard_False);
|
|
aisobj->Display();
|
|
|
|
V->Viewer()->Update();
|
|
}
|
|
else
|
|
{
|
|
TheAIS2DContext()->OpenLocalContext();
|
|
myCurrentIndex = TheAIS2DContext()->IndexOfCurrentLocal();
|
|
|
|
// Active le mode Vertex et face.
|
|
// TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(1));
|
|
// TheAIS2DContext()->ActivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
cout << " Select a vertex or a face." << endl;
|
|
TopoDS_Shape ShapeA = SelectShape2d(5);
|
|
|
|
if (ShapeA.ShapeType() == TopAbs_VERTEX)
|
|
{
|
|
// TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
cout << " Select a different vertex." << endl;
|
|
|
|
TopoDS_Shape ShapeB;
|
|
do
|
|
{
|
|
ShapeB = SelectShape2d(5);
|
|
} while (ShapeB.IsSame(ShapeA));
|
|
|
|
// Selection de ShapeC
|
|
cout << " Select the last vertex." << endl;
|
|
TopoDS_Shape ShapeC;
|
|
do
|
|
{
|
|
ShapeC = SelectShape2d(5);
|
|
} while (ShapeC.IsSame(ShapeA) || ShapeC.IsSame(ShapeB));
|
|
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du cercle
|
|
/*
|
|
gp_Pnt A = BRep_Tool::Pnt(TopoDS::Vertex(ShapeA));
|
|
gp_Pnt B = BRep_Tool::Pnt(TopoDS::Vertex(ShapeB));
|
|
gp_Pnt C = BRep_Tool::Pnt(TopoDS::Vertex(ShapeC));
|
|
|
|
GC_MakeCircle Cir = GC_MakeCircle(A,B,C);
|
|
Handle(Geom_Circle) theGeomCircle = Cir.Value();
|
|
Handle(AIS2D_Circle) theAIS2DCircle = new AIS2D_Circle(theGeomCircle);
|
|
GetMapOfAIS2D().Bind(theAIS2DCircle,argv[1]);
|
|
TheAIS2DContext()->Display(theAIS2DCircle);*/
|
|
}
|
|
// ShapeA est une face.
|
|
else
|
|
{
|
|
cout << " Select a vertex (in your face)." << endl;
|
|
// TheAIS2DContext()->DeactivateStandardMode(AIS2D_ProjShape::SelectionType(4));
|
|
TopoDS_Shape ShapeB = SelectShape2d(5);
|
|
|
|
Standard_Integer theRad;
|
|
do
|
|
{
|
|
cout << " Enter the value of the radius:" << endl;
|
|
cin >> theRad;
|
|
} while (theRad <= 0);
|
|
|
|
TheAIS2DContext()->CloseLocalContext(myCurrentIndex);
|
|
|
|
// Construction du cercle.
|
|
|
|
// On recupere la normale au Plane. tag
|
|
/* TopoDS_Face myFace = TopoDS::Face(ShapeA);
|
|
BRepAdaptor_Surface mySurface (myFace, Standard_False);
|
|
gp_Pln myPlane = mySurface.Plane();
|
|
Handle(Geom_Plane) theGeomPlane = new Geom_Plane (myPlane );
|
|
gp_Pln mygpPlane = theGeomPlane->Pln();
|
|
gp_Ax1 thegpAxe = mygpPlane.Axis();
|
|
gp_Dir theDir = thegpAxe.Direction();
|
|
|
|
// On recupere le centre.
|
|
gp_Pnt theCenter = BRep_Tool::Pnt(TopoDS::Vertex(ShapeB));
|
|
|
|
// On construit l'AIS2D_Circle
|
|
GC_MakeCircle Cir = GC_MakeCircle(theCenter, theDir ,theRad);
|
|
Handle(Geom_Circle) theGeomCircle = Cir.Value();
|
|
Handle(AIS2D_Circle) theAIS2DCircle = new AIS2D_Circle(theGeomCircle);
|
|
GetMapOfAIS2D().Bind(theAIS2DCircle,argv[1] ;
|
|
TheAIS2DContext()->Display(theAIS2DCircle);*/
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ObjectCommands
|
|
//purpose :
|
|
//=======================================================================
|
|
void Viewer2dTest::ObjectCommands (Draw_Interpretor& theCommands)
|
|
{
|
|
const char *group = "2D AIS Viewer - Primitives Creation";
|
|
|
|
// theCommands.Add("v2dtrihedron",
|
|
// "v2dtrihedron name [Xo] [Yo] [Zo] [Zu] [Zv] [Zw] [Xu] [Xv] [Xw]",
|
|
// __FILE__,V2dTrihedron,group);
|
|
|
|
/* theCommands.Add("v2dtri2d",
|
|
"v2dtri2d Name (Selection in the viewer only)",
|
|
__FILE__, V2dTrihedron2D, group);
|
|
|
|
// theCommands.Add("v2dplanetri",
|
|
// "v2dplanetri Name (Selection in the viewer only)",
|
|
// __FILE__, V2dPlaneTrihedron, group);
|
|
|
|
theCommands.Add("v2dsize",
|
|
"v2dsize [name(Default=Current)] [size(Default=100)] ",
|
|
__FILE__, V2dSize, group);
|
|
*/
|
|
theCommands.Add("v2daxis",
|
|
"v2daxis nom [Xa] [Ya] [Xb] [Yb]",
|
|
__FILE__, V2dAxisBuilder, group);
|
|
|
|
/* theCommands.Add("v2daxispara",
|
|
"v2daxispara nom ",
|
|
__FILE__, V2dAxisBuilder, group);
|
|
|
|
theCommands.Add("v2daxisortho",
|
|
"v2daxisotho nom ",
|
|
__FILE__, V2dAxisBuilder, group);
|
|
|
|
theCommands.Add("v2dpoint",
|
|
"v2dpoint PointName [Xa] [Ya]",
|
|
__FILE__, V2dPointBuilder, group);
|
|
*/
|
|
/* theCommands.Add("v2dplane",
|
|
"v2dplane PlaneName [AxisName/PlaneName/PointName] [PointName/PointName/PointName] [Nothing/Nothing/PointName] ",
|
|
__FILE__,V2dPlaneBuilder,group);
|
|
|
|
theCommands.Add("v2dplanepara",
|
|
"v2dplanepara PlaneName ",
|
|
__FILE__,V2dPlaneBuilder,group);
|
|
|
|
theCommands.Add("v2dplaneortho",
|
|
"v2dplaneortho PlaneName ",
|
|
__FILE__,V2dPlaneBuilder,group);
|
|
*/
|
|
// theCommands.Add("v2dline",
|
|
// "v2dline LineName [Xa/PointName] [Ya/PointName] [Xb] [Yb]",
|
|
// __FILE__,V2dLineBuilder,group);
|
|
|
|
theCommands.Add("v2dcircle",
|
|
"v2dcircle CircleName X Y Radius [color_index]",
|
|
__FILE__, V2dCircleBuilder, group);
|
|
}
|