0022785: Draw Harness - add possibility to remove a text drawn by the command vdrawtext
[occt.git] / src / AIS / AIS_TextLabel.cxx
1 // Created on: 2014-11-10
2 // Copyright (c) 2014 OPEN CASCADE SAS
3 //
4 // This file is part of Open CASCADE Technology software library.
5 //
6 // This library is free software; you can redistribute it and/or modify it under
7 // the terms of the GNU Lesser General Public License version 2.1 as published
8 // by the Free Software Foundation, with special exception defined in the file
9 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10 // distribution for complete text of the license and disclaimer of any warranty.
11 //
12 // Alternatively, this file may be used under the terms of Open CASCADE
13 // commercial license or contractual agreement.
14
15 #include <AIS_TextLabel.hxx>
16
17 #include <Graphic3d_AspectText3d.hxx>
18
19 #include <Prs3d_Text.hxx>
20 #include <Prs3d_TextAspect.hxx>
21
22 #include <Select3D_SensitivePoint.hxx>
23 #include <SelectMgr_Selection.hxx>
24 #include <SelectMgr_EntityOwner.hxx>
25
26 IMPLEMENT_STANDARD_HANDLE (AIS_TextLabel, AIS_InteractiveObject)
27 IMPLEMENT_STANDARD_RTTIEXT(AIS_TextLabel, AIS_InteractiveObject)
28
29 //=======================================================================
30 //function : AIS_TextLabel
31 //purpose  :
32 //=======================================================================
33 AIS_TextLabel::AIS_TextLabel()
34 : myText       ("?"),
35   myPosition   (0.0, 0.0, 0.0),
36   myFont       ("Courier"),
37   myFontAspect (Font_FA_Regular)
38 {
39   myDrawer->SetTextAspect (new Prs3d_TextAspect());
40
41   SetDisplayMode (0);
42 }
43
44 //=======================================================================
45 //function : SetColor
46 //purpose  :
47 //=======================================================================
48 void AIS_TextLabel::SetColor (const Quantity_Color& theColor)
49 {
50   hasOwnColor = Standard_True;
51   myOwnColor  = theColor;
52   myDrawer->TextAspect()->SetColor (theColor);
53 }
54
55 //=======================================================================
56 //function : SetColor
57 //purpose  :
58 //=======================================================================
59 void AIS_TextLabel::SetColor (const Quantity_NameOfColor theColor)
60 {
61   SetColor (Quantity_Color (theColor));
62 }
63
64 //=======================================================================
65 //function : SetText
66 //purpose  :
67 //=======================================================================
68 void AIS_TextLabel::SetText (const TCollection_ExtendedString& theText)
69 {
70   myText = theText;
71 }
72
73 //=======================================================================
74 //function : SetPosition
75 //purpose  :
76 //=======================================================================
77 void AIS_TextLabel::SetPosition (const gp_Pnt& thePosition)
78 {
79   myPosition = thePosition;
80 }
81
82 //=======================================================================
83 //function : SetHJustification
84 //purpose  :
85 //=======================================================================
86 void AIS_TextLabel::SetHJustification (const Graphic3d_HorizontalTextAlignment theHJust)
87 {
88   myDrawer->TextAspect()->SetHorizontalJustification (theHJust);
89 }
90
91 //=======================================================================
92 //function : SetVJustification
93 //purpose  : Setup vertical justification.
94 //=======================================================================
95 void AIS_TextLabel::SetVJustification (const Graphic3d_VerticalTextAlignment theVJust)
96 {
97   myDrawer->TextAspect()->SetVerticalJustification (theVJust);
98 }
99
100 //=======================================================================
101 //function : SetAngle
102 //purpose  :
103 //=======================================================================
104 void AIS_TextLabel::SetAngle (const Standard_Real theAngle)
105 {
106   myDrawer->TextAspect()->Aspect()->SetTextAngle (theAngle * 180.0 / M_PI);
107 }
108
109 //=======================================================================
110 //function : SetZoom
111 //purpose  :
112 //=======================================================================
113 void AIS_TextLabel::SetZoomable (const Standard_Boolean theIsZoomable)
114 {
115   myDrawer->TextAspect()->Aspect()->SetTextZoomable (theIsZoomable);
116 }
117
118 //=======================================================================
119 //function : SetHeight
120 //purpose  :
121 //=======================================================================
122 void AIS_TextLabel::SetHeight (const Standard_Real theHeight)
123 {
124   myDrawer->TextAspect()->SetHeight (theHeight);
125 }
126
127 //=======================================================================
128 //function : SetAngle
129 //purpose  :
130 //=======================================================================
131 void AIS_TextLabel::SetFontAspect (const Font_FontAspect theFontAspect)
132 {
133   myDrawer->TextAspect()->Aspect()->SetTextFontAspect (theFontAspect);
134 }
135
136 //=======================================================================
137 //function : SetFont
138 //purpose  :
139 //=======================================================================
140 void AIS_TextLabel::SetFont (Standard_CString theFont)
141 {
142   myFont = theFont;
143   myDrawer->TextAspect()->SetFont (myFont.ToCString());
144 }
145
146 //=======================================================================
147 //function : Compute
148 //purpose  :
149 //=======================================================================
150 void AIS_TextLabel::Compute (const Handle(PrsMgr_PresentationManager3d)& /*thePrsMgr*/,
151                              const Handle(Prs3d_Presentation)&             thePrs,
152                              const Standard_Integer                        theMode)
153 {
154   switch (theMode)
155   {
156     case 0:
157     {
158       Handle(Prs3d_TextAspect) anAsp = myDrawer->TextAspect();
159       Prs3d_Text::Draw (thePrs, anAsp, myText, myPosition);
160       break;
161     }
162   }
163 }
164
165 //=======================================================================
166 //function : ComputeSelection
167 //purpose  :
168 //=======================================================================
169 void AIS_TextLabel::ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
170                                       const Standard_Integer             theMode)
171 {
172   switch (theMode)
173   {
174     case 0:
175     {
176       Handle(SelectMgr_EntityOwner)   anEntityOwner   = new SelectMgr_EntityOwner (this, 10);
177       Handle(Select3D_SensitivePoint) aSensitivePoint = new Select3D_SensitivePoint (anEntityOwner, myPosition);
178       theSelection->Add (aSensitivePoint);
179       break;
180     }
181   }
182 }