d7223c76 |
1 | // Copyright (c) 2013 OPEN CASCADE SAS |
2 | // |
3 | // The content of this file is subject to the Open CASCADE Technology Public |
4 | // License Version 6.5 (the "License"). You may not use the content of this file |
5 | // except in compliance with the License. Please obtain a copy of the License |
6 | // at http://www.opencascade.org and read it completely before using this file. |
7 | // |
8 | // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its |
9 | // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. |
10 | // |
11 | // The Original Code and all software distributed under the License is |
12 | // distributed on an "AS IS" basis, without warranty of any kind, and the |
13 | // Initial Developer hereby disclaims all such warranties, including without |
14 | // limitation, any warranties of merchantability, fitness for a particular |
15 | // purpose or non-infringement. Please see the License for the specific terms |
16 | // and conditions governing the rights and limitations under the License. |
17 | |
18 | #include <DsgPrs_DatumPrs.hxx> |
19 | #include <gp_Dir.hxx> |
20 | #include <gp_Pnt.hxx> |
21 | #include <gp_Ax2.hxx> |
22 | #include <Graphic3d_Group.hxx> |
23 | #include <Graphic3d_AspectLine3d.hxx> |
24 | #include <Graphic3d_ArrayOfSegments.hxx> |
25 | #include <Prs3d_Arrow.hxx> |
26 | #include <Prs3d_LineAspect.hxx> |
27 | #include <Prs3d_DatumAspect.hxx> |
28 | #include <Prs3d_TextAspect.hxx> |
29 | #include <Prs3d_ArrowAspect.hxx> |
30 | |
31 | void DsgPrs_DatumPrs::Add (const Handle(Prs3d_Presentation)& thePresentation, |
32 | const gp_Ax2& theDatum, |
33 | const Handle(Prs3d_Drawer)& theDrawer) |
34 | { |
35 | Handle(Prs3d_DatumAspect) aDatumAspect = theDrawer->DatumAspect(); |
36 | Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup(thePresentation); |
37 | |
38 | Quantity_Color aColor; |
39 | Aspect_TypeOfLine aTypeOfLine; |
40 | Standard_Real aWidth; |
41 | aDatumAspect->FirstAxisAspect()->Aspect()->Values(aColor, aTypeOfLine, aWidth); |
42 | |
43 | gp_Ax2 anAxis(theDatum); |
44 | gp_Pnt anOrigin = anAxis.Location(); |
45 | gp_Dir aXDir = anAxis.XDirection(); |
46 | gp_Dir aYDir = anAxis.YDirection(); |
47 | gp_Dir aZDir = anAxis.Direction(); |
48 | |
49 | Quantity_Length anAxisLength; |
50 | Quantity_Length anArrowAngle = theDrawer->ArrowAspect()->Angle(); |
51 | |
52 | Handle(Graphic3d_ArrayOfSegments) aPrims; |
53 | if (aDatumAspect->DrawFirstAndSecondAxis()) |
54 | { |
55 | anAxisLength = aDatumAspect->FirstAxisLength(); |
56 | const gp_Pnt aPoint1(anOrigin.XYZ() + aXDir.XYZ()*anAxisLength); |
57 | |
58 | aGroup->SetPrimitivesAspect(aDatumAspect->FirstAxisAspect()->Aspect()); |
59 | aPrims = new Graphic3d_ArrayOfSegments(2); |
60 | aPrims->AddVertex(anOrigin); |
61 | aPrims->AddVertex(aPoint1); |
62 | aGroup->AddPrimitiveArray(aPrims); |
63 | |
64 | aGroup->SetPrimitivesAspect(theDrawer->ArrowAspect()->Aspect()); |
65 | Prs3d_Arrow::Draw(thePresentation,aPoint1,aXDir,anArrowAngle,anAxisLength/10.); |
66 | aGroup->SetPrimitivesAspect(theDrawer->TextAspect()->Aspect()); |
67 | Graphic3d_Vertex aVertex1(aPoint1.X(),aPoint1.Y(),aPoint1.Z()); |
68 | aGroup->Text(Standard_CString("X"), aVertex1,16.); |
69 | |
70 | anAxisLength = aDatumAspect->SecondAxisLength(); |
71 | const gp_Pnt aPoint2(anOrigin.XYZ() + aYDir.XYZ()*anAxisLength); |
72 | |
73 | aGroup->SetPrimitivesAspect(aDatumAspect->SecondAxisAspect()->Aspect()); |
74 | aPrims = new Graphic3d_ArrayOfSegments(2); |
75 | aPrims->AddVertex(anOrigin); |
76 | aPrims->AddVertex(aPoint2); |
77 | aGroup->AddPrimitiveArray(aPrims); |
78 | |
79 | aGroup->SetPrimitivesAspect(theDrawer->ArrowAspect()->Aspect()); |
80 | Prs3d_Arrow::Draw(thePresentation,aPoint2,aYDir,anArrowAngle,anAxisLength/10.); |
81 | aGroup->SetPrimitivesAspect(theDrawer->TextAspect()->Aspect()); |
82 | Graphic3d_Vertex aVertex2(aPoint2.X(),aPoint2.Y(),aPoint2.Z()); |
83 | aGroup->Text(Standard_CString("Y"), aVertex2,16.); |
84 | } |
85 | if (aDatumAspect->DrawThirdAxis()) |
86 | { |
87 | anAxisLength = aDatumAspect->ThirdAxisLength(); |
88 | const gp_Pnt aPoint3(anOrigin.XYZ() + aZDir.XYZ()*anAxisLength); |
89 | |
90 | aGroup->SetPrimitivesAspect(aDatumAspect->ThirdAxisAspect()->Aspect()); |
91 | aPrims = new Graphic3d_ArrayOfSegments(2); |
92 | aPrims->AddVertex(anOrigin); |
93 | aPrims->AddVertex(aPoint3); |
94 | aGroup->AddPrimitiveArray(aPrims); |
95 | |
96 | aGroup->SetPrimitivesAspect(theDrawer->ArrowAspect()->Aspect()); |
97 | Prs3d_Arrow::Draw(thePresentation,aPoint3,aZDir,anArrowAngle,anAxisLength/10.); |
98 | aGroup->SetPrimitivesAspect(theDrawer->TextAspect()->Aspect()); |
99 | Graphic3d_Vertex aVertex3(aPoint3.X(),aPoint3.Y(),aPoint3.Z()); |
100 | aGroup->Text(Standard_CString("Z"), aVertex3,16.); |
101 | } |
102 | } |
103 | |