Commit | Line | Data |
---|---|---|
b311480e | 1 | // Created on: 1995-10-09 |
2 | // Created by: Arnaud BOUZY/Odile Olivier | |
3 | // Copyright (c) 1995-1999 Matra Datavision | |
4 | // Copyright (c) 1999-2012 OPEN CASCADE SAS | |
5 | // | |
6 | // The content of this file is subject to the Open CASCADE Technology Public | |
7 | // License Version 6.5 (the "License"). You may not use the content of this file | |
8 | // except in compliance with the License. Please obtain a copy of the License | |
9 | // at http://www.opencascade.org and read it completely before using this file. | |
10 | // | |
11 | // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its | |
12 | // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. | |
13 | // | |
14 | // The Original Code and all software distributed under the License is | |
15 | // distributed on an "AS IS" basis, without warranty of any kind, and the | |
16 | // Initial Developer hereby disclaims all such warranties, including without | |
17 | // limitation, any warranties of merchantability, fitness for a particular | |
18 | // purpose or non-infringement. Please see the License for the specific terms | |
19 | // and conditions governing the rights and limitations under the License. | |
20 | ||
7fd59977 | 21 | |
b8ddfc2f | 22 | //GER61351 //GG_171199 Enable to set an object RGB color instead a restricted object NameOfColor. |
7fd59977 | 23 | |
24 | #define IMP120100 // GG Add SetTextColor() and SetArrowColor() methods | |
25 | ||
26 | #include <AIS_Trihedron.ixx> | |
27 | #include <DsgPrs_DatumPrs.hxx> | |
28 | #include <SelectBasics_EntityOwner.hxx> | |
29 | #include <SelectMgr_EntityOwner.hxx> | |
30 | #include <Select3D_SensitiveSegment.hxx> | |
31 | #include <Select3D_SensitiveFace.hxx> | |
32 | #include <Select3D_SensitivePoint.hxx> | |
33 | #include <Geom_Axis2Placement.hxx> | |
34 | #include <Geom_Line.hxx> | |
35 | #include <Geom_Point.hxx> | |
36 | #include <Geom_Plane.hxx> | |
37 | #include <Geom_CartesianPoint.hxx> | |
38 | #include <gp_Dir.hxx> | |
39 | #include <gp_Ax1.hxx> | |
40 | #include <gp_Ax2.hxx> | |
41 | #include <gp_Pnt.hxx> | |
42 | #include <gp_Vec.hxx> | |
43 | #include <Prs3d_Drawer.hxx> | |
44 | #include <Prs3d_LineAspect.hxx> | |
45 | #include <Prs3d_TextAspect.hxx> | |
46 | #include <Prs3d_ArrowAspect.hxx> | |
47 | #include <Prs3d_DatumAspect.hxx> | |
48 | #include <Graphic3d_AspectLine3d.hxx> | |
49 | #include <Graphic3d_Structure.hxx> | |
50 | #include <Graphic3d_MaterialAspect.hxx> | |
51 | #include <Graphic3d_AspectFillArea3d.hxx> | |
52 | #include <Aspect_TypeOfLine.hxx> | |
53 | #include <AIS_Drawer.hxx> | |
54 | #include <AIS_Plane.hxx> | |
55 | #include <AIS_Axis.hxx> | |
56 | #include <AIS_Point.hxx> | |
57 | #include <UnitsAPI.hxx> | |
58 | ||
59 | #include <Select3D_SensitiveBox.hxx> | |
60 | #include <Select3D_SensitiveTriangle.hxx> | |
61 | #include <TColgp_Array1OfPnt.hxx> | |
62 | ||
63 | ||
64 | ||
65 | //======================================================================= | |
66 | //function : AIS_Trihedron | |
67 | //purpose : | |
68 | //======================================================================= | |
69 | AIS_Trihedron::AIS_Trihedron(const Handle(Geom_Axis2Placement)& aComponent): | |
70 | myComponent(aComponent), | |
71 | myHasOwnSize(Standard_False) | |
72 | #ifdef IMP120100 | |
73 | ,myHasOwnTextColor(Standard_False) | |
74 | ,myHasOwnArrowColor(Standard_False) | |
75 | #endif | |
76 | ||
77 | { LoadSubObjects();} | |
78 | ||
79 | ||
80 | ||
81 | //======================================================================= | |
82 | //function : SetComponent | |
83 | //purpose : | |
84 | //======================================================================= | |
85 | ||
86 | void AIS_Trihedron::SetComponent(const Handle(Geom_Axis2Placement)& aComponent) | |
87 | { | |
88 | myComponent = aComponent; | |
29d43f9c A |
89 | |
90 | // Remove from current context and nullify objects to update | |
91 | Handle(AIS_InteractiveContext) anAISContext = GetContext(); | |
92 | Standard_Boolean hasContext = (anAISContext.IsNull() == Standard_False); | |
93 | Standard_Integer anIdx; | |
94 | for (anIdx = 0; anIdx < 7; anIdx++) | |
95 | { | |
96 | // Deselect object | |
97 | if (hasContext) | |
98 | { | |
99 | if (anAISContext->IsSelected (myShapes[anIdx])) | |
100 | anAISContext->AddOrRemoveSelected (myShapes[anIdx], Standard_False); | |
101 | ||
102 | anAISContext->Remove (myShapes[anIdx], Standard_False); | |
103 | } | |
104 | myShapes[anIdx].Nullify(); | |
105 | } | |
106 | ||
7fd59977 | 107 | LoadSubObjects(); |
108 | } | |
109 | ||
29d43f9c A |
110 | //======================================================================= |
111 | //function : SetLocation | |
112 | //purpose : | |
113 | //======================================================================= | |
114 | ||
115 | void AIS_Trihedron::SetLocation(const TopLoc_Location& aLoc) | |
116 | { | |
117 | // Update location to the subshapes | |
118 | Standard_Integer anIdx; | |
119 | for (anIdx = 0; anIdx < 7; anIdx++) | |
120 | myShapes[anIdx]->SetLocation (aLoc); | |
121 | ||
122 | AIS_InteractiveObject::SetLocation (aLoc); | |
123 | } | |
7fd59977 | 124 | |
125 | //======================================================================= | |
126 | //function : SetSize | |
127 | //purpose : | |
128 | //======================================================================= | |
129 | void AIS_Trihedron::SetSize(const Standard_Real aValue) | |
130 | { | |
131 | myHasOwnSize = Standard_True; | |
132 | if(!myDrawer->HasDatumAspect()){ | |
133 | Handle (Prs3d_DatumAspect) DA = new Prs3d_DatumAspect(); | |
134 | myDrawer->SetDatumAspect(DA); | |
135 | } | |
136 | ||
137 | myDrawer->DatumAspect()->SetAxisLength(aValue,aValue,aValue); | |
138 | ||
139 | for(Standard_Integer i=4;i<=6;i++) | |
140 | (*((Handle(AIS_Plane)*)&myShapes[i]))->SetSize(aValue); | |
141 | ||
142 | Update(); | |
143 | UpdateSelection(); | |
144 | } | |
145 | ||
146 | ||
147 | ||
148 | //======================================================================= | |
149 | //function : UnsetSize | |
81bba717 | 150 | //purpose : if the object has 1 color, the default size of the |
151 | // drawer is reproduced, otherwise DatumAspect becomes null | |
7fd59977 | 152 | //======================================================================= |
153 | ||
154 | void AIS_Trihedron::UnsetSize() | |
155 | { | |
156 | if(!myHasOwnSize) return; | |
157 | ||
158 | myHasOwnSize = Standard_False; | |
159 | if(hasOwnColor){ | |
160 | const Handle(Prs3d_DatumAspect)& DA = myDrawer->Link()->DatumAspect(); | |
161 | myDrawer->DatumAspect()->SetAxisLength(DA->FirstAxisLength(), | |
162 | DA->SecondAxisLength(), | |
163 | DA->ThirdAxisLength()); | |
164 | } | |
165 | else | |
166 | myDrawer->DatumAspect().Nullify(); | |
167 | Update(); | |
168 | UpdateSelection(); | |
169 | ||
170 | } | |
171 | ||
172 | //======================================================================= | |
173 | //function : Size | |
174 | //purpose : | |
175 | //======================================================================= | |
176 | ||
177 | Standard_Real AIS_Trihedron::Size() const | |
178 | { | |
179 | if(myDrawer->HasDatumAspect()){ | |
180 | myDrawer->Link()->DatumAspect(); // ? to ensure that myDrawer->myLink is not null for next call ? | |
181 | return myDrawer->DatumAspect()->FirstAxisLength(); | |
182 | } | |
183 | else | |
184 | //return the Defaut value | |
185 | return 100. ; | |
186 | ||
187 | ||
188 | } | |
189 | ||
190 | //======================================================================= | |
191 | //function : XAxis | |
192 | //purpose : | |
193 | //======================================================================= | |
194 | Handle(AIS_Axis) AIS_Trihedron::XAxis() const | |
195 | { | |
196 | Handle(AIS_Axis) anAxis = Handle(AIS_Axis)::DownCast(myShapes[1]); | |
197 | if (anAxis.IsNull()) anAxis = new AIS_Axis (myComponent,AIS_TOAX_XAxis); | |
198 | return anAxis; | |
199 | } | |
200 | ||
201 | //======================================================================= | |
202 | //function : YAxis | |
203 | //purpose : | |
204 | //======================================================================= | |
205 | Handle(AIS_Axis) AIS_Trihedron::YAxis() const | |
206 | { | |
207 | Handle(AIS_Axis) anAxis = Handle(AIS_Axis)::DownCast(myShapes[2]); | |
208 | if (anAxis.IsNull()) anAxis = new AIS_Axis (myComponent,AIS_TOAX_YAxis); | |
209 | return anAxis; | |
210 | } | |
211 | ||
212 | //======================================================================= | |
213 | //function : Axis | |
214 | //purpose : | |
215 | //======================================================================= | |
216 | Handle(AIS_Axis) AIS_Trihedron::Axis() const | |
217 | { | |
218 | Handle(AIS_Axis) anAxis = Handle(AIS_Axis)::DownCast(myShapes[3]); | |
219 | if (anAxis.IsNull()) anAxis = new AIS_Axis (myComponent,AIS_TOAX_ZAxis); | |
220 | return anAxis; | |
221 | } | |
222 | ||
223 | //======================================================================= | |
224 | //function : Position | |
225 | //purpose : | |
226 | //======================================================================= | |
227 | Handle(AIS_Point) AIS_Trihedron::Position() const | |
228 | { | |
229 | Handle(AIS_Point) aPt = Handle(AIS_Point)::DownCast(myShapes[0]); | |
230 | if (aPt.IsNull()) { | |
231 | gp_Pnt aPnt = myComponent->Ax2().Location(); | |
232 | Handle(Geom_Point) aPoint = new Geom_CartesianPoint(aPnt); | |
233 | aPt = new AIS_Point (aPoint); | |
234 | } | |
235 | return aPt; | |
236 | } | |
237 | ||
238 | //======================================================================= | |
239 | //function : XYPlane | |
240 | //purpose : | |
241 | //======================================================================= | |
242 | Handle(AIS_Plane) AIS_Trihedron::XYPlane() const | |
243 | { | |
244 | Handle(AIS_Plane) aPl = Handle(AIS_Plane)::DownCast(myShapes[4]); | |
245 | if (aPl.IsNull()) aPl = new AIS_Plane (myComponent,AIS_TOPL_XYPlane); | |
246 | return aPl; | |
247 | } | |
248 | ||
249 | //======================================================================= | |
250 | //function : XZPlane | |
251 | //purpose : | |
252 | //======================================================================= | |
253 | Handle(AIS_Plane) AIS_Trihedron::XZPlane() const | |
254 | { | |
255 | Handle(AIS_Plane) aPl = Handle(AIS_Plane)::DownCast(myShapes[5]); | |
256 | if (aPl.IsNull()) aPl = new AIS_Plane (myComponent,AIS_TOPL_XZPlane); | |
257 | return aPl; | |
258 | } | |
259 | ||
260 | //======================================================================= | |
261 | //function : YZPlane | |
262 | //purpose : | |
263 | //======================================================================= | |
264 | Handle(AIS_Plane) AIS_Trihedron::YZPlane() const | |
265 | { | |
266 | Handle(AIS_Plane) aPl = Handle(AIS_Plane)::DownCast(myShapes[6]); | |
267 | if (aPl.IsNull()) aPl = new AIS_Plane (myComponent,AIS_TOPL_YZPlane); | |
268 | return aPl; | |
269 | } | |
270 | ||
271 | //======================================================================= | |
272 | //function : Compute | |
273 | //purpose : | |
274 | //======================================================================= | |
275 | void AIS_Trihedron::Compute( | |
276 | const Handle(PrsMgr_PresentationManager3d)& /*aPresentationManager*/, | |
277 | const Handle(Prs3d_Presentation)& aPresentation, | |
278 | const Standard_Integer aMode) | |
279 | { | |
280 | aPresentation->Clear(); | |
281 | ||
7fd59977 | 282 | aPresentation->SetInfiniteState (Standard_True); |
283 | switch(aMode){ | |
284 | case 0: | |
285 | DsgPrs_DatumPrs::Add(aPresentation,myComponent->Ax2(),myDrawer); | |
286 | break; | |
287 | case 1: | |
288 | break; | |
289 | case 2: | |
290 | break; | |
291 | } | |
292 | } | |
293 | ||
294 | //======================================================================= | |
295 | //function : Compute | |
296 | //purpose : | |
297 | //======================================================================= | |
298 | ||
299 | void AIS_Trihedron::Compute(const Handle_Prs3d_Projector& aProjector, | |
300 | const Handle_Geom_Transformation& aTransformation, | |
301 | const Handle_Prs3d_Presentation& aPresentation) | |
302 | { | |
303 | // Standard_NotImplemented::Raise("AIS_Trihedron::Compute(const Handle_Prs3d_Projector&, const Handle_Geom_Transformation&, const Handle_Prs3d_Presentation&)"); | |
304 | PrsMgr_PresentableObject::Compute( aProjector , aTransformation , aPresentation) ; | |
305 | } | |
306 | ||
307 | //======================================================================= | |
308 | //function : ComputeSelection | |
309 | //purpose : | |
310 | //======================================================================= | |
311 | ||
312 | void AIS_Trihedron::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection, | |
313 | const Standard_Integer aMode) | |
314 | { | |
81bba717 | 315 | // retrieve the tops of the trihedron. |
29d43f9c | 316 | Standard_Integer Prior, anIdx; |
7fd59977 | 317 | Handle(SelectMgr_EntityOwner) eown; |
318 | TColgp_Array1OfPnt PP(1,4),PO(1,4); | |
319 | ExtremityPoints(PP); | |
29d43f9c A |
320 | |
321 | // remove shapes from active selections | |
322 | Handle(AIS_InteractiveContext) anAISContext = GetContext(); | |
323 | if (!anAISContext.IsNull()) | |
324 | for (anIdx = 0; anIdx < 7; anIdx++) | |
325 | { | |
326 | // Deselect object | |
327 | if (anAISContext->IsSelected (myShapes[anIdx])) | |
328 | anAISContext->AddOrRemoveSelected (myShapes[anIdx], Standard_False); | |
329 | ||
330 | anAISContext->Remove (myShapes[anIdx], Standard_False); | |
331 | } | |
332 | ||
7fd59977 | 333 | switch (aMode) { |
334 | case 0: | |
81bba717 | 335 | { // complete triedron only 1 owner : this... priority 5 (same as faces) |
7fd59977 | 336 | Prior = 5; |
337 | eown = new SelectMgr_EntityOwner(this,Prior); | |
338 | for (Standard_Integer i=1; i<=3;i++) | |
339 | aSelection->Add(new Select3D_SensitiveSegment(eown,PP(1),PP(i+1))); | |
340 | break; | |
341 | } | |
342 | case 1: | |
81bba717 | 343 | { //origin : |
7fd59977 | 344 | Prior = 8; |
345 | eown= new SelectMgr_EntityOwner(myShapes[0],Prior); | |
346 | ||
347 | aSelection->Add(new Select3D_SensitivePoint (eown,myComponent->Location())); | |
29d43f9c A |
348 | // If the trihedron's shapes display and selection modes are the same |
349 | // the shapes are still displayed after selection, so we need to | |
350 | // use different presentation and hide it by nullifying | |
351 | if (!anAISContext.IsNull()) | |
352 | { | |
353 | anAISContext->Display (myShapes[0], 1, 0, Standard_False); | |
354 | anAISContext->ClearPrs (myShapes[0], 1, Standard_False); | |
355 | } | |
356 | ||
7fd59977 | 357 | break; |
358 | } | |
359 | case 2: | |
81bba717 | 360 | { //axes ... priority 7 |
7fd59977 | 361 | Prior = 7; |
362 | for (Standard_Integer i=1; i<=3;i++){ | |
363 | eown= new SelectMgr_EntityOwner(myShapes[i],Prior); | |
364 | aSelection->Add(new Select3D_SensitiveSegment(eown,PP(1),PP(i+1))); | |
365 | ||
366 | } | |
29d43f9c A |
367 | |
368 | // If the trihedron's shapes display and selection modes are the same | |
369 | // the shapes are still displayed after selection, so we need to | |
370 | // use different presentation and hide it by nullifying | |
371 | AIS_TypeOfAxis anAxisType; | |
372 | if (!anAISContext.IsNull()) | |
373 | for (anIdx = 1; anIdx <= 3; anIdx++) | |
374 | { | |
375 | // update AIS_Axis for selection | |
376 | Handle(AIS_Axis) anAxis = Handle(AIS_Axis)::DownCast(myShapes[anIdx]); | |
377 | Handle(AIS_Drawer) aDrawer = anAxis->Attributes(); | |
378 | Handle(Prs3d_DatumAspect) aDatum = myDrawer->DatumAspect(); | |
379 | aDrawer->DatumAspect()->SetAxisLength (aDatum->FirstAxisLength(), | |
380 | aDatum->SecondAxisLength(), | |
381 | aDatum->ThirdAxisLength()); | |
382 | anAxisType = anAxis->TypeOfAxis(); | |
383 | anAxis->SetAxis2Placement (myComponent, anAxisType); | |
384 | ||
385 | // display | |
386 | anAISContext->Display (myShapes[anIdx], 1, 0, Standard_False); | |
387 | anAISContext->ClearPrs (myShapes[anIdx], 1, Standard_False); | |
388 | } | |
389 | ||
7fd59977 | 390 | break; |
391 | } | |
392 | ||
393 | case 3: | |
81bba717 | 394 | { // main planes priority 6 |
7fd59977 | 395 | // PO(1) = PP(1); |
396 | // PO(4) = PP(1); | |
397 | Prior =5; | |
398 | ||
399 | ||
400 | eown= new SelectMgr_EntityOwner(myShapes[4],Prior); | |
401 | // PO(2) = PP(2);PO(3) = PP(3); | |
402 | aSelection->Add(new Select3D_SensitiveTriangle(eown,PP(1),PP(2),PP(3))); | |
403 | ||
404 | eown= new SelectMgr_EntityOwner(myShapes[5],Prior); | |
405 | // PO(2) = PP(3);PO(3) = PP(4); | |
406 | aSelection->Add(new Select3D_SensitiveTriangle(eown,PP(1),PP(2),PP(4))); | |
407 | ||
408 | eown= new SelectMgr_EntityOwner(myShapes[6],Prior); | |
409 | // PO(2) = PP(4);PO(3) = PP(2); | |
410 | aSelection->Add(new Select3D_SensitiveTriangle(eown,PP(1),PP(3),PP(4))); | |
411 | ||
29d43f9c A |
412 | // If the trihedron's shapes display and selection modes are the same |
413 | // the shapes are still displayed after selection, so we need to | |
414 | // use different presentation and hide it by nullifying | |
415 | if (!anAISContext.IsNull()) | |
416 | for (anIdx = 4; anIdx < 7; anIdx++) | |
417 | { | |
418 | anAISContext->Display (myShapes[anIdx], 1, 0, Standard_False); | |
419 | anAISContext->ClearPrs (myShapes[anIdx], 1, Standard_False); | |
420 | } | |
7fd59977 | 421 | } |
422 | } | |
423 | ||
424 | } | |
425 | ||
426 | //======================================================================= | |
427 | //function : SetColor | |
428 | //purpose : | |
429 | //======================================================================= | |
430 | ||
431 | void AIS_Trihedron::SetColor(const Quantity_NameOfColor aCol) | |
7fd59977 | 432 | { |
433 | SetColor(Quantity_Color(aCol)); | |
434 | } | |
435 | ||
436 | void AIS_Trihedron::SetColor(const Quantity_Color &aCol) | |
7fd59977 | 437 | { |
438 | hasOwnColor=Standard_True; | |
439 | myOwnColor = aCol; | |
440 | ||
441 | if(!myDrawer->HasDatumAspect()){ | |
442 | Handle (Prs3d_DatumAspect) DA = new Prs3d_DatumAspect(); | |
443 | ||
444 | DA->SetAxisLength(myDrawer->DatumAspect()->FirstAxisLength(), | |
445 | myDrawer->DatumAspect()->SecondAxisLength(), | |
446 | myDrawer->DatumAspect()->ThirdAxisLength()); | |
447 | myDrawer->SetDatumAspect(DA); | |
448 | } | |
449 | myDrawer->DatumAspect()->FirstAxisAspect()->SetColor(aCol); | |
450 | myDrawer->DatumAspect()->SecondAxisAspect()->SetColor(aCol); | |
451 | myDrawer->DatumAspect()->ThirdAxisAspect()->SetColor(aCol); | |
452 | ||
453 | } | |
454 | ||
455 | //======================================================================= | |
456 | //function : SetTextColor | |
457 | //purpose : | |
458 | //======================================================================= | |
459 | ||
460 | #ifdef IMP120100 | |
461 | void AIS_Trihedron::SetTextColor(const Quantity_NameOfColor aCol) | |
462 | { | |
463 | myHasOwnTextColor = Standard_True; | |
464 | myOwnTextColor = aCol; | |
465 | ||
466 | if(!myDrawer->HasDatumAspect()){ | |
467 | Handle (Prs3d_DatumAspect) DA = new Prs3d_DatumAspect(); | |
468 | ||
469 | DA->SetAxisLength(myDrawer->DatumAspect()->FirstAxisLength(), | |
470 | myDrawer->DatumAspect()->SecondAxisLength(), | |
471 | myDrawer->DatumAspect()->ThirdAxisLength()); | |
472 | myDrawer->SetDatumAspect(DA); | |
473 | } | |
474 | Handle(Prs3d_TextAspect) aspect = myDrawer->TextAspect(); | |
475 | aspect->SetColor(aCol); | |
476 | myDrawer->SetTextAspect(aspect); | |
477 | } | |
478 | ||
479 | void AIS_Trihedron::SetArrowColor(const Quantity_NameOfColor aCol) | |
480 | { | |
481 | myHasOwnArrowColor = Standard_True; | |
482 | myOwnArrowColor = aCol; | |
483 | ||
484 | if(!myDrawer->HasDatumAspect()){ | |
485 | Handle (Prs3d_DatumAspect) DA = new Prs3d_DatumAspect(); | |
486 | ||
487 | DA->SetAxisLength(myDrawer->DatumAspect()->FirstAxisLength(), | |
488 | myDrawer->DatumAspect()->SecondAxisLength(), | |
489 | myDrawer->DatumAspect()->ThirdAxisLength()); | |
490 | myDrawer->SetDatumAspect(DA); | |
491 | } | |
492 | Handle(Prs3d_ArrowAspect) aspect = myDrawer->ArrowAspect(); | |
493 | aspect->SetColor(aCol); | |
494 | myDrawer->SetArrowAspect(aspect); | |
495 | } | |
496 | ||
497 | //======================================================================= | |
498 | Standard_Boolean AIS_Trihedron::HasTextColor() const { | |
499 | ||
500 | return myHasOwnTextColor; | |
501 | } | |
502 | ||
503 | //======================================================================= | |
504 | Quantity_NameOfColor AIS_Trihedron::TextColor() const { | |
505 | ||
506 | return myOwnTextColor; | |
507 | } | |
508 | ||
509 | //======================================================================= | |
510 | Standard_Boolean AIS_Trihedron::HasArrowColor() const { | |
511 | ||
512 | return myHasOwnArrowColor; | |
513 | } | |
514 | ||
515 | //======================================================================= | |
516 | Quantity_NameOfColor AIS_Trihedron::ArrowColor() const { | |
517 | ||
518 | return myOwnArrowColor; | |
519 | } | |
520 | #endif | |
521 | ||
7fd59977 | 522 | |
523 | //======================================================================= | |
524 | //function : Compute | |
525 | //purpose : to avoid warning | |
526 | //======================================================================= | |
527 | void AIS_Trihedron::Compute(const Handle(Prs3d_Projector)&, | |
528 | const Handle(Prs3d_Presentation)&) | |
529 | { | |
530 | } | |
531 | //======================================================================= | |
532 | //function : Type | |
533 | //purpose : | |
534 | //======================================================================= | |
535 | ||
536 | AIS_KindOfInteractive AIS_Trihedron::Type() const | |
537 | {return AIS_KOI_Datum;} | |
538 | ||
539 | ||
540 | //======================================================================= | |
541 | //function : Signature | |
542 | //purpose : | |
543 | //======================================================================= | |
544 | ||
545 | Standard_Integer AIS_Trihedron::Signature() const | |
546 | {return 3;} | |
547 | ||
548 | //======================================================================= | |
549 | //function : ExtremityPoints | |
550 | //purpose : to avoid warning | |
551 | //======================================================================= | |
552 | void AIS_Trihedron::ExtremityPoints(TColgp_Array1OfPnt& PP) const | |
553 | { | |
554 | gp_Ax2 theax(myComponent->Ax2()); | |
555 | PP(1) = theax.Location(); | |
556 | ||
557 | Standard_Real len = myDrawer->DatumAspect()->FirstAxisLength(); | |
558 | gp_Vec vec = theax.XDirection(); | |
559 | vec *= len; | |
560 | PP(2) = PP(1).Translated(vec); | |
561 | ||
562 | len = myDrawer->DatumAspect()->SecondAxisLength(); | |
563 | vec = theax.YDirection(); | |
564 | vec *= len; | |
565 | PP(3) = PP(1).Translated(vec); | |
566 | ||
567 | len = myDrawer->DatumAspect()->ThirdAxisLength(); | |
568 | vec = theax.Direction(); | |
569 | vec *= len; | |
570 | PP(4) = PP(1).Translated(vec); | |
571 | } | |
572 | ||
573 | //======================================================================= | |
574 | //function : AcceptDisplayMode | |
575 | //purpose : | |
576 | //======================================================================= | |
577 | ||
578 | Standard_Boolean AIS_Trihedron:: | |
579 | AcceptDisplayMode(const Standard_Integer aMode) const | |
580 | {return aMode == 0;} | |
581 | ||
582 | ||
583 | ||
584 | //======================================================================= | |
585 | //function : UnsetColor | |
586 | //purpose : | |
587 | //======================================================================= | |
588 | ||
589 | void AIS_Trihedron::UnsetColor() | |
590 | { | |
591 | hasOwnColor=Standard_False; | |
592 | myOwnColor = Quantity_NOC_LIGHTSTEELBLUE4; | |
593 | myDrawer->DatumAspect()->FirstAxisAspect()->SetColor(myOwnColor); | |
594 | myDrawer->DatumAspect()->SecondAxisAspect()->SetColor(myOwnColor); | |
595 | myDrawer->DatumAspect()->ThirdAxisAspect()->SetColor(myOwnColor); | |
596 | #ifdef IMP120100 | |
597 | if( HasTextColor() ) { | |
598 | SetTextColor(myOwnColor.Name()); | |
599 | myHasOwnTextColor = Standard_False; | |
600 | } | |
601 | if( HasArrowColor() ) { | |
602 | SetArrowColor(myOwnColor.Name()); | |
603 | myHasOwnArrowColor = Standard_False; | |
604 | } | |
605 | #endif | |
606 | ||
607 | } | |
608 | ||
609 | //======================================================================= | |
610 | //function : UnsetWitdth | |
611 | //purpose : | |
612 | //======================================================================= | |
613 | ||
614 | void AIS_Trihedron::UnsetWidth() | |
615 | { | |
616 | myOwnWidth =0.0; | |
617 | myDrawer->DatumAspect()->FirstAxisAspect()->SetWidth(1.); | |
618 | myDrawer->DatumAspect()->SecondAxisAspect()->SetWidth(1.); | |
619 | myDrawer->DatumAspect()->ThirdAxisAspect()->SetWidth(1.); | |
620 | ||
621 | } | |
622 | void AIS_Trihedron::LoadSubObjects() | |
623 | { | |
624 | myShapes[0] = Position(); | |
625 | myShapes[1] = XAxis(); | |
626 | myShapes[2] = YAxis(); | |
627 | myShapes[3] = Axis(); | |
628 | myShapes[4] = XYPlane(); | |
629 | myShapes[5] = XZPlane(); | |
630 | myShapes[6] = YZPlane(); | |
631 | } | |
632 | ||
633 | //======================================================================= | |
634 | //function : SetContext | |
635 | //purpose : | |
636 | //======================================================================= | |
637 | ||
638 | void AIS_Trihedron::SetContext(const Handle(AIS_InteractiveContext)& Ctx) | |
639 | { | |
640 | // Standard_Boolean same_DA = myDrawer->Link() == Ctx->DefaultDrawer(); | |
641 | ||
29d43f9c A |
642 | // Remove subobjects from current context |
643 | Handle(AIS_InteractiveContext) anAISContext = GetContext(); | |
644 | Standard_Boolean hasContext = (anAISContext.IsNull() == Standard_False); | |
645 | Standard_Integer anIdx; | |
646 | for (anIdx = 0; anIdx < 7; anIdx++) | |
647 | { | |
648 | // Deselect object | |
649 | if (hasContext) | |
650 | { | |
651 | if (anAISContext->IsSelected (myShapes[anIdx])) | |
652 | anAISContext->AddOrRemoveSelected (myShapes[anIdx]); | |
653 | ||
654 | anAISContext->Remove (myShapes[anIdx], Standard_False); | |
655 | } | |
656 | myShapes[anIdx].Nullify(); | |
657 | } | |
658 | ||
659 | AIS_InteractiveObject::SetContext (Ctx); | |
7fd59977 | 660 | |
661 | LoadSubObjects(); | |
662 | for(Standard_Integer i= 0;i<=6;i++) | |
29d43f9c | 663 | myShapes[i]->SetContext (Ctx); |
7fd59977 | 664 | } |