0022792: Globally defined symbol PI conflicts with VTK definition (Intel compiler)
[occt.git] / src / DsgPrs / DsgPrs_ConcentricPresentation.cxx
CommitLineData
7fd59977 1// File: DsgPrs_ConcentricPresentation.cxx
2// Created: Mon Mar 18 16:40:07 1996
3// Author: Flore Lantheaume
4// <fla@filax>
5
6
7#include <DsgPrs_ConcentricPresentation.ixx>
8
9#include <Graphic3d_Group.hxx>
10#include <Graphic3d_Array1OfVertex.hxx>
11#include <Prs3d_LengthAspect.hxx>
12#include <Prs3d_Root.hxx>
13#include <Prs3d_LineAspect.hxx>
14
15#include <gp_Circ.hxx>
16#include <gp_Pnt.hxx>
17#include <gp_Dir.hxx>
18#include <gp_Vec.hxx>
19
20#include <ElCLib.hxx>
21
22void DsgPrs_ConcentricPresentation::Add(
23 const Handle(Prs3d_Presentation)& aPresentation,
24 const Handle(Prs3d_Drawer)& aDrawer,
25 const gp_Pnt& aCenter,
26 const Standard_Real aRadius,
27 const gp_Dir& aNorm,
28 const gp_Pnt& aPoint)
29{
30 Handle(Prs3d_LengthAspect) LA = aDrawer->LengthAspect();
31
32 //Creation et discretisation du plus gros cercle
33 gp_Circ Circ(gp_Ax2(aCenter,aNorm), aRadius);
34 Standard_Integer nbp = 50;
c6541a0c 35 Standard_Real dteta = (2 * M_PI)/nbp;
7fd59977 36 Graphic3d_Array1OfVertex V(1,nbp+1);
37 gp_Pnt ptcur;
38 Standard_Real ucur = 0;
39 Standard_Integer i ;
40 for ( i = 1; i<=nbp; i++) {
41 ptcur = ElCLib::Value(ucur, Circ);
42 V(i).SetCoord(ptcur.X(), ptcur.Y(),ptcur.Z());
43 ucur = ucur + dteta;
44 }
45 V(nbp+1).SetCoord( V(1).X(), V(1).Y(), V(1).Z());
46 Prs3d_Root::CurrentGroup(aPresentation)
47 ->SetPrimitivesAspect(LA->LineAspect()->Aspect());
48 Prs3d_Root::CurrentGroup(aPresentation)->Polyline(V);
49
50 //Creation et discretisation du plus petit cercle
51 Circ.SetRadius(aRadius/2);
52 ucur = 0;
53 for ( i = 1; i<=nbp; i++) {
54 ptcur = ElCLib::Value(ucur, Circ);
55 V(i).SetCoord(ptcur.X(), ptcur.Y(),ptcur.Z());
56 ucur = ucur + dteta;
57 }
58 V(nbp+1).SetCoord( V(1).X(), V(1).Y(), V(1).Z());
59 Prs3d_Root::NewGroup(aPresentation);
60 Prs3d_Root::CurrentGroup(aPresentation)
61 ->SetPrimitivesAspect(LA->LineAspect()->Aspect());
62 Prs3d_Root::CurrentGroup(aPresentation)->Polyline(V);
63
64 //Creation de la croix
65 //1er segment
66 gp_Dir vecnorm(aPoint.XYZ() - aCenter.XYZ() );
67 gp_Vec vec(vecnorm);
68 vec.Multiply(aRadius);
69 gp_Pnt p1 = aCenter.Translated(vec);
70 gp_Pnt p2 = aCenter.Translated(-vec);
71
72 Prs3d_Root::NewGroup(aPresentation);
73 Prs3d_Root::CurrentGroup(aPresentation)->
74 SetPrimitivesAspect(LA->LineAspect()->Aspect());
75 Graphic3d_Array1OfVertex VExt(1,2);
76 VExt(1).SetCoord(p1.X(), p1.Y(), p1.Z());
77 VExt(2).SetCoord(p2.X(), p2.Y(), p2.Z());
78 Prs3d_Root::CurrentGroup(aPresentation)->Polyline(VExt);
79
80 //2ieme segment
81 vec.Cross(aNorm);
82 vecnorm.SetCoord(vec.X(), vec.Y(), vec.Z() );
83 vec.SetXYZ(vecnorm.XYZ());
84 vec.Multiply(aRadius);
85 p1 = aCenter.Translated(vec);
86 p2 = aCenter.Translated(-vec);
87 VExt(1).SetCoord(p1.X(), p1.Y(), p1.Z());
88 VExt(2).SetCoord(p2.X(), p2.Y(), p2.Z());
89
90 Prs3d_Root::NewGroup(aPresentation);
91 Prs3d_Root::CurrentGroup(aPresentation)->
92 SetPrimitivesAspect(LA->LineAspect()->Aspect());
93 Prs3d_Root::CurrentGroup(aPresentation)->Polyline(VExt);
94
95}