Commit | Line | Data |
---|---|---|
b311480e | 1 | // Created on: 1995-10-09 |
2 | // Created by: Arnaud BOUZY/Odile Olivier | |
3 | // Copyright (c) 1995-1999 Matra Datavision | |
973c2be1 | 4 | // Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e | 5 | // |
973c2be1 | 6 | // This file is part of Open CASCADE Technology software library. |
b311480e | 7 | // |
d5f74e42 | 8 | // This library is free software; you can redistribute it and/or modify it under |
9 | // the terms of the GNU Lesser General Public License version 2.1 as published | |
973c2be1 | 10 | // by the Free Software Foundation, with special exception defined in the file |
11 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT | |
12 | // distribution for complete text of the license and disclaimer of any warranty. | |
b311480e | 13 | // |
973c2be1 | 14 | // Alternatively, this file may be used under the terms of Open CASCADE |
15 | // commercial license or contractual agreement. | |
7fd59977 | 16 | |
1f7f5a90 | 17 | #include <AIS_Trihedron.hxx> |
42cf5bc1 | 18 | |
42cf5bc1 | 19 | #include <AIS_InteractiveContext.hxx> |
bc001a40 | 20 | #include <AIS_TrihedronOwner.hxx> |
7fd59977 | 21 | #include <Geom_Axis2Placement.hxx> |
42cf5bc1 | 22 | #include <Geom_Transformation.hxx> |
7fd59977 | 23 | #include <gp_Pnt.hxx> |
bc001a40 | 24 | #include <Graphic3d_ArrayOfPoints.hxx> |
25 | #include <Graphic3d_ArrayOfSegments.hxx> | |
42cf5bc1 | 26 | #include <Graphic3d_AspectLine3d.hxx> |
bc001a40 | 27 | #include <Graphic3d_ArrayOfPoints.hxx> |
28 | #include <Graphic3d_ArrayOfPolylines.hxx> | |
29 | ||
30 | #include <Prs3d_Arrow.hxx> | |
42cf5bc1 | 31 | #include <Prs3d_ArrowAspect.hxx> |
32 | #include <Prs3d_DatumAspect.hxx> | |
7fd59977 | 33 | #include <Prs3d_Drawer.hxx> |
34 | #include <Prs3d_LineAspect.hxx> | |
42cf5bc1 | 35 | #include <Prs3d_Presentation.hxx> |
36 | #include <Prs3d_Projector.hxx> | |
bc001a40 | 37 | #include <Prs3d_ShadingAspect.hxx> |
38 | #include <Prs3d_Text.hxx> | |
7fd59977 | 39 | #include <Prs3d_TextAspect.hxx> |
bc001a40 | 40 | #include <Prs3d_ToolSphere.hxx> |
41 | ||
42cf5bc1 | 42 | #include <Select3D_SensitivePoint.hxx> |
bc001a40 | 43 | #include <Select3D_SensitivePrimitiveArray.hxx> |
42cf5bc1 | 44 | #include <Select3D_SensitiveSegment.hxx> |
7fd59977 | 45 | #include <Select3D_SensitiveTriangle.hxx> |
42cf5bc1 | 46 | #include <SelectBasics_EntityOwner.hxx> |
47 | #include <SelectMgr_EntityOwner.hxx> | |
48 | #include <Standard_Type.hxx> | |
7fd59977 | 49 | |
bc001a40 | 50 | IMPLEMENT_STANDARD_RTTIEXT(AIS_Trihedron, AIS_InteractiveObject) |
92efcf78 | 51 | |
7fd59977 | 52 | //======================================================================= |
53 | //function : AIS_Trihedron | |
bc001a40 | 54 | //purpose : |
7fd59977 | 55 | //======================================================================= |
bc001a40 | 56 | AIS_Trihedron::AIS_Trihedron (const Handle(Geom_Axis2Placement)& theComponent) |
57 | : myHasOwnSize (Standard_False), | |
58 | myHasOwnTextColor (Standard_False), | |
59 | myHasOwnArrowColor (Standard_False), | |
60 | myTrihDispMode (Prs3d_DM_WireFrame), | |
61 | myComponent (theComponent) | |
046a1c9d | 62 | { |
bc001a40 | 63 | // selection priorities |
64 | mySelectionPriority.Bind (Prs3d_DP_None, 5); // complete triedron: priority 5 (same as faces) | |
65 | mySelectionPriority.Bind (Prs3d_DP_Origin, 8); // origin: priority 8 | |
66 | for (int aPartIter = Prs3d_DP_XAxis; aPartIter <= Prs3d_DP_ZAxis; ++aPartIter) | |
67 | { | |
68 | mySelectionPriority.Bind ((Prs3d_DatumParts )aPartIter, 7); // axes: priority: 7 | |
69 | } | |
70 | for (int aPartIter = Prs3d_DP_XOYAxis; aPartIter <= Prs3d_DP_XOZAxis; ++aPartIter) | |
71 | { | |
72 | mySelectionPriority.Bind ((Prs3d_DatumParts )aPartIter, 5); // planes: priority: 5 | |
73 | } | |
74 | ||
75 | // trihedron labels | |
76 | myLabel.Bind (Prs3d_DP_XAxis, "X"); | |
77 | myLabel.Bind (Prs3d_DP_YAxis, "Y"); | |
78 | myLabel.Bind (Prs3d_DP_ZAxis, "Z"); | |
046a1c9d | 79 | } |
7fd59977 | 80 | |
81 | //======================================================================= | |
82 | //function : SetComponent | |
bc001a40 | 83 | //purpose : |
7fd59977 | 84 | //======================================================================= |
bc001a40 | 85 | void AIS_Trihedron::SetComponent (const Handle(Geom_Axis2Placement)& theComponent) |
7fd59977 | 86 | { |
bc001a40 | 87 | myComponent = theComponent; |
88 | LoadRecomputable (AIS_WireFrame); | |
7fd59977 | 89 | } |
90 | ||
29d43f9c | 91 | //======================================================================= |
bc001a40 | 92 | //function : setOwnDatumAspect |
1f7f5a90 | 93 | //purpose : |
29d43f9c | 94 | //======================================================================= |
bc001a40 | 95 | void AIS_Trihedron::setOwnDatumAspect() |
29d43f9c | 96 | { |
bc001a40 | 97 | if (myDrawer->HasOwnDatumAspect()) |
98 | return; | |
99 | ||
100 | Handle(Prs3d_DatumAspect) aNewAspect = new Prs3d_DatumAspect(); | |
101 | myDrawer->SetDatumAspect(aNewAspect); | |
102 | ||
103 | if (myDrawer->Link().IsNull()) | |
104 | return; | |
105 | ||
fae1ae11 ZA |
106 | myDrawer->DatumAspect()->SetDrawArrows (myDrawer->Link()->DatumAspect()->ToDrawArrows()); |
107 | myDrawer->DatumAspect()->SetDrawLabels (myDrawer->Link()->DatumAspect()->ToDrawLabels()); | |
bc001a40 | 108 | *myDrawer->DatumAspect()->TextAspect()->Aspect() = |
109 | *myDrawer->Link()->DatumAspect()->TextAspect()->Aspect(); | |
110 | *myDrawer->DatumAspect()->PointAspect()->Aspect() = | |
111 | *myDrawer->Link()->DatumAspect()->PointAspect()->Aspect(); | |
112 | *myDrawer->DatumAspect()->ArrowAspect()->Aspect() = | |
113 | *myDrawer->Link()->DatumAspect()->ArrowAspect()->Aspect(); | |
29d43f9c | 114 | |
bc001a40 | 115 | for (int aPartIter = Prs3d_DP_Origin; aPartIter <= Prs3d_DP_XOZAxis; ++aPartIter) |
116 | { | |
117 | const Prs3d_DatumParts aPart = (Prs3d_DatumParts )aPartIter; | |
118 | if (!aNewAspect->LineAspect(aPart).IsNull()) | |
119 | *myDrawer->DatumAspect()->LineAspect(aPart)->Aspect() = | |
120 | *myDrawer->Link()->DatumAspect()->LineAspect(aPart)->Aspect(); | |
121 | if (!aNewAspect->ShadingAspect(aPart).IsNull()) | |
122 | *myDrawer->DatumAspect()->ShadingAspect(aPart)->Aspect() = | |
123 | *myDrawer->Link()->DatumAspect()->ShadingAspect(aPart)->Aspect(); | |
124 | } | |
29d43f9c | 125 | } |
7fd59977 | 126 | |
127 | //======================================================================= | |
128 | //function : SetSize | |
bc001a40 | 129 | //purpose : |
7fd59977 | 130 | //======================================================================= |
131 | void AIS_Trihedron::SetSize(const Standard_Real aValue) | |
132 | { | |
133 | myHasOwnSize = Standard_True; | |
bc001a40 | 134 | |
135 | setOwnDatumAspect(); | |
136 | myDrawer->DatumAspect()->SetAxisLength(aValue, aValue, aValue); | |
7fd59977 | 137 | |
138 | Update(); | |
139 | UpdateSelection(); | |
140 | } | |
141 | ||
7fd59977 | 142 | //======================================================================= |
143 | //function : UnsetSize | |
bc001a40 | 144 | //purpose : |
7fd59977 | 145 | //======================================================================= |
7fd59977 | 146 | void AIS_Trihedron::UnsetSize() |
147 | { | |
bc001a40 | 148 | if (!myHasOwnSize) |
149 | { | |
150 | return; | |
151 | } | |
152 | ||
7fd59977 | 153 | myHasOwnSize = Standard_False; |
bc001a40 | 154 | if (hasOwnColor) |
155 | { | |
156 | const Handle(Prs3d_DatumAspect) DA = myDrawer->HasLink() | |
157 | ? myDrawer->Link()->DatumAspect() | |
158 | : new Prs3d_DatumAspect(); | |
159 | myDrawer->DatumAspect()->SetAxisLength (DA->AxisLength (Prs3d_DP_XAxis), | |
160 | DA->AxisLength (Prs3d_DP_YAxis), | |
161 | DA->AxisLength (Prs3d_DP_ZAxis)); | |
7fd59977 | 162 | } |
163 | else | |
6262338c | 164 | { |
bc001a40 | 165 | Update(); |
6262338c | 166 | } |
7fd59977 | 167 | UpdateSelection(); |
7fd59977 | 168 | } |
169 | ||
170 | //======================================================================= | |
171 | //function : Size | |
bc001a40 | 172 | //purpose : |
7fd59977 | 173 | //======================================================================= |
7fd59977 | 174 | Standard_Real AIS_Trihedron::Size() const |
175 | { | |
bc001a40 | 176 | return myDrawer->DatumAspect()->AxisLength(Prs3d_DP_XAxis); |
7fd59977 | 177 | } |
178 | ||
179 | //======================================================================= | |
bc001a40 | 180 | //function : Compute |
181 | //purpose : | |
7fd59977 | 182 | //======================================================================= |
bc001a40 | 183 | void AIS_Trihedron::Compute (const Handle(PrsMgr_PresentationManager3d)& thePrsMgr, |
184 | const Handle(Prs3d_Presentation)& thePrs, | |
185 | const Standard_Integer theMode) | |
7fd59977 | 186 | { |
bc001a40 | 187 | if (theMode != 0) |
046a1c9d | 188 | { |
bc001a40 | 189 | return; |
046a1c9d | 190 | } |
bc001a40 | 191 | |
192 | thePrs->SetInfiniteState (Standard_True); | |
193 | ||
194 | gp_Ax2 anAxis (myComponent->Ax2()); | |
195 | updatePrimitives (myDrawer->DatumAspect(), myTrihDispMode, anAxis.Location(), | |
196 | anAxis.XDirection(), anAxis.YDirection(), anAxis.Direction()); | |
197 | computePresentation (thePrsMgr, thePrs); | |
7fd59977 | 198 | } |
199 | ||
200 | //======================================================================= | |
bc001a40 | 201 | //function : Compute |
202 | //purpose : | |
7fd59977 | 203 | //======================================================================= |
bc001a40 | 204 | void AIS_Trihedron::Compute (const Handle(Prs3d_Projector)& theProjector, |
205 | const Handle(Geom_Transformation)& theTrsf, | |
206 | const Handle(Prs3d_Presentation)& thePrs) | |
7fd59977 | 207 | { |
bc001a40 | 208 | PrsMgr_PresentableObject::Compute (theProjector, theTrsf, thePrs); |
7fd59977 | 209 | } |
210 | ||
211 | //======================================================================= | |
bc001a40 | 212 | //function : ComputeSelection |
213 | //purpose : | |
7fd59977 | 214 | //======================================================================= |
bc001a40 | 215 | void AIS_Trihedron::ComputeSelection (const Handle(SelectMgr_Selection)& theSelection, |
216 | const Standard_Integer theMode) | |
7fd59977 | 217 | { |
bc001a40 | 218 | Handle(Prs3d_DatumAspect) anAspect = myDrawer->DatumAspect(); |
219 | switch (theMode) | |
046a1c9d | 220 | { |
bc001a40 | 221 | case AIS_TrihedronSelectionMode_EntireObject: |
222 | { | |
223 | Handle(SelectMgr_EntityOwner) anOwner = new SelectMgr_EntityOwner ( | |
224 | this, mySelectionPriority.Find (Prs3d_DP_None)); | |
225 | const bool isShadingMode = myTrihDispMode == Prs3d_DM_Shaded; | |
226 | for (int aPartIter = isShadingMode ? Prs3d_DP_Origin : Prs3d_DP_XAxis; aPartIter <= Prs3d_DP_ZAxis; | |
227 | ++aPartIter) | |
228 | { | |
229 | const Prs3d_DatumParts aPart = (Prs3d_DatumParts )aPartIter; | |
230 | if (!anAspect->DrawDatumPart (aPart)) | |
231 | { | |
232 | continue; | |
233 | } | |
234 | theSelection->Add (createSensitiveEntity (aPart, anOwner)); | |
235 | } | |
236 | break; | |
237 | } | |
238 | case AIS_TrihedronSelectionMode_Origin: | |
239 | { | |
240 | const Prs3d_DatumParts aPart = Prs3d_DP_Origin; | |
241 | if (anAspect->DrawDatumPart (aPart)) | |
242 | { | |
243 | Handle(SelectMgr_EntityOwner) anOwner = new AIS_TrihedronOwner (this, aPart, | |
244 | mySelectionPriority.Find (aPart)); | |
245 | Handle(Graphic3d_ArrayOfPrimitives) aPrimitives = arrayOfPrimitives(aPart); | |
246 | theSelection->Add (createSensitiveEntity (aPart, anOwner)); | |
247 | } | |
248 | break; | |
249 | } | |
250 | case AIS_TrihedronSelectionMode_Axes: | |
251 | { | |
252 | for (int aPartIter = Prs3d_DP_XAxis; aPartIter <= Prs3d_DP_ZAxis; ++aPartIter) | |
253 | { | |
254 | const Prs3d_DatumParts aPart = (Prs3d_DatumParts )aPartIter; | |
255 | if (!anAspect->DrawDatumPart (aPart)) | |
256 | { | |
257 | continue; | |
258 | } | |
259 | Handle(SelectMgr_EntityOwner) anOwner = new AIS_TrihedronOwner (this, aPart, | |
260 | mySelectionPriority.Find (aPart)); | |
261 | theSelection->Add (createSensitiveEntity (aPart, anOwner)); | |
262 | } | |
263 | break; | |
264 | } | |
265 | case AIS_TrihedronSelectionMode_MainPlanes: | |
266 | { | |
267 | // create owner for each trihedron plane | |
268 | { | |
269 | for (int aPartIter = Prs3d_DP_XOYAxis; aPartIter <= Prs3d_DP_XOZAxis; ++aPartIter) | |
270 | { | |
271 | const Prs3d_DatumParts aPart = (Prs3d_DatumParts )aPartIter; | |
272 | if (!anAspect->DrawDatumPart (aPart)) | |
273 | { | |
274 | continue; | |
275 | } | |
276 | Handle(SelectMgr_EntityOwner) anOwner = new AIS_TrihedronOwner (this, aPart, | |
277 | mySelectionPriority.Find (aPart)); | |
278 | theSelection->Add (createSensitiveEntity (aPart, anOwner)); | |
279 | } | |
280 | } | |
281 | break; | |
282 | } | |
046a1c9d | 283 | } |
7fd59977 | 284 | } |
285 | ||
286 | //======================================================================= | |
bc001a40 | 287 | //function : HilightOwnerWithColor |
288 | //purpose : | |
7fd59977 | 289 | //======================================================================= |
bc001a40 | 290 | void AIS_Trihedron::HilightOwnerWithColor (const Handle(PrsMgr_PresentationManager3d)& thePM, |
291 | const Handle(Prs3d_Drawer)& theStyle, | |
292 | const Handle(SelectMgr_EntityOwner)& theOwner) | |
7fd59977 | 293 | { |
bc001a40 | 294 | Handle(AIS_TrihedronOwner) anOwner = Handle(AIS_TrihedronOwner)::DownCast (theOwner); |
295 | if (anOwner.IsNull()) | |
296 | { | |
297 | /// default 0 selection mode | |
298 | Standard_Integer aHiMode = HasHilightMode() ? HilightMode() : 0; | |
299 | thePM->Color (this, theStyle, aHiMode, NULL, Graphic3d_ZLayerId_Top); | |
300 | return; | |
7fd59977 | 301 | } |
7fd59977 | 302 | |
bc001a40 | 303 | Handle(Prs3d_Presentation) aPresentation = GetHilightPresentation (thePM); |
304 | if (aPresentation.IsNull()) | |
305 | { | |
306 | return; | |
307 | } | |
7fd59977 | 308 | |
bc001a40 | 309 | aPresentation->Clear(); |
310 | const Prs3d_DatumParts aPart = anOwner->DatumPart(); | |
311 | Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (aPresentation); | |
312 | Handle(Prs3d_DatumAspect) anAspect = myDrawer->DatumAspect(); | |
313 | if (aPart >= Prs3d_DP_XOYAxis && aPart <= Prs3d_DP_XOZAxis) | |
314 | { | |
315 | // planes selection is equal in both shading and wireframe mode | |
316 | aGroup->SetGroupPrimitivesAspect (getHighlightLineAspect()->Aspect()); | |
317 | } | |
318 | else | |
319 | { | |
320 | if (myTrihDispMode == Prs3d_DM_Shaded) | |
321 | { | |
322 | aGroup->SetGroupPrimitivesAspect (anAspect->ShadingAspect(aPart)->Aspect()); | |
323 | } | |
324 | else | |
325 | { | |
326 | if (aPart == Prs3d_DP_Origin) | |
327 | { | |
328 | aGroup->SetGroupPrimitivesAspect (getHighlightPointAspect()->Aspect()); | |
329 | } | |
330 | else | |
331 | { | |
332 | aGroup->SetGroupPrimitivesAspect (anAspect->LineAspect(aPart)->Aspect()); | |
333 | } | |
334 | } | |
335 | } | |
336 | aGroup->AddPrimitiveArray (arrayOfPrimitives(aPart)); | |
7fd59977 | 337 | |
c29c0ad0 | 338 | if (aPresentation->GetZLayer() != theStyle->ZLayer()) |
339 | { | |
340 | aPresentation->SetZLayer (theStyle->ZLayer()); | |
341 | } | |
bc001a40 | 342 | aPresentation->Highlight (theStyle); |
343 | thePM->AddToImmediateList (aPresentation); | |
7fd59977 | 344 | } |
345 | ||
bc001a40 | 346 | //======================================================================== |
347 | //function : HilightSelected | |
348 | //purpose : | |
349 | //======================================================================== | |
350 | void AIS_Trihedron::HilightSelected (const Handle(PrsMgr_PresentationManager3d)& thePM, | |
351 | const SelectMgr_SequenceOfOwner& theOwners) | |
7fd59977 | 352 | { |
bc001a40 | 353 | if (theOwners.IsEmpty() || !HasInteractiveContext()) |
354 | { | |
355 | return; | |
356 | } | |
357 | ||
358 | Handle(Prs3d_DatumAspect) anAspect = myDrawer->DatumAspect(); | |
359 | const bool isShadingMode = myTrihDispMode == Prs3d_DM_Shaded; | |
360 | ||
361 | const Handle(Prs3d_Drawer)& aContextSelStyle = GetContext()->SelectionStyle(); | |
362 | const Quantity_Color& aSelectionColor = aContextSelStyle->Color(); | |
363 | for (SelectMgr_SequenceOfOwner::Iterator anIterator (theOwners); anIterator.More(); anIterator.Next()) | |
364 | { | |
365 | const Handle(SelectMgr_EntityOwner)& anOwner = anIterator.Value(); | |
366 | Handle(AIS_TrihedronOwner) aTrihedronOwner = Handle(AIS_TrihedronOwner)::DownCast(anOwner); | |
367 | if (aTrihedronOwner.IsNull()) | |
368 | { | |
369 | thePM->Color (this, aContextSelStyle, 0); | |
370 | continue; | |
371 | } | |
372 | ||
373 | const Prs3d_DatumParts aPart = aTrihedronOwner->DatumPart(); | |
374 | Handle(Graphic3d_Group) aGroup; | |
375 | if (mySelectedParts.Contains (aPart) | |
376 | || !myPartToGroup.Find (aPart, aGroup)) | |
377 | { | |
378 | continue; | |
379 | } | |
380 | ||
381 | if (aPart >= Prs3d_DP_XOYAxis | |
382 | && aPart <= Prs3d_DP_XOZAxis) | |
383 | { | |
384 | getHighlightLineAspect()->SetColor (aSelectionColor); | |
385 | aGroup->SetGroupPrimitivesAspect (getHighlightLineAspect()->Aspect()); | |
386 | } | |
387 | else | |
388 | { | |
389 | if (isShadingMode) | |
390 | { | |
391 | getHighlightAspect()->SetColor (aSelectionColor); | |
392 | aGroup->SetGroupPrimitivesAspect (getHighlightAspect()->Aspect()); | |
393 | } | |
394 | else | |
395 | { | |
396 | if (aPart == Prs3d_DP_Origin) | |
397 | { | |
398 | getHighlightPointAspect()->SetColor (aSelectionColor); | |
399 | aGroup->SetGroupPrimitivesAspect (getHighlightPointAspect()->Aspect()); | |
400 | } | |
401 | else | |
402 | { | |
403 | getHighlightLineAspect()->SetColor (aSelectionColor); | |
404 | aGroup->SetGroupPrimitivesAspect (getHighlightLineAspect()->Aspect()); | |
405 | } | |
406 | } | |
407 | } | |
408 | mySelectedParts.Append (aPart); | |
7fd59977 | 409 | } |
410 | } | |
411 | ||
412 | //======================================================================= | |
bc001a40 | 413 | //function : ClearSelected |
414 | //purpose : | |
7fd59977 | 415 | //======================================================================= |
bc001a40 | 416 | void AIS_Trihedron::ClearSelected() |
7fd59977 | 417 | { |
bc001a40 | 418 | Handle(Prs3d_DatumAspect) anAspect = myDrawer->DatumAspect(); |
419 | const bool isShadingMode = myTrihDispMode == Prs3d_DM_Shaded; | |
420 | for (NCollection_List<Prs3d_DatumParts>::Iterator anIterator (mySelectedParts); anIterator.More(); | |
421 | anIterator.Next()) | |
422 | { | |
423 | const Prs3d_DatumParts aPart = anIterator.Value(); | |
424 | Handle(Graphic3d_Group) aGroup = myPartToGroup.Find (aPart); | |
425 | if (aPart >= Prs3d_DP_XOYAxis | |
426 | && aPart <= Prs3d_DP_XOZAxis) | |
427 | { | |
428 | aGroup->SetGroupPrimitivesAspect (anAspect->LineAspect (aPart)->Aspect()); | |
429 | } | |
430 | if (isShadingMode) | |
431 | { | |
432 | aGroup->SetGroupPrimitivesAspect (anAspect->ShadingAspect (aPart)->Aspect()); | |
433 | } | |
434 | else | |
435 | { | |
436 | if (aPart == Prs3d_DP_Origin) | |
437 | { | |
438 | aGroup->SetGroupPrimitivesAspect (anAspect->PointAspect()->Aspect()); | |
439 | } | |
440 | else | |
441 | { | |
442 | aGroup->SetGroupPrimitivesAspect (anAspect->LineAspect (aPart)->Aspect()); | |
443 | } | |
444 | } | |
445 | } | |
446 | mySelectedParts.Clear(); | |
7fd59977 | 447 | } |
448 | ||
449 | //======================================================================= | |
bc001a40 | 450 | //function : computePresentation |
451 | //purpose : | |
7fd59977 | 452 | //======================================================================= |
bc001a40 | 453 | void AIS_Trihedron::computePresentation (const Handle(PrsMgr_PresentationManager3d)& /*thePrsMgr*/, |
454 | const Handle(Prs3d_Presentation)& thePrs) | |
7fd59977 | 455 | { |
bc001a40 | 456 | myPartToGroup.Clear(); |
457 | Handle(Prs3d_DatumAspect) anAspect = myDrawer->DatumAspect(); | |
458 | const bool isShadingMode = myTrihDispMode == Prs3d_DM_Shaded; | |
459 | // display origin | |
460 | { | |
461 | // Origin is visualized only in shading mode | |
462 | Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup (thePrs); | |
463 | const Prs3d_DatumParts aPart = Prs3d_DP_Origin; | |
464 | if (anAspect->DrawDatumPart(aPart)) | |
465 | { | |
466 | myPartToGroup.Bind (aPart, aGroup); | |
467 | if (isShadingMode) | |
468 | { | |
469 | aGroup->SetGroupPrimitivesAspect (anAspect->ShadingAspect (aPart)->Aspect()); | |
470 | } | |
471 | else | |
472 | { | |
473 | aGroup->SetGroupPrimitivesAspect (anAspect->PointAspect()->Aspect()); | |
474 | } | |
475 | aGroup->AddPrimitiveArray (arrayOfPrimitives (aPart)); | |
476 | } | |
477 | } | |
29d43f9c | 478 | |
bc001a40 | 479 | // display axes |
480 | { | |
481 | for (Standard_Integer anAxisIter = Prs3d_DP_XAxis; anAxisIter <= Prs3d_DP_ZAxis; ++anAxisIter) | |
29d43f9c | 482 | { |
bc001a40 | 483 | Prs3d_DatumParts aPart = (Prs3d_DatumParts )anAxisIter; |
484 | if (!anAspect->DrawDatumPart (aPart)) | |
485 | { | |
486 | continue; | |
487 | } | |
29d43f9c | 488 | |
bc001a40 | 489 | Handle(Graphic3d_Group) anAxisGroup = Prs3d_Root::NewGroup (thePrs); |
490 | myPartToGroup.Bind (aPart, anAxisGroup); | |
491 | if (isShadingMode) | |
29d43f9c | 492 | { |
bc001a40 | 493 | anAxisGroup->SetGroupPrimitivesAspect (anAspect->ShadingAspect (aPart)->Aspect()); |
29d43f9c | 494 | } |
bc001a40 | 495 | else |
496 | { | |
497 | anAxisGroup->SetGroupPrimitivesAspect (anAspect->LineAspect (aPart)->Aspect()); | |
498 | } | |
499 | anAxisGroup->AddPrimitiveArray (arrayOfPrimitives (aPart)); | |
500 | ||
501 | // draw arrow | |
bc001a40 | 502 | Prs3d_DatumParts anArrowPart = anAspect->ArrowPartForAxis (aPart); |
503 | if (!anAspect->DrawDatumPart (anArrowPart)) | |
504 | { | |
505 | continue; | |
506 | } | |
fae1ae11 ZA |
507 | |
508 | Handle(Graphic3d_Group) anArrowGroup = Prs3d_Root::NewGroup (thePrs); | |
509 | anArrowGroup->SetGroupPrimitivesAspect (anAspect->ArrowAspect()->Aspect()); | |
bc001a40 | 510 | anArrowGroup->AddPrimitiveArray (arrayOfPrimitives (anArrowPart)); |
7fd59977 | 511 | } |
bc001a40 | 512 | } |
7fd59977 | 513 | |
bc001a40 | 514 | // display labels |
515 | if (anAspect->ToDrawLabels()) | |
516 | { | |
517 | Handle(Geom_Axis2Placement) aComponent = myComponent; | |
518 | const gp_Pnt anOrigin = aComponent->Location(); | |
519 | for (Standard_Integer anAxisIter = Prs3d_DP_XAxis; anAxisIter <= Prs3d_DP_ZAxis; ++anAxisIter) | |
520 | { | |
521 | const Prs3d_DatumParts aPart = (Prs3d_DatumParts )anAxisIter; | |
522 | if (!anAspect->DrawDatumPart (aPart)) | |
523 | { | |
524 | continue; | |
7fd59977 | 525 | } |
29d43f9c | 526 | |
bc001a40 | 527 | const Standard_Real anAxisLength = anAspect->AxisLength (aPart); |
528 | const TCollection_ExtendedString& aLabel = myLabel.Find (aPart); | |
529 | gp_Dir aDir; | |
530 | switch (aPart) | |
531 | { | |
532 | case Prs3d_DP_XAxis: aDir = aComponent->XDirection(); break; | |
533 | case Prs3d_DP_YAxis: aDir = aComponent->YDirection(); break; | |
534 | case Prs3d_DP_ZAxis: aDir = aComponent->Direction(); break; | |
535 | default: break; | |
536 | } | |
537 | Handle(Graphic3d_Group) aLabelGroup = Prs3d_Root::NewGroup (thePrs); | |
538 | const gp_Pnt aPoint = anOrigin.XYZ() + aDir.XYZ() * anAxisLength; | |
539 | Prs3d_Text::Draw (aLabelGroup, anAspect->TextAspect(), aLabel, aPoint); | |
7fd59977 | 540 | } |
bc001a40 | 541 | } |
542 | ||
543 | // planes invisible group for planes selection | |
544 | for (Standard_Integer anAxisIter = Prs3d_DP_XOYAxis; anAxisIter <= Prs3d_DP_XOZAxis; ++anAxisIter) | |
545 | { | |
546 | Prs3d_DatumParts aPart = (Prs3d_DatumParts)anAxisIter; | |
547 | if (!anAspect->DrawDatumPart(aPart)) | |
548 | { | |
549 | continue; | |
7fd59977 | 550 | } |
bc001a40 | 551 | |
552 | Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup (thePrs); | |
553 | myPartToGroup.Bind (aPart, aGroup); | |
554 | ||
555 | const Handle(Graphic3d_AspectLine3d)& aLineAspect = anAspect->LineAspect (aPart)->Aspect(); | |
556 | aLineAspect->SetType (Aspect_TOL_EMPTY); | |
557 | ||
558 | aGroup->AddPrimitiveArray (arrayOfPrimitives (aPart)); | |
559 | aGroup->SetGroupPrimitivesAspect (aLineAspect); | |
7fd59977 | 560 | } |
7fd59977 | 561 | } |
562 | ||
563 | //======================================================================= | |
bc001a40 | 564 | //function : LoadRecomputable |
565 | //purpose : | |
7fd59977 | 566 | //======================================================================= |
bc001a40 | 567 | void AIS_Trihedron::LoadRecomputable (const Standard_Integer theMode) |
7fd59977 | 568 | { |
bc001a40 | 569 | myRecomputeEveryPrs = Standard_False; |
570 | if (!myToRecomputeModes.Contains (theMode)) | |
571 | { | |
572 | myToRecomputeModes.Append (theMode); | |
573 | } | |
7fd59977 | 574 | } |
575 | ||
bc001a40 | 576 | //======================================================================= |
577 | //function : SetColor | |
578 | //purpose : | |
579 | //======================================================================= | |
580 | void AIS_Trihedron::SetDatumPartColor (const Prs3d_DatumParts thePart, | |
581 | const Quantity_Color& theColor) | |
7fd59977 | 582 | { |
bc001a40 | 583 | setOwnDatumAspect(); |
7fd59977 | 584 | |
bc001a40 | 585 | myDrawer->DatumAspect()->ShadingAspect (thePart)->SetColor (theColor); |
586 | if (thePart != Prs3d_DP_Origin) | |
587 | { | |
588 | myDrawer->DatumAspect()->LineAspect (thePart)->SetColor (theColor); | |
589 | } | |
7fd59977 | 590 | } |
591 | ||
592 | //======================================================================= | |
593 | //function : SetTextColor | |
bc001a40 | 594 | //purpose : |
7fd59977 | 595 | //======================================================================= |
bc001a40 | 596 | void AIS_Trihedron::SetTextColor (const Quantity_Color& theColor) |
7fd59977 | 597 | { |
bc001a40 | 598 | setOwnDatumAspect(); |
599 | myDrawer->DatumAspect()->TextAspect()->SetColor (theColor); | |
7fd59977 | 600 | } |
601 | ||
bc001a40 | 602 | //======================================================================= |
603 | //function : Color | |
604 | //purpose : | |
605 | //======================================================================= | |
606 | Quantity_Color AIS_Trihedron::DatumPartColor (Prs3d_DatumParts thePart) | |
7fd59977 | 607 | { |
bc001a40 | 608 | if (myTrihDispMode == Prs3d_DM_Shaded) |
609 | { | |
610 | return myDrawer->DatumAspect()->ShadingAspect (thePart)->Color(); | |
611 | } | |
612 | else | |
613 | { | |
614 | return myDrawer->DatumAspect()->LineAspect (thePart)->Aspect()->Color(); | |
7fd59977 | 615 | } |
7fd59977 | 616 | } |
617 | ||
618 | //======================================================================= | |
bc001a40 | 619 | //function : SetOriginColor |
620 | //purpose : | |
7fd59977 | 621 | //======================================================================= |
bc001a40 | 622 | void AIS_Trihedron::SetOriginColor (const Quantity_Color& theColor) |
623 | { | |
624 | if (myTrihDispMode == Prs3d_DM_Shaded) | |
625 | { | |
626 | SetDatumPartColor (Prs3d_DP_Origin, theColor); | |
627 | } | |
7fd59977 | 628 | } |
629 | ||
630 | //======================================================================= | |
bc001a40 | 631 | //function : SetXAxisColor |
632 | //purpose : | |
633 | //======================================================================= | |
634 | void AIS_Trihedron::SetXAxisColor (const Quantity_Color& theColor) | |
635 | { | |
636 | SetDatumPartColor (Prs3d_DP_XAxis, theColor); | |
7fd59977 | 637 | } |
638 | ||
639 | //======================================================================= | |
bc001a40 | 640 | //function : SetYAxisColor |
641 | //purpose : | |
642 | //======================================================================= | |
643 | void AIS_Trihedron::SetYAxisColor (const Quantity_Color& theColor) | |
644 | { | |
645 | SetDatumPartColor (Prs3d_DP_YAxis, theColor); | |
7fd59977 | 646 | } |
7fd59977 | 647 | |
7fd59977 | 648 | //======================================================================= |
bc001a40 | 649 | //function : SetAxisColor |
650 | //purpose : | |
7fd59977 | 651 | //======================================================================= |
bc001a40 | 652 | void AIS_Trihedron::SetAxisColor (const Quantity_Color& theColor) |
7fd59977 | 653 | { |
bc001a40 | 654 | SetDatumPartColor (Prs3d_DP_ZAxis, theColor); |
7fd59977 | 655 | } |
bc001a40 | 656 | |
7fd59977 | 657 | //======================================================================= |
bc001a40 | 658 | //function : SetColor |
659 | //purpose : | |
7fd59977 | 660 | //======================================================================= |
bc001a40 | 661 | void AIS_Trihedron::SetColor (const Quantity_Color& theColor) |
662 | { | |
663 | hasOwnColor = Standard_True; | |
664 | myDrawer->SetColor (theColor); | |
7fd59977 | 665 | |
bc001a40 | 666 | SetDatumPartColor (Prs3d_DP_Origin, theColor); |
667 | SetDatumPartColor (Prs3d_DP_XAxis, theColor); | |
668 | SetDatumPartColor (Prs3d_DP_YAxis, theColor); | |
669 | SetDatumPartColor (Prs3d_DP_ZAxis, theColor); | |
670 | } | |
7fd59977 | 671 | |
672 | //======================================================================= | |
bc001a40 | 673 | //function : SetArrowColor |
674 | //purpose : | |
7fd59977 | 675 | //======================================================================= |
bc001a40 | 676 | void AIS_Trihedron::SetArrowColor (const Quantity_Color& theColor) |
677 | { | |
678 | setOwnDatumAspect(); | |
7fd59977 | 679 | |
bc001a40 | 680 | myHasOwnArrowColor = Standard_True; |
681 | myDrawer->DatumAspect()->ArrowAspect()->SetColor (theColor); | |
682 | } | |
7fd59977 | 683 | |
684 | //======================================================================= | |
bc001a40 | 685 | //function : TextColor |
686 | //purpose : | |
7fd59977 | 687 | //======================================================================= |
bc001a40 | 688 | Quantity_Color AIS_Trihedron::TextColor() const |
7fd59977 | 689 | { |
bc001a40 | 690 | return myDrawer->DatumAspect()->TextAspect()->Aspect()->Color(); |
7fd59977 | 691 | } |
692 | ||
693 | //======================================================================= | |
bc001a40 | 694 | //function : ArrowColor |
695 | //purpose : | |
7fd59977 | 696 | //======================================================================= |
bc001a40 | 697 | Quantity_Color AIS_Trihedron::ArrowColor() const |
698 | { | |
699 | return myDrawer->DatumAspect()->ArrowAspect()->Aspect()->Color(); | |
700 | } | |
7fd59977 | 701 | |
702 | //======================================================================= | |
703 | //function : UnsetColor | |
704 | //purpose : | |
705 | //======================================================================= | |
7fd59977 | 706 | void AIS_Trihedron::UnsetColor() |
707 | { | |
bc001a40 | 708 | hasOwnColor = Standard_False; |
709 | Quantity_Color aDefaultColor (Quantity_NOC_LIGHTSTEELBLUE4); | |
710 | SetColor (aDefaultColor); | |
711 | if (HasTextColor()) | |
712 | { | |
713 | SetTextColor (aDefaultColor); | |
7fd59977 | 714 | myHasOwnTextColor = Standard_False; |
715 | } | |
bc001a40 | 716 | if (HasArrowColor()) |
717 | { | |
718 | SetArrowColor (aDefaultColor); | |
7fd59977 | 719 | myHasOwnArrowColor = Standard_False; |
720 | } | |
7fd59977 | 721 | } |
722 | ||
fae1ae11 ZA |
723 | //======================================================================= |
724 | //function : ToDrawArrows | |
725 | //purpose : | |
726 | //======================================================================= | |
727 | Standard_Boolean AIS_Trihedron::ToDrawArrows() const | |
728 | { | |
729 | return myDrawer->DatumAspect()->ToDrawArrows(); | |
730 | } | |
731 | ||
732 | //======================================================================= | |
733 | //function : SetDrawArrows | |
734 | //purpose : | |
735 | //======================================================================= | |
736 | void AIS_Trihedron::SetDrawArrows (const Standard_Boolean theToDraw) | |
737 | { | |
738 | setOwnDatumAspect(); | |
739 | myDrawer->DatumAspect()->SetDrawArrows (theToDraw); | |
740 | } | |
741 | ||
7fd59977 | 742 | //======================================================================= |
bc001a40 | 743 | //function : createSensitiveEntity |
744 | //purpose : | |
7fd59977 | 745 | //======================================================================= |
bc001a40 | 746 | Handle(SelectBasics_SensitiveEntity) AIS_Trihedron::createSensitiveEntity (const Prs3d_DatumParts thePart, |
747 | const Handle(SelectBasics_EntityOwner)& theOwner) const | |
7fd59977 | 748 | { |
bc001a40 | 749 | Handle(Prs3d_DatumAspect) anAspect = myDrawer->DatumAspect(); |
750 | Handle(Graphic3d_ArrayOfPrimitives) aPrimitives = arrayOfPrimitives (thePart); | |
751 | if (aPrimitives.IsNull()) | |
752 | { | |
753 | return Handle(SelectBasics_SensitiveEntity)(); | |
754 | } | |
7fd59977 | 755 | |
bc001a40 | 756 | if (thePart >= Prs3d_DP_XOYAxis |
757 | && thePart <= Prs3d_DP_XOZAxis) | |
758 | { // plane | |
759 | const gp_Pnt anXYZ1 = aPrimitives->Vertice (1); | |
760 | const gp_Pnt anXYZ2 = aPrimitives->Vertice (2); | |
761 | const gp_Pnt anXYZ3 = aPrimitives->Vertice (3); | |
762 | return new Select3D_SensitiveTriangle (theOwner, anXYZ1, anXYZ2, anXYZ3); | |
763 | } | |
764 | ||
765 | if (myTrihDispMode == Prs3d_DM_Shaded) | |
766 | { | |
767 | Handle(Select3D_SensitivePrimitiveArray) aSelArray = new Select3D_SensitivePrimitiveArray (theOwner); | |
768 | aSelArray->InitTriangulation (aPrimitives->Attributes(), aPrimitives->Indices(), TopLoc_Location()); | |
769 | return aSelArray; | |
770 | } | |
771 | ||
772 | if (Handle(Graphic3d_ArrayOfPoints) aPoints = Handle(Graphic3d_ArrayOfPoints)::DownCast(aPrimitives)) | |
773 | { | |
774 | const gp_Pnt anXYZ1 = aPoints->Vertice (1); | |
775 | return new Select3D_SensitivePoint (theOwner, anXYZ1); | |
776 | } | |
777 | else if (Handle(Graphic3d_ArrayOfSegments) aSegments = Handle(Graphic3d_ArrayOfSegments)::DownCast(aPrimitives)) | |
778 | { | |
779 | const gp_Pnt anXYZ1 = aSegments->Vertice (1); | |
780 | const gp_Pnt anXYZ2 = aSegments->Vertice (2); | |
781 | return new Select3D_SensitiveSegment (theOwner, anXYZ1, anXYZ2); | |
782 | } | |
783 | return Handle(SelectBasics_SensitiveEntity)(); | |
7fd59977 | 784 | } |
bc001a40 | 785 | |
786 | // ======================================================================= | |
787 | // function : arrayOfPrimitives | |
788 | // purpose : | |
789 | // ======================================================================= | |
790 | Handle(Graphic3d_ArrayOfPrimitives) AIS_Trihedron::arrayOfPrimitives( | |
791 | Prs3d_DatumParts theDatumPart) const | |
7fd59977 | 792 | { |
bc001a40 | 793 | Handle(Graphic3d_ArrayOfPrimitives) anArray; |
794 | myPrimitives.Find(theDatumPart, anArray); | |
795 | return anArray; | |
7fd59977 | 796 | } |
797 | ||
bc001a40 | 798 | // ======================================================================= |
799 | // function : updatePrimitives | |
800 | // purpose : | |
801 | // ======================================================================= | |
802 | void AIS_Trihedron::updatePrimitives(const Handle(Prs3d_DatumAspect)& theAspect, | |
803 | Prs3d_DatumMode theMode, | |
804 | const gp_Pnt& theOrigin, | |
805 | const gp_Dir& theXDirection, | |
806 | const gp_Dir& theYDirection, | |
807 | const gp_Dir& theZDirection) | |
7fd59977 | 808 | { |
bc001a40 | 809 | myPrimitives.Clear(); |
810 | ||
811 | NCollection_DataMap<Prs3d_DatumParts, gp_Dir> anAxisDirs; | |
812 | anAxisDirs.Bind(Prs3d_DP_XAxis, theXDirection); | |
813 | anAxisDirs.Bind(Prs3d_DP_YAxis, theYDirection); | |
814 | anAxisDirs.Bind(Prs3d_DP_ZAxis, theZDirection); | |
815 | ||
816 | NCollection_DataMap<Prs3d_DatumParts, gp_Pnt> anAxisPoints; | |
817 | gp_XYZ anXYZOrigin = theOrigin.XYZ(); | |
818 | for (int anAxisIter = Prs3d_DP_XAxis; anAxisIter <= Prs3d_DP_ZAxis; ++anAxisIter) | |
819 | { | |
820 | Prs3d_DatumParts aPart = (Prs3d_DatumParts)anAxisIter; | |
821 | anAxisPoints.Bind(aPart, gp_Pnt(anXYZOrigin + anAxisDirs.Find(aPart).XYZ() * | |
822 | theAspect->AxisLength(aPart))); | |
823 | } | |
824 | ||
825 | if (theMode == Prs3d_DM_WireFrame) | |
826 | { | |
827 | // origin | |
828 | if (theAspect->DrawDatumPart(Prs3d_DP_Origin)) | |
829 | { | |
830 | Handle(Graphic3d_ArrayOfPrimitives) aPrims = new Graphic3d_ArrayOfPoints(1); | |
831 | aPrims->AddVertex(theOrigin); | |
832 | myPrimitives.Bind(Prs3d_DP_Origin, aPrims); | |
833 | } | |
834 | // axes | |
835 | for (int aPartIter = Prs3d_DP_XAxis; aPartIter <= Prs3d_DP_ZAxis; ++aPartIter) | |
836 | { | |
837 | const Prs3d_DatumParts aPart = (Prs3d_DatumParts)aPartIter; | |
838 | if (theAspect->DrawDatumPart(aPart)) | |
839 | { | |
840 | Handle(Graphic3d_ArrayOfPrimitives) aPrims = new Graphic3d_ArrayOfSegments(2); | |
841 | aPrims->AddVertex(theOrigin); | |
842 | aPrims->AddVertex(anAxisPoints.Find(aPart)); | |
843 | myPrimitives.Bind(aPart, aPrims); | |
844 | } | |
845 | ||
846 | Prs3d_DatumParts anArrowPart = theAspect->ArrowPartForAxis(aPart); | |
847 | if (theAspect->DrawDatumPart(anArrowPart)) | |
848 | { | |
849 | myPrimitives.Bind(anArrowPart, | |
850 | Prs3d_Arrow::DrawSegments(anAxisPoints.Find(aPart), anAxisDirs.Find(aPart), | |
851 | theAspect->ArrowAspect()->Angle(), | |
852 | theAspect->AxisLength(aPart) * theAspect->Attribute(Prs3d_DP_ShadingConeLengthPercent), | |
853 | (Standard_Integer) theAspect->Attribute(Prs3d_DP_ShadingNumberOfFacettes))); | |
854 | } | |
855 | } | |
856 | } | |
857 | else | |
858 | { | |
859 | // shading mode | |
860 | // origin | |
861 | if (theAspect->DrawDatumPart(Prs3d_DP_Origin)) | |
862 | { | |
863 | const Standard_Real aSphereRadius = theAspect->AxisLength(Prs3d_DP_XAxis) * | |
864 | theAspect->Attribute(Prs3d_DP_ShadingOriginRadiusPercent); | |
865 | const Standard_Integer aNbOfFacettes = | |
866 | (Standard_Integer)theAspect->Attribute(Prs3d_DP_ShadingNumberOfFacettes); | |
867 | gp_Trsf aSphereTransform; | |
868 | aSphereTransform.SetTranslationPart(gp_Vec(gp::Origin(), theOrigin)); | |
869 | myPrimitives.Bind(Prs3d_DP_Origin, Prs3d_ToolSphere::Create(aSphereRadius, aNbOfFacettes, | |
870 | aNbOfFacettes, aSphereTransform)); | |
871 | } | |
872 | // axes | |
873 | { | |
874 | const Standard_Integer aNbOfFacettes = | |
875 | (Standard_Integer)theAspect->Attribute(Prs3d_DP_ShadingNumberOfFacettes); | |
876 | const Standard_Real aTubeRadiusPercent = theAspect->Attribute(Prs3d_DP_ShadingTubeRadiusPercent); | |
877 | const Standard_Real aConeLengthPercent = theAspect->Attribute(Prs3d_DP_ShadingConeLengthPercent); | |
878 | const Standard_Real aConeRadiusPercent = theAspect->Attribute(Prs3d_DP_ShadingConeRadiusPercent); | |
879 | for (Standard_Integer anAxisIter = Prs3d_DP_XAxis; anAxisIter <= Prs3d_DP_ZAxis; ++anAxisIter) | |
da0e82aa | 880 | { |
bc001a40 | 881 | const Prs3d_DatumParts aPart = (Prs3d_DatumParts)anAxisIter; |
882 | const Prs3d_DatumParts anArrowPart = theAspect->ArrowPartForAxis(aPart); | |
883 | const bool aDrawArrow = theAspect->DrawDatumPart(anArrowPart); | |
884 | const Standard_Real anAxisLength = theAspect->AxisLength(aPart); | |
885 | const gp_Ax1 anAxis(theOrigin, anAxisDirs.Find(aPart)); | |
886 | ||
887 | if (theAspect->DrawDatumPart(aPart)) | |
888 | { | |
889 | // draw cylinder | |
890 | myPrimitives.Bind(aPart, | |
891 | Prs3d_Arrow::DrawShaded(anAxis, anAxisLength * aTubeRadiusPercent, | |
892 | aDrawArrow ? anAxisLength - anAxisLength * aConeLengthPercent : anAxisLength, | |
893 | 0.0, 0.0, aNbOfFacettes)); | |
894 | } | |
895 | ||
896 | // draw arrow | |
897 | if (aDrawArrow) | |
898 | { | |
899 | myPrimitives.Bind(anArrowPart, Prs3d_Arrow::DrawShaded(anAxis, 0.0, anAxisLength, | |
900 | anAxisLength * aConeRadiusPercent, | |
901 | anAxisLength * aConeLengthPercent, aNbOfFacettes)); | |
902 | } | |
da0e82aa | 903 | } |
bc001a40 | 904 | } |
905 | } | |
906 | // planes | |
907 | for (Standard_Integer aPlaneIter = Prs3d_DP_XOYAxis; aPlaneIter <= Prs3d_DP_XOZAxis; ++aPlaneIter) | |
908 | { | |
909 | const Prs3d_DatumParts aPart = (Prs3d_DatumParts)aPlaneIter; | |
910 | if (!theAspect->DrawDatumPart(aPart)) | |
29d43f9c | 911 | { |
bc001a40 | 912 | continue; |
913 | } | |
914 | ||
915 | Handle(Graphic3d_ArrayOfPrimitives) aPrims = new Graphic3d_ArrayOfPolylines(4); | |
916 | aPrims->AddVertex(theOrigin); | |
917 | ||
918 | Prs3d_DatumParts aPart1 = Prs3d_DP_XAxis, aPart2 = Prs3d_DP_XAxis; | |
919 | switch(aPart) | |
920 | { | |
921 | case Prs3d_DP_XOYAxis: | |
922 | { | |
923 | aPart1 = Prs3d_DP_XAxis; | |
924 | aPart2 = Prs3d_DP_YAxis; | |
925 | break; | |
926 | } | |
927 | case Prs3d_DP_YOZAxis: | |
928 | { | |
929 | aPart1 = Prs3d_DP_YAxis; | |
930 | aPart2 = Prs3d_DP_ZAxis; | |
931 | break; | |
932 | } | |
933 | case Prs3d_DP_XOZAxis: | |
934 | { | |
935 | aPart1 = Prs3d_DP_XAxis; | |
936 | aPart2 = Prs3d_DP_ZAxis; | |
937 | break; | |
938 | } | |
939 | default: break; | |
29d43f9c | 940 | } |
bc001a40 | 941 | aPrims->AddVertex(anAxisPoints.Find(aPart1)); |
942 | aPrims->AddVertex(anAxisPoints.Find(aPart2)); | |
943 | ||
944 | aPrims->AddVertex(theOrigin); | |
945 | myPrimitives.Bind(aPart, aPrims); | |
946 | } | |
947 | } | |
948 | ||
949 | // ======================================================================= | |
950 | // function : getHighlightAspect | |
951 | // purpose : | |
952 | // ======================================================================= | |
953 | Handle(Prs3d_ShadingAspect) AIS_Trihedron::getHighlightAspect() | |
954 | { | |
955 | if (!myHighlightAspect.IsNull()) | |
956 | return myHighlightAspect; | |
957 | ||
958 | Quantity_Color aHighlightColor = Quantity_NOC_GRAY80; | |
959 | if (!myHilightDrawer.IsNull()) | |
960 | aHighlightColor = myHilightDrawer->Color(); | |
961 | ||
962 | myHighlightAspect = new Prs3d_ShadingAspect(); | |
963 | myHighlightAspect->Aspect()->SetInteriorStyle (Aspect_IS_SOLID); | |
964 | myHighlightAspect->SetColor (aHighlightColor); | |
965 | ||
966 | Graphic3d_MaterialAspect aHighlightMaterial; | |
967 | aHighlightMaterial.SetColor (aHighlightColor); | |
968 | myHighlightAspect->SetMaterial (aHighlightMaterial); | |
969 | ||
970 | return myHighlightAspect; | |
971 | } | |
972 | ||
973 | // ======================================================================= | |
974 | // function : getHighlightLineAspect | |
975 | // purpose : | |
976 | // ======================================================================= | |
977 | Handle(Prs3d_LineAspect) AIS_Trihedron::getHighlightLineAspect() | |
978 | { | |
979 | if (!myHighlightLineAspect.IsNull()) | |
980 | return myHighlightLineAspect; | |
981 | ||
982 | Quantity_Color aHighlightColor = Quantity_NOC_GRAY80; | |
983 | if (!myHilightDrawer.IsNull()) | |
984 | aHighlightColor = myHilightDrawer->Color(); | |
985 | ||
986 | Handle(Prs3d_DatumAspect) aDatumAspect = Attributes()->DatumAspect(); | |
987 | Handle(Prs3d_LineAspect) aLineAspect = aDatumAspect->LineAspect(Prs3d_DP_XAxis); | |
988 | myHighlightLineAspect = new Prs3d_LineAspect (aHighlightColor, aLineAspect->Aspect()->Type(), | |
989 | aLineAspect->Aspect()->Width()); | |
990 | ||
991 | return myHighlightLineAspect; | |
992 | } | |
993 | ||
994 | // ======================================================================= | |
995 | // function : getHighlightPointAspect | |
996 | // purpose : | |
997 | // ======================================================================= | |
998 | Handle(Prs3d_PointAspect) AIS_Trihedron::getHighlightPointAspect() | |
999 | { | |
1000 | if (!myHighlightPointAspect.IsNull()) | |
1001 | return myHighlightPointAspect; | |
1002 | ||
1003 | Quantity_Color aHighlightColor = Quantity_NOC_GRAY80; | |
1004 | if (!myHilightDrawer.IsNull()) | |
1005 | aHighlightColor = myHilightDrawer->Color(); | |
1006 | myHighlightPointAspect = new Prs3d_PointAspect (Aspect_TOM_PLUS, aHighlightColor, 1.0); | |
1007 | ||
1008 | return myHighlightPointAspect; | |
7fd59977 | 1009 | } |