1 // File Graphic3d_Structure.cxx
4 // Modified 1/08/97 ; PCT : ajout texture mapping
5 // 20/08/97 ; PCT : ajout transparence pour texture
6 // 11/97 ; CAL : gestion du GraphicClear
7 // 11/97 ; CAL : ajout pointer StructPtr
8 // 11/97 ; CAL : amelioration de l'effacement SetManager
9 // CAL : 15 janvier 1998
10 // Ajout de la methode IsTransformed dans une Structure.
11 // (Permet la transmission de cette Trsf vers
12 // la structure COMPUTED si necessaire)
14 // Ajout de la methode IsRotated dans une Structure.
15 // (Permet de connaitre le type de transformation
16 // pour declencher le calcul des parties cachees
17 // de maniere plus sioux)
19 // Ajout de 3 nouvelles methodes Compute virtual dans Structure.
20 // (Permet des Compute un peu plus specialises)
22 // Ajout des 2 methodes sur Owner dans Structure.
23 // (evite de calculer 2 fois les parties cachees
24 // pour 2 representations differentes affichees
25 // d'un meme Presentable Object (Owner))
27 // Ajout des 2 methodes sur HLRValidation dans Structure.
28 // (permet de valider ou d'invalider le calcul des
29 // parties cachees sur certaines representations)
31 // Ajout de la transmission de la transformation d'une structure
33 // 24/2/98 ; CAL : Modification de la gestion des champs
35 // Patch, erreur dans la gestion du nombre de Group avec
36 // facettes dans Graphic3d_Structure avec une operation
37 // de Clear. (PRO12795)
38 // FGU : 30 Avril 1998
41 // Perfs. Connection entre structures COMPUTED.
42 // 30/11/98 ; FMN : S4069. Textes always visible.
43 // 22/03/04 ; SAN : OCC4895 High-level interface for controlling polygon offsets
45 #define G003 //EUG 26/01/00 Degeneration management
47 #define BUC60918 //GG 31/05/01 A transparente structure priority must have the
48 // MAX_PRIORITY value so, the highlighted structure must have
49 // MAX_PRIORITY-1 value.
50 // Add ResetDisplayPriority() method.
52 #define OCC1174 // SAV 08/01/03 Added back face interior color controling
56 //-Copyright MatraDatavision 1991,1992,1993,1994,1995
60 //-Design Declaration des variables specifiques aux structures
63 //-Warning Une structure est definie dans un manager
64 // Il s'agit d'une sequence de groupes de primitives
82 #include <Graphic3d_Structure.ixx>
83 #include <Graphic3d_Structure.pxx>
85 #include <Graphic3d_GraphicDevice.hxx>
86 #include <Graphic3d_GraphicDriver.hxx>
87 #include <Graphic3d_MaterialAspect.hxx>
89 #include <Graphic3d_MapOfStructure.hxx>
90 #include <Graphic3d_MapIteratorOfMapOfStructure.hxx>
92 #include <Quantity_Color.hxx>
93 #include <TColStd_Array2OfReal.hxx>
94 #include <Graphic3d_TextureMap.hxx>
96 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
97 #include <Aspect_PolygonOffsetMode.hxx>
98 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
102 //-Global data definitions
106 Graphic3d_Structure::Graphic3d_Structure (const Handle(Graphic3d_StructureManager)& AManager):
107 MyGroupGenId (Group_IDMIN, Group_IDMAX),
111 MyHighlightColor (Quantity_NOC_WHITE)
114 Standard_Integer i, j;
118 Handle(Graphic3d_AspectLine3d) aAspectLine3d =
119 new Graphic3d_AspectLine3d ();
120 Handle(Graphic3d_AspectText3d) aAspectText3d =
121 new Graphic3d_AspectText3d ();
122 Handle(Graphic3d_AspectMarker3d) aAspectMarker3d =
123 new Graphic3d_AspectMarker3d ();
124 Handle(Graphic3d_AspectFillArea3d) aAspectFillArea3d =
125 new Graphic3d_AspectFillArea3d ();
127 // Recuperation des valeurs par defaut
128 AManager->PrimitivesAspect (aAspectLine3d, aAspectText3d,
129 aAspectMarker3d, aAspectFillArea3d);
131 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
132 // It is necessary to set default polygon offsets for a new presentation
133 aAspectFillArea3d->SetPolygonOffsets( Aspect_POM_Fill, 1., 0. );
134 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
136 // Mise a jour de la CStructure associee
137 UpdateStructure (aAspectLine3d, aAspectText3d,
138 aAspectMarker3d, aAspectFillArea3d);
140 MyFirstPtrStructureManager = MyPtrStructureManager =
141 (void *) AManager.operator->();
142 MyCStructure.Id = int (AManager->NewIdentification ());
144 MyCStructure.IsOpen = 0;
145 MyCStructure.IsDeleted = 0;
147 MyCStructure.Composition = 0; /* Graphic3d_TOC_REPLACE */
152 MyCStructure.Transformation[i][j] = float (1.0);
154 MyCStructure.Transformation[i][j] = float (0.0);
156 MyCStructure.Priority = int (Structure_MAX_PRIORITY / 2);
157 MyCStructure.PreviousPriority = MyCStructure.Priority;
158 MyCStructure.stick = 0,
159 MyCStructure.highlight = 0,
160 MyCStructure.visible = 1,
161 MyCStructure.pick = 1;
162 MyCStructure.ContainsFacet = 0,
163 MyCStructure.IsInfinite = 0,
164 MyCStructure.HLRValidation = 0;
166 MyCStructure.GroupBegin = Structure_GROUPBEGIN;
167 MyCStructure.GroupEnd = Structure_GROUPEND;
169 MyCStructure.ContextLine.IsDef = 1,
170 MyCStructure.ContextFillArea.IsDef = 1,
171 MyCStructure.ContextMarker.IsDef = 1,
172 MyCStructure.ContextText.IsDef = 1;
174 MyCStructure.ContextLine.IsSet = 0,
175 MyCStructure.ContextFillArea.IsSet = 0,
176 MyCStructure.ContextMarker.IsSet = 0,
177 MyCStructure.ContextText.IsSet = 0;
179 MyVisual = Graphic3d_TOS_ALL;
180 MyComputeVisual = Graphic3d_TOS_ALL;
182 /* ABD 29/10/04 Transform Persistence of Presentation( pan, zoom, rotate ) */
183 /*MyCStructure.TransformPersistence.IsDef = 1;*/
184 MyCStructure.TransformPersistence.IsSet = 0;
185 MyCStructure.TransformPersistence.Flag = Graphic3d_TMF_None;
186 MyCStructure.TransformPersistence.Point.x = 0.0;
187 MyCStructure.TransformPersistence.Point.y = 0.0;
188 MyCStructure.TransformPersistence.Point.z = 0.0;
189 /* ABD 29/10/04 Transform Persistence of Presentation( pan, zoom, rotate ) */
190 Handle(Aspect_GraphicDriver) agd =
191 (AManager->GraphicDevice ())->GraphicDriver ();
193 MyGraphicDriver = *(Handle(Graphic3d_GraphicDriver) *) &agd;
195 MyGraphicDriver->Structure (MyCStructure);
198 cout << "Graphic3d_Structure::Create (" << MyCStructure.Id << ")\n";
205 void Graphic3d_Structure::Destroy () {
208 cout << "Graphic3d_Structure::Destroy (" << MyCStructure.Id << ")\n";
211 // as MyFirstPtrStructureManager can be already destroyed,
212 // avoid attempts to access it
213 MyFirstPtrStructureManager = 0;
220 void Graphic3d_Structure::Clear (const Standard_Boolean WithDestruction) {
222 if (IsDeleted ()) return;
224 if (WithDestruction) {
225 MyGroupGenId.Free ();
229 MyCStructure.ContainsFacet = 0;
231 GraphicClear (WithDestruction);
232 MyStructureManager->Clear (this, WithDestruction);
238 void Graphic3d_Structure::Remove () {
240 if (IsDeleted ()) return;
243 if (MyDescendants.Length () != 0) {
244 cout << "The structure " << MyCStructure.Id << " have "
245 << MyDescendants.Length () << " descendants.\n" << flush;
247 if (MyAncestors.Length () != 0) {
248 cout << "The structure " << MyCStructure.Id << " have "
249 << MyAncestors.Length () << " ancestors.\n" << flush;
253 Standard_Integer i, Length;
254 // Standard_Address APtr = (void *) This ().operator->();
255 Standard_Address APtr = (void *) this;
256 // Il faut enlever le pointeur possible sur cette structure
257 // que l'on est en train de detruire, dans la liste des descendants
258 // des ancetres de cette structure et dans la liste des ancetres
259 // des descendants de cette meme structure.
261 Length = MyDescendants.Length ();
262 for (i=1; i<=Length; i++)
263 ((Graphic3d_Structure *)
264 (MyDescendants.Value (i)))->Remove (APtr, Graphic3d_TOC_ANCESTOR);
266 Length = MyAncestors.Length ();
267 for (i=1; i<=Length; i++)
268 ((Graphic3d_Structure *)
269 (MyAncestors.Value (i)))->Remove (APtr, Graphic3d_TOC_DESCENDANT);
271 MyCStructure.ContainsFacet = 0;
272 MyCStructure.IsDeleted = 1;
274 // Destruction de me dans la bibliotheque graphique
275 MyGraphicDriver->RemoveStructure (MyCStructure);
277 // Liberation de l'identification de la structure detruite
278 // dans le premier manager qui a gere la creation de la structure.
279 if ( MyFirstPtrStructureManager )
280 MyFirstStructureManager->Remove (Standard_Integer (MyCStructure.Id));
284 void Graphic3d_Structure::Display () {
286 if (IsDeleted ()) return;
288 if (! MyCStructure.stick) {
289 MyCStructure.stick = 1;
290 MyStructureManager->Display (this);
295 void Graphic3d_Structure::Display (const Standard_Integer Priority) {
297 if (IsDeleted ()) return;
299 SetDisplayPriority (Priority);
301 if (! MyCStructure.stick) {
302 MyCStructure.stick = 1;
303 MyStructureManager->Display (this);
308 void Graphic3d_Structure::SetDisplayPriority (const Standard_Integer Priority) {
310 if (IsDeleted ()) return;
313 if( Priority == MyCStructure.Priority ) return;
316 MyCStructure.PreviousPriority = MyCStructure.Priority;
317 MyCStructure.Priority = int (Priority);
319 if (MyCStructure.Priority != MyCStructure.PreviousPriority) {
320 if ( (MyCStructure.Priority > Structure_MAX_PRIORITY) ||
321 (MyCStructure.Priority < Structure_MIN_PRIORITY) )
322 Graphic3d_PriorityDefinitionError::Raise
323 ("Bad value for StructurePriority");
325 if (MyCStructure.stick)
326 MyStructureManager->ChangeDisplayPriority (this,
327 Standard_Integer (MyCStructure.PreviousPriority),
328 Standard_Integer (MyCStructure.Priority));
334 void Graphic3d_Structure::ResetDisplayPriority () {
336 if (IsDeleted ()) return;
338 if (MyCStructure.Priority != MyCStructure.PreviousPriority) {
339 Standard_Integer priority = MyCStructure.Priority;
340 MyCStructure.Priority = MyCStructure.PreviousPriority;
342 if (MyCStructure.stick)
343 MyStructureManager->ChangeDisplayPriority (this,
345 Standard_Integer (MyCStructure.Priority));
351 Standard_Integer Graphic3d_Structure::DisplayPriority () const {
353 return Standard_Integer (MyCStructure.Priority);
357 void Graphic3d_Structure::Erase () {
359 if (IsDeleted ()) return;
361 if (MyCStructure.stick) {
362 MyCStructure.stick = 0;
363 MyStructureManager->Erase (this);
368 void Graphic3d_Structure::Highlight (const Aspect_TypeOfHighlightMethod AMethod) {
370 if (IsDeleted ()) return;
372 // Highlight sur une structure deja Highlighted.
373 if (MyCStructure.highlight) {
375 Aspect_TypeOfUpdate UpdateMode = MyStructureManager->UpdateMode ();
376 if (UpdateMode == Aspect_TOU_WAIT)
379 // Pour eviter d'appeler la methode : Update ()
380 // Inutile et peut-etre couteux.
381 MyStructureManager->SetUpdateMode (Aspect_TOU_WAIT);
383 MyStructureManager->SetUpdateMode (UpdateMode);
388 SetDisplayPriority (Standard_Integer (Structure_MAX_PRIORITY)-1);
390 SetDisplayPriority (Standard_Integer (Structure_MAX_PRIORITY));
393 GraphicHighlight (AMethod);
394 MyStructureManager->Highlight (this, AMethod);
400 void Graphic3d_Structure::SetHighlightColor (const Quantity_Color& AColor) {
402 if (IsDeleted ()) return;
404 if (! MyCStructure.highlight)
405 MyHighlightColor = AColor;
407 // Changement de highlight color sur une structure deja Highlighted.
409 Aspect_TypeOfUpdate UpdateMode = MyStructureManager->UpdateMode ();
410 if (UpdateMode == Aspect_TOU_WAIT)
413 // Pour eviter d'appeler la methode : Update ()
414 // Inutile et peut-etre couteux.
415 MyStructureManager->SetUpdateMode (Aspect_TOU_WAIT);
417 MyStructureManager->SetUpdateMode (UpdateMode);
419 MyHighlightColor = AColor;
420 Highlight (MyHighlightMethod);
425 void Graphic3d_Structure::SetVisible (const Standard_Boolean AValue) {
427 if (IsDeleted ()) return;
429 MyCStructure.visible = AValue ? 1:0;
431 MyGraphicDriver->NameSetStructure (MyCStructure);
434 MyStructureManager->Visible (this);
436 MyStructureManager->Invisible (this);
442 void Graphic3d_Structure::SetPick (const Standard_Boolean AValue) {
444 if (IsDeleted ()) return;
446 MyCStructure.pick = AValue ? 1:0;
448 MyGraphicDriver->NameSetStructure (MyCStructure);
451 MyStructureManager->Detectable (this);
453 MyStructureManager->Undetectable (this);
459 void Graphic3d_Structure::UnHighlight () {
461 if (IsDeleted ()) return;
463 if (MyCStructure.highlight) {
464 MyCStructure.highlight = 0;
466 GraphicUnHighlight ();
467 MyStructureManager->UnHighlight (this);
469 ResetDisplayPriority();
472 (Standard_Integer (MyCStructure.PreviousPriority));
479 Quantity_Color Graphic3d_Structure::HighlightColor () const {
481 return (MyHighlightColor);
485 Standard_Boolean Graphic3d_Structure::IsDisplayed () const {
487 if (MyCStructure.stick)
488 return (Standard_True);
490 return (Standard_False);
494 Standard_Boolean Graphic3d_Structure::IsDeleted () const {
496 if (MyCStructure.IsDeleted)
497 return (Standard_True);
499 return (Standard_False);
503 Standard_Boolean Graphic3d_Structure::IsHighlighted () const {
505 if (MyCStructure.highlight)
506 return (Standard_True);
508 return (Standard_False);
512 Standard_Boolean Graphic3d_Structure::IsSelectable () const {
514 if (MyCStructure.pick)
515 return (Standard_True);
517 return (Standard_False);
521 Standard_Boolean Graphic3d_Structure::IsVisible () const {
523 if (MyCStructure.visible)
524 return (Standard_True);
526 return (Standard_False);
530 Standard_Boolean Graphic3d_Structure::IsRotated () const {
532 // Test un peu leger !
533 return ( MyCStructure.Transformation[0][1] != 0.
534 || MyCStructure.Transformation[0][2] != 0.
535 || MyCStructure.Transformation[1][0] != 0.
536 || MyCStructure.Transformation[1][2] != 0.
537 || MyCStructure.Transformation[2][0] != 0.
538 || MyCStructure.Transformation[2][1] != 0. );
542 Standard_Boolean Graphic3d_Structure::IsTransformed () const {
544 Standard_Boolean Result = Standard_False;
545 Standard_Integer i, j;
547 for (i=0; i<=3 && ! Result; i++)
548 for (j=0; j<=3 && ! Result; j++)
550 Result = MyCStructure.Transformation[i][j] != 1.;
552 Result = MyCStructure.Transformation[i][j] != 0.;
555 cout << "La structure " << Identification ();
557 cout << " est transformee\n" << flush;
559 cout << " n'est pas transformee\n" << flush;
566 Standard_Boolean Graphic3d_Structure::ContainsFacet () const {
568 if (IsDeleted ()) return (Standard_False);
570 // Une structure contient au moins une facette :
571 // si l'un de ses groupes est contient au moins une facette.
573 Standard_Boolean Result1 = Standard_False;
574 Standard_Boolean Result2 = Standard_False;
575 Standard_Integer i, Length;
577 Result1 = (MyCStructure.ContainsFacet > 0);
579 // Si un des groupes contient au moins une facette alors
580 // la structure aussi.
581 if (Result1) return (Result1);
583 Length = MyDescendants.Length ();
585 // Je m'arrete au premier descendant qui contient au moins une facette.
586 for (i=1; i<=Length && ! Result2; i++)
587 Result2 = ((Graphic3d_Structure *)
588 (MyDescendants.Value (i)))->ContainsFacet ();
594 Standard_Boolean Graphic3d_Structure::IsEmpty () const {
596 if (IsDeleted ()) return (Standard_True);
598 // Une structure est vide :
599 // si l'ensemble de ses groupes est vide ou tous ses
600 // groupes sont vides et si l'ensemble de ses descendants
601 // est vide ou tous ses descendants sont vides.
603 Standard_Boolean Result1 = Standard_True;
604 Standard_Integer i, Length = MyGroups.Length ();
606 // Je m'arrete au premier groupe non vide
607 for (i=1; i<=Length && Result1; i++)
608 Result1 = (MyGroups.Value (i))->IsEmpty ();
610 // Si un des groupes est non vide alors la structure l'est aussi.
611 if (! Result1) return (Standard_False);
613 Standard_Boolean Result2 = Standard_True;
615 Length = MyDescendants.Length ();
617 // Je m'arrete au premier descendant non vide
618 for (i=1; i<=Length && Result2; i++)
619 Result2 = ((Graphic3d_Structure *)
620 (MyDescendants.Value (i)))->IsEmpty ();
626 void Graphic3d_Structure::PrimitivesAspect (Handle(Graphic3d_AspectLine3d)& CTXL, Handle(Graphic3d_AspectText3d)& CTXT, Handle(Graphic3d_AspectMarker3d)& CTXM, Handle(Graphic3d_AspectFillArea3d)& CTXF) const {
628 CTXL = Line3dAspect ();
629 CTXT = Text3dAspect ();
630 CTXM = Marker3dAspect ();
631 CTXF = FillArea3dAspect ();
635 void Graphic3d_Structure::GroupsWithFacet (const Standard_Integer ADelta) {
637 MyCStructure.ContainsFacet = MyCStructure.ContainsFacet + ADelta;
638 if (MyCStructure.ContainsFacet < 0) MyCStructure.ContainsFacet = 0;
641 cout << "MyCStructure.ContainsFacet " << MyCStructure.ContainsFacet;
642 cout << endl << flush;
647 Handle(Graphic3d_Structure) Graphic3d_Structure::Compute (const Handle(Graphic3d_DataStructureManager)& ) {
649 // Implemented by Presentation
653 Handle(Graphic3d_Structure) Graphic3d_Structure::Compute (const Handle(Graphic3d_DataStructureManager)& , const TColStd_Array2OfReal& ) {
655 // Implemented by Presentation
659 void Graphic3d_Structure::Compute (const Handle(Graphic3d_DataStructureManager)& , Handle(Graphic3d_Structure)& ) {
661 // Implemented by Presentation
664 void Graphic3d_Structure::Compute (const Handle(Graphic3d_DataStructureManager)& , const TColStd_Array2OfReal& , Handle(Graphic3d_Structure)& ) {
666 // Implemented by Presentation
669 void Graphic3d_Structure::ReCompute () {
671 MyStructureManager->ReCompute (this);
675 void Graphic3d_Structure::ReCompute (const Handle(Graphic3d_DataStructureManager)& aProjector) {
677 MyStructureManager->ReCompute (this, aProjector);
681 void Graphic3d_Structure::SetInfiniteState (const Standard_Boolean AValue) {
683 MyCStructure.IsInfinite = AValue ? 1:0;
687 Standard_Boolean Graphic3d_Structure::IsInfinite () const {
689 if (IsDeleted ()) return (Standard_True);
691 if (MyCStructure.IsInfinite)
692 return (Standard_True);
694 return (Standard_False);
698 void Graphic3d_Structure::GraphicClear (const Standard_Boolean WithDestruction) {
702 * Dans ce cas l'appelant dans faire :
703 * void Prs3d_Presentation::Clear () {
704 * Graphic3d_Structure::Clear ();
705 * myCurrentGroup = new Graphic3d_Group (this);
708 MyGraphicDriver->ClearStructure (MyCStructure);
711 * Dans ce cas l'appelant dans faire :
712 * void Prs3d_Presentation::Clear () {
713 * Graphic3d_Structure::Clear ();
714 * // myCurrentGroup = new Graphic3d_Group (this);
717 Standard_Integer Length = MyGroups.Length ();
719 for (Standard_Integer i=1; i<=Length; i++)
720 (MyGroups.Value (i))->Clear ();
725 void Graphic3d_Structure::GraphicConnect (const Handle(Graphic3d_Structure)& ADaughter) {
727 MyGraphicDriver->Connect
728 (MyCStructure, *((CALL_DEF_STRUCTURE *)ADaughter->CStructure()));
732 void Graphic3d_Structure::GraphicDisconnect (const Handle(Graphic3d_Structure)& ADaughter) {
734 MyGraphicDriver->Disconnect
735 (MyCStructure, *((CALL_DEF_STRUCTURE *)ADaughter->CStructure()));
739 Handle(Graphic3d_AspectLine3d) Graphic3d_Structure::Line3dAspect () const {
741 Standard_Real R, G, B;
742 Standard_Real AWidth;
743 Quantity_Color AColor;
744 Aspect_TypeOfLine ALType;
747 R = Standard_Real (MyCStructure.ContextLine.Color.r);
748 G = Standard_Real (MyCStructure.ContextLine.Color.g);
749 B = Standard_Real (MyCStructure.ContextLine.Color.b);
750 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
751 ALType = Aspect_TypeOfLine (MyCStructure.ContextLine.LineType);
752 AWidth = Standard_Real (MyCStructure.ContextLine.Width);
754 Handle(Graphic3d_AspectLine3d) CTXL =
755 new Graphic3d_AspectLine3d (AColor, ALType, AWidth);
761 Handle(Graphic3d_AspectText3d) Graphic3d_Structure::Text3dAspect () const {
763 Standard_Real R, G, B;
764 Standard_CString AFont;
765 Standard_Real ASpace;
766 Standard_Real AnExpansion;
767 Quantity_Color AColor;
768 Aspect_TypeOfStyleText AStyle;
769 Aspect_TypeOfDisplayText ADisplayType;
772 R = Standard_Real (MyCStructure.ContextText.Color.r);
773 G = Standard_Real (MyCStructure.ContextText.Color.g);
774 B = Standard_Real (MyCStructure.ContextText.Color.b);
775 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
776 AFont = Standard_CString (MyCStructure.ContextText.Font);
777 AnExpansion = Standard_Real (MyCStructure.ContextText.Expan);
778 ASpace = Standard_Real (MyCStructure.ContextText.Space);
779 AStyle = Aspect_TypeOfStyleText (MyCStructure.ContextText.Style);
780 ADisplayType = Aspect_TypeOfDisplayText (MyCStructure.ContextText.DisplayType);
782 Handle(Graphic3d_AspectText3d) CTXT =
783 new Graphic3d_AspectText3d (AColor, AFont, AnExpansion, ASpace,AStyle,ADisplayType);
789 Handle(Graphic3d_AspectMarker3d) Graphic3d_Structure::Marker3dAspect () const {
791 Standard_Real R, G, B;
792 Standard_Real AScale;
793 Quantity_Color AColor;
794 Aspect_TypeOfMarker AMType;
797 R = Standard_Real (MyCStructure.ContextMarker.Color.r);
798 G = Standard_Real (MyCStructure.ContextMarker.Color.g);
799 B = Standard_Real (MyCStructure.ContextMarker.Color.b);
800 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
801 AMType = Aspect_TypeOfMarker (MyCStructure.ContextMarker.MarkerType);
802 AScale = Standard_Real (MyCStructure.ContextMarker.Scale);
804 Handle(Graphic3d_AspectMarker3d) CTXM =
805 new Graphic3d_AspectMarker3d (AMType, AColor, AScale);
811 Handle(Graphic3d_AspectFillArea3d) Graphic3d_Structure::FillArea3dAspect () const {
813 Standard_Real R, G, B;
814 Standard_Real AWidth;
815 Quantity_Color AColor;
816 Quantity_Color AnIntColor;
817 Quantity_Color AnEdgeColor;
818 Aspect_TypeOfLine ALType;
819 Aspect_InteriorStyle AStyle;
820 Standard_Boolean EdgeOn = Standard_False;
821 Graphic3d_MaterialAspect Front;
822 Graphic3d_MaterialAspect Back;
825 AStyle = Aspect_InteriorStyle (MyCStructure.ContextFillArea.Style);
826 R = Standard_Real (MyCStructure.ContextFillArea.IntColor.r);
827 G = Standard_Real (MyCStructure.ContextFillArea.IntColor.g);
828 B = Standard_Real (MyCStructure.ContextFillArea.IntColor.b);
829 AnIntColor.SetValues (R, G, B, Quantity_TOC_RGB);
831 if (MyCStructure.ContextFillArea.Edge == 1) EdgeOn = Standard_True;
832 R = Standard_Real (MyCStructure.ContextFillArea.EdgeColor.r);
833 G = Standard_Real (MyCStructure.ContextFillArea.EdgeColor.g);
834 B = Standard_Real (MyCStructure.ContextFillArea.EdgeColor.b);
835 AnEdgeColor.SetValues (R, G, B, Quantity_TOC_RGB);
836 ALType = Aspect_TypeOfLine (MyCStructure.ContextFillArea.LineType);
837 AWidth = Standard_Real (MyCStructure.ContextFillArea.Width);
840 Standard_Real (MyCStructure.ContextFillArea.Back.Shininess));
842 Standard_Real (MyCStructure.ContextFillArea.Back.Ambient));
844 Standard_Real (MyCStructure.ContextFillArea.Back.Diffuse));
846 Standard_Real (MyCStructure.ContextFillArea.Back.Specular));
847 Back.SetTransparency (
848 Standard_Real (MyCStructure.ContextFillArea.Back.Transparency));
850 Standard_Real (MyCStructure.ContextFillArea.Back.Emission));
851 if (MyCStructure.ContextFillArea.Back.IsAmbient == 1)
852 Back.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
854 Back.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
855 if (MyCStructure.ContextFillArea.Back.IsDiffuse == 1)
856 Back.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
858 Back.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
859 if (MyCStructure.ContextFillArea.Back.IsSpecular == 1)
860 Back.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
862 Back.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
863 if (MyCStructure.ContextFillArea.Back.IsEmission == 1)
864 Back.SetReflectionModeOn (Graphic3d_TOR_EMISSION);
866 Back.SetReflectionModeOff (Graphic3d_TOR_EMISSION);
868 R = Standard_Real (MyCStructure.ContextFillArea.Back.ColorSpec.r);
869 G = Standard_Real (MyCStructure.ContextFillArea.Back.ColorSpec.g);
870 B = Standard_Real (MyCStructure.ContextFillArea.Back.ColorSpec.b);
871 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
872 Back.SetSpecularColor (AColor);
874 R = Standard_Real (MyCStructure.ContextFillArea.Back.ColorAmb.r);
875 G = Standard_Real (MyCStructure.ContextFillArea.Back.ColorAmb.g);
876 B = Standard_Real (MyCStructure.ContextFillArea.Back.ColorAmb.b);
877 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
878 Back.SetAmbientColor (AColor);
880 R = Standard_Real (MyCStructure.ContextFillArea.Back.ColorDif.r);
881 G = Standard_Real (MyCStructure.ContextFillArea.Back.ColorDif.g);
882 B = Standard_Real (MyCStructure.ContextFillArea.Back.ColorDif.b);
883 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
884 Back.SetDiffuseColor (AColor);
886 R = Standard_Real (MyCStructure.ContextFillArea.Back.ColorEms.r);
887 G = Standard_Real (MyCStructure.ContextFillArea.Back.ColorEms.g);
888 B = Standard_Real (MyCStructure.ContextFillArea.Back.ColorEms.b);
889 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
890 Back.SetEmissiveColor (AColor);
892 Back.SetEnvReflexion (MyCStructure.ContextFillArea.Back.EnvReflexion);
894 Graphic3d_TypeOfMaterial mType =
895 MyCStructure.ContextFillArea.Back.IsPhysic ?
896 Graphic3d_MATERIAL_PHYSIC : Graphic3d_MATERIAL_ASPECT;
897 Back.SetMaterialType(mType);
901 Standard_Real (MyCStructure.ContextFillArea.Front.Shininess));
903 Standard_Real (MyCStructure.ContextFillArea.Front.Ambient));
905 Standard_Real (MyCStructure.ContextFillArea.Front.Diffuse));
907 Standard_Real (MyCStructure.ContextFillArea.Front.Specular));
908 Front.SetTransparency (
909 Standard_Real (MyCStructure.ContextFillArea.Front.Transparency));
911 Standard_Real (MyCStructure.ContextFillArea.Front.Emission));
912 if (MyCStructure.ContextFillArea.Front.IsAmbient == 1)
913 Front.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
915 Front.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
916 if (MyCStructure.ContextFillArea.Front.IsDiffuse == 1)
917 Front.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
919 Front.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
920 if (MyCStructure.ContextFillArea.Front.IsSpecular == 1)
921 Front.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
923 Front.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
924 if (MyCStructure.ContextFillArea.Front.Emission == 1)
925 Front.SetReflectionModeOn (Graphic3d_TOR_EMISSION);
927 Front.SetReflectionModeOff (Graphic3d_TOR_EMISSION);
929 R = Standard_Real (MyCStructure.ContextFillArea.Front.ColorSpec.r);
930 G = Standard_Real (MyCStructure.ContextFillArea.Front.ColorSpec.g);
931 B = Standard_Real (MyCStructure.ContextFillArea.Front.ColorSpec.b);
932 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
933 Front.SetSpecularColor (AColor);
935 R = Standard_Real (MyCStructure.ContextFillArea.Front.ColorAmb.r);
936 G = Standard_Real (MyCStructure.ContextFillArea.Front.ColorAmb.g);
937 B = Standard_Real (MyCStructure.ContextFillArea.Front.ColorAmb.b);
938 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
939 Front.SetAmbientColor (AColor);
941 R = Standard_Real (MyCStructure.ContextFillArea.Front.ColorDif.r);
942 G = Standard_Real (MyCStructure.ContextFillArea.Front.ColorDif.g);
943 B = Standard_Real (MyCStructure.ContextFillArea.Front.ColorDif.b);
944 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
945 Front.SetDiffuseColor (AColor);
947 R = Standard_Real (MyCStructure.ContextFillArea.Front.ColorEms.r);
948 G = Standard_Real (MyCStructure.ContextFillArea.Front.ColorEms.g);
949 B = Standard_Real (MyCStructure.ContextFillArea.Front.ColorEms.b);
950 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
951 Front.SetEmissiveColor (AColor);
953 Front.SetEnvReflexion (MyCStructure.ContextFillArea.Front.EnvReflexion);
955 mType = MyCStructure.ContextFillArea.Front.IsPhysic ? Graphic3d_MATERIAL_PHYSIC : Graphic3d_MATERIAL_ASPECT;
956 Front.SetMaterialType(mType);
958 Handle(Graphic3d_AspectFillArea3d) CTXF =
959 new Graphic3d_AspectFillArea3d (AStyle, AnIntColor, AnEdgeColor, ALType, AWidth, Front, Back);
967 CTXF->SetHatchStyle(Aspect_HatchStyle (MyCStructure.ContextFillArea.Hatch));
969 // Front and Back face
970 if (MyCStructure.ContextFillArea.Distinguish == 1)
971 CTXF->SetDistinguishOn ();
973 CTXF->SetDistinguishOff ();
974 if (MyCStructure.ContextFillArea.BackFace == 1)
975 CTXF->SuppressBackFace ();
977 CTXF->AllowBackFace ();
979 // Pb sur les textures
980 //if (MyCStructure.ContextFillArea.Texture.TexId == -1)
982 if (MyCStructure.ContextFillArea.Texture.doTextureMap == 1)
983 CTXF->SetTextureMapOn ();
985 CTXF->SetTextureMapOff ();
987 Aspect_TypeOfDegenerateModel dMode = Aspect_TypeOfDegenerateModel(
988 MyCStructure.ContextFillArea.DegenerationMode);
989 Quantity_Ratio dRatio =
990 MyCStructure.ContextFillArea.SkipRatio;
991 CTXF->SetDegenerateModel(dMode,dRatio);
994 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
995 CTXF->SetPolygonOffsets(MyCStructure.ContextFillArea.PolygonOffsetMode,
996 MyCStructure.ContextFillArea.PolygonOffsetFactor,
997 MyCStructure.ContextFillArea.PolygonOffsetUnits);
998 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
1004 Handle(Graphic3d_HSetOfGroup) Graphic3d_Structure::Groups () const {
1006 Handle (Graphic3d_HSetOfGroup) SG = new Graphic3d_HSetOfGroup ();
1008 if (IsDeleted ()) return (SG);
1010 Standard_Integer i, Length = MyGroups.Length ();
1012 for (i=1; i<=Length; i++)
1013 SG->Add (MyGroups.Value (i));
1019 Standard_Integer Graphic3d_Structure::NumberOfGroups () const {
1021 return (MyGroups.Length ());
1025 void Graphic3d_Structure::SetPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTX) {
1027 if (IsDeleted ()) return;
1029 Standard_Real R, G, B;
1030 Standard_Real AWidth;
1031 Quantity_Color AColor;
1032 Aspect_TypeOfLine ALType;
1034 CTX->Values (AColor, ALType, AWidth);
1035 AColor.Values (R, G, B, Quantity_TOC_RGB);
1037 MyCStructure.ContextLine.Color.r = float (R);
1038 MyCStructure.ContextLine.Color.g = float (G);
1039 MyCStructure.ContextLine.Color.b = float (B);
1040 MyCStructure.ContextLine.LineType = int (ALType);
1041 MyCStructure.ContextLine.Width = float (AWidth);
1042 MyCStructure.ContextLine.IsDef = 1;
1044 MyGraphicDriver->ContextStructure (MyCStructure);
1047 // Les attributs sont "IsSet" lors de la premiere mise a jour
1048 // d'un contexte (line, marker...)
1049 MyCStructure.ContextLine.IsSet = 1;
1050 MyCStructure.ContextFillArea.IsSet = 1;
1051 MyCStructure.ContextMarker.IsSet = 1;
1052 MyCStructure.ContextText.IsSet = 1;
1058 void Graphic3d_Structure::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea3d)& CTX) {
1060 if (IsDeleted ()) return;
1062 Standard_Real R, G, B;
1063 Standard_Real AWidth;
1064 Quantity_Color AnIntColor;
1065 Quantity_Color BackIntColor;
1066 Quantity_Color AnEdgeColor;
1067 Aspect_TypeOfLine ALType;
1068 Aspect_InteriorStyle AStyle;
1070 CTX->Values (AStyle, AnIntColor, BackIntColor, AnEdgeColor, ALType, AWidth);
1071 AnIntColor.Values (R, G, B, Quantity_TOC_RGB);
1073 MyCStructure.ContextFillArea.Style = int (AStyle);
1074 MyCStructure.ContextFillArea.IntColor.r = float (R);
1075 MyCStructure.ContextFillArea.IntColor.g = float (G);
1076 MyCStructure.ContextFillArea.IntColor.b = float (B);
1079 if ( CTX->Distinguish() )
1080 BackIntColor.Values( R, G, B, Quantity_TOC_RGB );
1082 MyCStructure.ContextFillArea.BackIntColor.r = float( R );
1083 MyCStructure.ContextFillArea.BackIntColor.g = float( G );
1084 MyCStructure.ContextFillArea.BackIntColor.b = float( B );
1088 MyCStructure.ContextFillArea.Edge = CTX->Edge () ? 1:0;
1089 AnEdgeColor.Values (R, G, B, Quantity_TOC_RGB);
1090 MyCStructure.ContextFillArea.EdgeColor.r = float (R);
1091 MyCStructure.ContextFillArea.EdgeColor.g = float (G);
1092 MyCStructure.ContextFillArea.EdgeColor.b = float (B);
1093 MyCStructure.ContextFillArea.LineType = int (ALType);
1094 MyCStructure.ContextFillArea.Width = float (AWidth);
1095 MyCStructure.ContextFillArea.Hatch = int (CTX->HatchStyle ());
1097 Quantity_Ratio ratio;
1098 MyCStructure.ContextFillArea.DegenerationMode =
1099 int (CTX->DegenerateModel(ratio));
1100 MyCStructure.ContextFillArea.SkipRatio = float (ratio);
1103 /*** Front and Back face ***/
1104 MyCStructure.ContextFillArea.Distinguish = CTX->Distinguish () ? 1:0;
1105 MyCStructure.ContextFillArea.BackFace = CTX->BackFace () ? 1:0;
1107 /*** Back Material ***/
1108 // Light specificity
1109 MyCStructure.ContextFillArea.Back.Shininess =
1110 float ((CTX->BackMaterial ()).Shininess ());
1111 MyCStructure.ContextFillArea.Back.Ambient =
1112 float ((CTX->BackMaterial ()).Ambient ());
1113 MyCStructure.ContextFillArea.Back.Diffuse =
1114 float ((CTX->BackMaterial ()).Diffuse ());
1115 MyCStructure.ContextFillArea.Back.Specular =
1116 float ((CTX->BackMaterial ()).Specular ());
1117 MyCStructure.ContextFillArea.Back.Transparency =
1118 float ((CTX->BackMaterial ()).Transparency ());
1119 MyCStructure.ContextFillArea.Back.Emission =
1120 float ((CTX->BackMaterial ()).Emissive ());
1123 MyCStructure.ContextFillArea.Back.IsAmbient =
1124 ( (CTX->BackMaterial ()).ReflectionMode (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
1125 MyCStructure.ContextFillArea.Back.IsDiffuse =
1126 ( (CTX->BackMaterial ()).ReflectionMode (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
1127 MyCStructure.ContextFillArea.Back.IsSpecular =
1128 ( (CTX->BackMaterial ()).ReflectionMode (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
1129 MyCStructure.ContextFillArea.Back.IsEmission =
1130 ( (CTX->BackMaterial ()).ReflectionMode (Graphic3d_TOR_EMISSION) ? 1 : 0 );
1134 const Graphic3d_MaterialAspect ama = CTX->BackMaterial () ;
1135 Standard_Boolean amt = ama.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
1136 MyCStructure.ContextFillArea.Back.IsPhysic = ( amt ? 1 : 0 );
1139 MyCStructure.ContextFillArea.Back.ColorSpec.r =
1140 float (((CTX->BackMaterial ()).SpecularColor ()).Red ());
1141 MyCStructure.ContextFillArea.Back.ColorSpec.g =
1142 float (((CTX->BackMaterial ()).SpecularColor ()).Green ());
1143 MyCStructure.ContextFillArea.Back.ColorSpec.b =
1144 float (((CTX->BackMaterial ()).SpecularColor ()).Blue ());
1147 MyCStructure.ContextFillArea.Back.ColorAmb.r =
1148 float (((CTX->BackMaterial ()).AmbientColor ()).Red ());
1149 MyCStructure.ContextFillArea.Back.ColorAmb.g =
1150 float (((CTX->BackMaterial ()).AmbientColor ()).Green ());
1151 MyCStructure.ContextFillArea.Back.ColorAmb.b =
1152 float (((CTX->BackMaterial ()).AmbientColor ()).Blue ());
1155 MyCStructure.ContextFillArea.Back.ColorDif.r =
1156 float (((CTX->BackMaterial ()).DiffuseColor ()).Red ());
1157 MyCStructure.ContextFillArea.Back.ColorDif.g =
1158 float (((CTX->BackMaterial ()).DiffuseColor ()).Green ());
1159 MyCStructure.ContextFillArea.Back.ColorDif.b =
1160 float (((CTX->BackMaterial ()).DiffuseColor ()).Blue ());
1163 MyCStructure.ContextFillArea.Back.ColorEms.r =
1164 float (((CTX->BackMaterial ()).EmissiveColor ()).Red ());
1165 MyCStructure.ContextFillArea.Back.ColorEms.g =
1166 float (((CTX->BackMaterial ()).EmissiveColor ()).Green ());
1167 MyCStructure.ContextFillArea.Back.ColorEms.b =
1168 float (((CTX->BackMaterial ()).EmissiveColor ()).Blue ());
1170 MyCStructure.ContextFillArea.Back.EnvReflexion =
1171 float ((CTX->BackMaterial ()).EnvReflexion());
1173 /*** Front Material ***/
1174 // Light specificity
1175 MyCStructure.ContextFillArea.Front.Shininess =
1176 float ((CTX->FrontMaterial ()).Shininess ());
1177 MyCStructure.ContextFillArea.Front.Ambient =
1178 float ((CTX->FrontMaterial ()).Ambient ());
1179 MyCStructure.ContextFillArea.Front.Diffuse =
1180 float ((CTX->FrontMaterial ()).Diffuse ());
1181 MyCStructure.ContextFillArea.Front.Specular =
1182 float ((CTX->FrontMaterial ()).Specular ());
1183 MyCStructure.ContextFillArea.Front.Transparency =
1184 float ((CTX->FrontMaterial ()).Transparency ());
1185 MyCStructure.ContextFillArea.Front.Emission =
1186 float ((CTX->FrontMaterial ()).Emissive ());
1189 MyCStructure.ContextFillArea.Front.IsAmbient =
1190 ( (CTX->FrontMaterial ()).ReflectionMode (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
1191 MyCStructure.ContextFillArea.Front.IsDiffuse =
1192 ( (CTX->FrontMaterial ()).ReflectionMode (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
1193 MyCStructure.ContextFillArea.Front.IsSpecular =
1194 ( (CTX->FrontMaterial ()).ReflectionMode (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
1195 MyCStructure.ContextFillArea.Front.IsEmission =
1196 ( (CTX->FrontMaterial ()).ReflectionMode (Graphic3d_TOR_EMISSION) ? 1 : 0 );
1200 const Graphic3d_MaterialAspect amas = CTX->FrontMaterial () ;
1201 Standard_Boolean amty = amas.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
1202 MyCStructure.ContextFillArea.Front.IsPhysic = ( amty ? 1 : 0 );
1205 MyCStructure.ContextFillArea.Front.ColorSpec.r =
1206 float (((CTX->FrontMaterial ()).SpecularColor ()).Red ());
1207 MyCStructure.ContextFillArea.Front.ColorSpec.g =
1208 float (((CTX->FrontMaterial ()).SpecularColor ()).Green ());
1209 MyCStructure.ContextFillArea.Front.ColorSpec.b =
1210 float (((CTX->FrontMaterial ()).SpecularColor ()).Blue ());
1213 MyCStructure.ContextFillArea.Front.ColorAmb.r =
1214 float (((CTX->FrontMaterial ()).AmbientColor ()).Red ());
1215 MyCStructure.ContextFillArea.Front.ColorAmb.g =
1216 float (((CTX->FrontMaterial ()).AmbientColor ()).Green ());
1217 MyCStructure.ContextFillArea.Front.ColorAmb.b =
1218 float (((CTX->FrontMaterial ()).AmbientColor ()).Blue ());
1221 MyCStructure.ContextFillArea.Front.ColorDif.r =
1222 float (((CTX->FrontMaterial ()).DiffuseColor ()).Red ());
1223 MyCStructure.ContextFillArea.Front.ColorDif.g =
1224 float (((CTX->FrontMaterial ()).DiffuseColor ()).Green ());
1225 MyCStructure.ContextFillArea.Front.ColorDif.b =
1226 float (((CTX->FrontMaterial ()).DiffuseColor ()).Blue ());
1229 MyCStructure.ContextFillArea.Front.ColorEms.r =
1230 float (((CTX->FrontMaterial ()).EmissiveColor ()).Red ());
1231 MyCStructure.ContextFillArea.Front.ColorEms.g =
1232 float (((CTX->FrontMaterial ()).EmissiveColor ()).Green ());
1233 MyCStructure.ContextFillArea.Front.ColorEms.b =
1234 float (((CTX->FrontMaterial ()).EmissiveColor ()).Blue ());
1236 MyCStructure.ContextFillArea.Front.EnvReflexion =
1237 float ((CTX->FrontMaterial ()).EnvReflexion());
1239 MyCStructure.ContextFillArea.IsDef = 1; // Definition material ok
1241 Handle(Graphic3d_TextureMap) TempTextureMap = CTX->TextureMap();
1242 if (! TempTextureMap.IsNull() )
1243 MyCStructure.ContextFillArea.Texture.TexId = TempTextureMap->TextureId();
1245 MyCStructure.ContextFillArea.Texture.TexId = -1;
1247 MyCStructure.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1:0;
1249 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
1250 Standard_Integer aPolyMode;
1251 Standard_Real aPolyFactor, aPolyUnits;
1252 CTX->PolygonOffsets(aPolyMode, aPolyFactor, aPolyUnits);
1253 MyCStructure.ContextFillArea.PolygonOffsetMode = aPolyMode;
1254 MyCStructure.ContextFillArea.PolygonOffsetFactor = aPolyFactor;
1255 MyCStructure.ContextFillArea.PolygonOffsetUnits = aPolyUnits;
1256 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
1258 MyGraphicDriver->ContextStructure (MyCStructure);
1260 MyGraphicDriver -> DegenerateStructure (MyCStructure);
1264 // Les attributs sont "IsSet" lors de la premiere mise a jour
1265 // d'un contexte (line, marker...)
1266 MyCStructure.ContextLine.IsSet = 1;
1267 MyCStructure.ContextFillArea.IsSet = 1;
1268 MyCStructure.ContextMarker.IsSet = 1;
1269 MyCStructure.ContextText.IsSet = 1;
1275 void Graphic3d_Structure::SetPrimitivesAspect (const Handle(Graphic3d_AspectText3d)& CTX) {
1277 if (IsDeleted ()) return;
1279 Standard_Real R, G, B;
1280 Standard_Real Rs, Gs, Bs;
1281 Standard_CString AFont;
1282 Standard_Real ASpace;
1283 Standard_Real AnExpansion;
1284 Quantity_Color AColor;
1285 Aspect_TypeOfStyleText AStyle;
1286 Aspect_TypeOfDisplayText ADisplayType;
1287 Quantity_Color AColorSubTitle;
1288 Standard_Boolean ATextZoomable;
1289 Standard_Real ATextAngle;
1290 OSD_FontAspect ATextFontAspect;
1292 CTX->Values (AColor, AFont, AnExpansion, ASpace, AStyle, ADisplayType,AColorSubTitle,ATextZoomable,ATextAngle,ATextFontAspect);
1293 AColor.Values (R, G, B, Quantity_TOC_RGB);
1294 AColorSubTitle.Values (Rs, Gs, Bs, Quantity_TOC_RGB);
1296 MyCStructure.ContextText.Color.r = float (R);
1297 MyCStructure.ContextText.Color.g = float (G);
1298 MyCStructure.ContextText.Color.b = float (B);
1299 MyCStructure.ContextText.Font = (char*) (AFont);
1300 MyCStructure.ContextText.Expan = float (AnExpansion);
1301 MyCStructure.ContextText.Space = float (ASpace);
1302 MyCStructure.ContextText.Style = int (AStyle);
1303 MyCStructure.ContextText.DisplayType = int (ADisplayType);
1304 MyCStructure.ContextText.ColorSubTitle.r = float (Rs);
1305 MyCStructure.ContextText.ColorSubTitle.g = float (Gs);
1306 MyCStructure.ContextText.ColorSubTitle.b = float (Bs);
1307 MyCStructure.ContextText.TextZoomable = ATextZoomable;
1308 MyCStructure.ContextText.TextAngle = ATextAngle;
1309 MyCStructure.ContextText.TextFontAspect = (int)ATextFontAspect;
1311 MyCStructure.ContextText.IsDef = 1;
1313 MyGraphicDriver->ContextStructure (MyCStructure);
1316 // Les attributs sont "IsSet" lors de la premiere mise a jour
1317 // d'un contexte (line, marker...)
1318 MyCStructure.ContextLine.IsSet = 1;
1319 MyCStructure.ContextFillArea.IsSet = 1;
1320 MyCStructure.ContextMarker.IsSet = 1;
1321 MyCStructure.ContextText.IsSet = 1;
1327 void Graphic3d_Structure::SetPrimitivesAspect (const Handle(Graphic3d_AspectMarker3d)& CTX) {
1329 if (IsDeleted ()) return;
1331 Standard_Real R, G, B;
1332 Standard_Real AScale;
1333 Quantity_Color AColor;
1334 Aspect_TypeOfMarker AMType;
1336 CTX->Values (AColor, AMType, AScale);
1337 AColor.Values (R, G, B, Quantity_TOC_RGB);
1339 MyCStructure.ContextMarker.Color.r = float (R);
1340 MyCStructure.ContextMarker.Color.g = float (G);
1341 MyCStructure.ContextMarker.Color.b = float (B);
1342 MyCStructure.ContextMarker.MarkerType = int (AMType);
1343 MyCStructure.ContextMarker.Scale = float (AScale);
1344 MyCStructure.ContextMarker.IsDef = 1;
1346 MyGraphicDriver->ContextStructure (MyCStructure);
1349 // Les attributs sont "IsSet" lors de la premiere mise a jour
1350 // d'un contexte (line, marker...)
1351 MyCStructure.ContextLine.IsSet = 1;
1352 MyCStructure.ContextFillArea.IsSet = 1;
1353 MyCStructure.ContextMarker.IsSet = 1;
1354 MyCStructure.ContextText.IsSet = 1;
1360 void Graphic3d_Structure::SetVisual (const Graphic3d_TypeOfStructure AVisual) {
1362 if (IsDeleted ()) return;
1363 if (MyVisual == AVisual) return;
1365 if (! MyCStructure.stick) {
1367 SetComputeVisual (AVisual);
1371 Aspect_TypeOfUpdate UpdateMode = MyStructureManager->UpdateMode ();
1372 if (UpdateMode == Aspect_TOU_WAIT) {
1375 SetComputeVisual (AVisual);
1379 // Pour eviter d'appeler la methode : Update ()
1380 // Inutile et peut-etre couteux.
1381 MyStructureManager->SetUpdateMode (Aspect_TOU_WAIT);
1384 SetComputeVisual (AVisual);
1385 MyStructureManager->SetUpdateMode (UpdateMode);
1392 void Graphic3d_Structure::SetZoomLimit (const Standard_Real LimitInf, const Standard_Real LimitSup) {
1394 if (LimitInf <= 0.0)
1395 Graphic3d_StructureDefinitionError::Raise
1396 ("Bad value for ZoomLimit inf");
1398 if (LimitSup <= 0.0)
1399 Graphic3d_StructureDefinitionError::Raise
1400 ("Bad value for ZoomLimit sup");
1402 if (LimitSup < LimitInf)
1403 Graphic3d_StructureDefinitionError::Raise
1404 ("ZoomLimit sup < ZoomLimit inf");
1408 Graphic3d_TypeOfStructure Graphic3d_Structure::Visual () const {
1414 Standard_Boolean Graphic3d_Structure::AcceptConnection (const Handle(Graphic3d_Structure)& AStructure1, const Handle(Graphic3d_Structure)& AStructure2, const Graphic3d_TypeOfConnection AType) {
1416 Graphic3d_MapOfStructure ASet;
1419 Graphic3d_Structure::Network (AStructure2, AType, ASet);
1421 return (! ASet.Contains (AStructure1));
1425 void Graphic3d_Structure::Ancestors (Graphic3d_MapOfStructure &SG) const {
1427 Standard_Integer i, Length = MyAncestors.Length ();
1429 for (i=1; i<=Length; i++)
1430 SG.Add ((Graphic3d_Structure *) (MyAncestors.Value (i)));
1435 void Graphic3d_Structure::SetOwner (const Standard_Address Owner) {
1441 Standard_Address Graphic3d_Structure::Owner () const {
1447 void Graphic3d_Structure::Descendants (Graphic3d_MapOfStructure& SG) const {
1449 Standard_Integer i, Length = MyDescendants.Length ();
1451 for (i=1; i<=Length; i++)
1452 SG.Add ((Graphic3d_Structure *) (MyDescendants.Value (i)));
1456 void Graphic3d_Structure::Connect (const Handle(Graphic3d_Structure)& AStructure, const Graphic3d_TypeOfConnection AType, const Standard_Boolean WithCheck) {
1458 if (IsDeleted ()) return;
1462 if (! Graphic3d_Structure::AcceptConnection
1463 (this, AStructure, AType))
1471 case Graphic3d_TOC_DESCENDANT :
1473 Standard_Integer indexD = 0;
1474 Standard_Integer LengthD = MyDescendants.Length ();
1475 for (i=1; i<=LengthD && indexD==0; i++)
1476 if ((void *) (MyDescendants.Value (i)) ==
1477 (void *) (AStructure.operator->())) indexD = i;
1480 MyDescendants.Append ((void *) AStructure.operator->());
1481 AStructure->Connect (this, Graphic3d_TOC_ANCESTOR);
1483 GraphicConnect (AStructure);
1484 MyStructureManager->Connect (this, AStructure);
1491 case Graphic3d_TOC_ANCESTOR :
1493 Standard_Integer indexA = 0;
1494 Standard_Integer LengthA = MyAncestors.Length ();
1495 for (i=1; i<=LengthA && indexA==0; i++)
1496 if ((void *) (MyAncestors.Value (i)) ==
1497 (void *) (AStructure.operator->())) indexA = i;
1500 MyAncestors.Append ((void *) AStructure.operator->());
1501 AStructure->Connect (this, Graphic3d_TOC_DESCENDANT);
1503 // MyGraphicDriver->Connect est appele dans le cas
1504 // d'un connect entre mere et fille
1512 void Graphic3d_Structure::Disconnect (const Handle(Graphic3d_Structure)& AStructure) {
1514 if (IsDeleted ()) return;
1518 Standard_Integer indexD = 0;
1519 Standard_Integer LengthD = MyDescendants.Length ();
1520 for (i=1; i<=LengthD && indexD==0; i++)
1521 if ((void *) (MyDescendants.Value (i)) ==
1522 (void *) (AStructure.operator->())) indexD = i;
1524 // On cherche dans les Descendants
1526 MyDescendants.Remove (indexD);
1527 AStructure->Disconnect (this);
1529 GraphicDisconnect (AStructure);
1530 MyStructureManager->Disconnect (this, AStructure);
1535 Standard_Integer indexA = 0;
1536 Standard_Integer LengthA = MyAncestors.Length ();
1537 for (i=1; i<=LengthA && indexA==0; i++)
1538 if ((void *) (MyAncestors.Value (i)) ==
1539 (void *) (AStructure.operator->())) indexA = i;
1541 // On cherche dans les Ancestors
1543 MyAncestors.Remove (indexA);
1544 AStructure->Disconnect (this);
1546 // Pas de call a MyGraphicDriver->Disconnect
1547 // dans le cas d'un ancetre
1553 void Graphic3d_Structure::DisconnectAll (const Graphic3d_TypeOfConnection AType) {
1555 if (IsDeleted ()) return;
1557 Standard_Integer i, Length;
1562 case Graphic3d_TOC_DESCENDANT :
1563 Length = MyDescendants.Length ();
1564 for (i=1; i<=Length; i++)
1565 // Value (1) et non Value (i) car MyDescendants
1566 // est modifiee par :
1567 // Graphic3d_Structure::Disconnect (AStructure)
1568 // qui enleve AStructure de MyDescendants
1569 ((Graphic3d_Structure *)
1570 (MyDescendants.Value (1)))->Disconnect (this);
1572 case Graphic3d_TOC_ANCESTOR :
1573 Length = MyAncestors.Length ();
1574 for (i=1; i<=Length; i++)
1575 // Value (1) et non Value (i) car MyAncestors
1576 // est modifiee par :
1577 // Graphic3d_Structure::Disconnect (AStructure)
1578 // qui enleve AStructure de MyAncestors
1579 ((Graphic3d_Structure *)
1580 (MyAncestors.Value (1)))->Disconnect (this);
1586 Graphic3d_TypeOfComposition Graphic3d_Structure::Composition () const {
1588 if (MyCStructure.Composition)
1589 return (Graphic3d_TOC_POSTCONCATENATE);
1591 return (Graphic3d_TOC_REPLACE);
1595 void Graphic3d_Structure::SetTransform (const TColStd_Array2OfReal& AMatrix, const Graphic3d_TypeOfComposition AType) {
1597 if (IsDeleted ()) return;
1599 Standard_Integer lr, ur, lc, uc;
1600 Standard_Real valuetrsf;
1601 Standard_Real valueoldtrsf;
1602 Standard_Real valuenewtrsf;
1603 Standard_Integer i, j, k;
1604 TColStd_Array2OfReal TheTrsf (0, 3, 0, 3);
1605 TColStd_Array2OfReal NewTrsf (0, 3, 0, 3);
1606 TColStd_Array2OfReal AMatrix44 (0, 3, 0, 3);
1608 // Assign the new transformation in an array [0..3][0..3]
1609 // Evite des problemes si le user a defini sa matrice [1..4][1..4]
1610 // ou [3..6][-1..2] !!
1611 lr = AMatrix.LowerRow ();
1612 ur = AMatrix.UpperRow ();
1613 lc = AMatrix.LowerCol ();
1614 uc = AMatrix.UpperCol ();
1616 if ( (ur - lr + 1 != 4) || (uc - lc + 1 != 4) )
1617 Graphic3d_TransformError::Raise
1618 ("Transform : not a 4x4 matrix");
1620 if (AType == Graphic3d_TOC_REPLACE) {
1621 MyCStructure.Composition = 0;
1622 // La mise a jour de la CStructure
1623 for (i=0; i<=3; i++)
1624 for (j=0; j<=3; j++) {
1625 MyCStructure.Transformation[i][j] =
1626 float (AMatrix (lr + i, lc + j));
1627 NewTrsf (i, j) = AMatrix (lr + i, lc + j);
1631 if (AType == Graphic3d_TOC_POSTCONCATENATE) {
1632 MyCStructure.Composition = 1;
1633 // Pour simplifier la gestion des indices
1634 for (i=0; i<=3; i++)
1635 for (j=0; j<=3; j++)
1636 AMatrix44 (i, j) = AMatrix (lr + i, lc + j);
1637 // Le calcul de produit de matrices
1638 for (i=0; i<=3; i++)
1639 for (j=0; j<=3; j++) {
1640 NewTrsf (i, j) = 0.0;
1641 for (k=0; k<=3; k++) {
1642 valueoldtrsf = MyCStructure.Transformation[i][k];
1643 valuetrsf = AMatrix44 (k, j);
1644 valuenewtrsf = NewTrsf (i, j) +
1645 valueoldtrsf * valuetrsf;
1646 NewTrsf (i, j) = valuenewtrsf;
1649 // La mise a jour de la CStructure
1650 for (i=0; i<=3; i++)
1651 for (j=0; j<=3; j++)
1652 MyCStructure.Transformation[i][j] = float (NewTrsf (i, j));
1655 // Si transformation, non validation des parties cachees deja calculees.
1659 GraphicTransform (NewTrsf);
1660 MyStructureManager->SetTransform (this, NewTrsf);
1666 void Graphic3d_Structure::Transform (TColStd_Array2OfReal& AMatrix) const {
1668 Standard_Integer lr = AMatrix.LowerRow ();
1669 Standard_Integer ur = AMatrix.UpperRow ();
1670 Standard_Integer lc = AMatrix.LowerCol ();
1671 Standard_Integer uc = AMatrix.UpperCol ();
1673 if ( (ur - lr + 1 != 4) || (uc - lc + 1 != 4) )
1674 Graphic3d_TransformError::Raise
1675 ("Transform : not a 4x4 matrix");
1677 for (Standard_Integer i=0; i<=3; i++)
1678 for (Standard_Integer j=0; j<=3; j++)
1679 AMatrix (lr + i, lc + j) = MyCStructure.Transformation[i][j];
1683 void Graphic3d_Structure::MinMaxValues (Standard_Real& XMin, Standard_Real& YMin, Standard_Real& ZMin, Standard_Real& XMax, Standard_Real& YMax, Standard_Real& ZMax) const {
1685 Standard_Real RL = RealLast ();
1686 Standard_Real RF = RealFirst ();
1688 Standard_Real XTMin, YTMin, ZTMin, XTMax, YTMax, ZTMax, U, V, W;
1690 MinMaxCoord (XTMin, YTMin, ZTMin, XTMax, YTMax, ZTMax);
1691 if ((XTMin == RF) && (YTMin == RF) &&
1692 (ZTMin == RF) && (XTMax == RL) &&
1693 (YTMax == RL) && (ZTMax == RL)) {
1694 // Cas impossible car cela voudrait dire
1695 // que la structure est vide
1705 Standard_Integer i, j;
1706 TColStd_Array2OfReal TheTrsf (0, 3, 0, 3);
1708 for (i=0; i<=3; i++)
1709 for (j=0; j<=3; j++)
1710 TheTrsf (i, j) = MyCStructure.Transformation[i][j];
1712 Graphic3d_Structure::Transforms
1713 (TheTrsf, XTMin, YTMin, ZTMin, XMin, YMin, ZMin);
1714 Graphic3d_Structure::Transforms
1715 (TheTrsf, XTMax, YTMax, ZTMax, XMax, YMax, ZMax);
1716 Graphic3d_Structure::Transforms
1717 (TheTrsf, XTMin, YTMin, ZTMax, U, V, W);
1718 XMin = Min(U,XMin) ; XMax = Max(U,XMax) ;
1719 YMin = Min(V,YMin) ; YMax = Max(V,YMax) ;
1720 ZMin = Min(W,ZMin) ; ZMax = Max(W,ZMax) ;
1721 Graphic3d_Structure::Transforms
1722 (TheTrsf, XTMax, YTMin, ZTMax, U, V, W);
1723 XMin = Min(U,XMin) ; XMax = Max(U,XMax) ;
1724 YMin = Min(V,YMin) ; YMax = Max(V,YMax) ;
1725 ZMin = Min(W,ZMin) ; ZMax = Max(W,ZMax) ;
1726 Graphic3d_Structure::Transforms
1727 (TheTrsf, XTMax, YTMin, ZTMin, U, V, W);
1728 XMin = Min(U,XMin) ; XMax = Max(U,XMax) ;
1729 YMin = Min(V,YMin) ; YMax = Max(V,YMax) ;
1730 ZMin = Min(W,ZMin) ; ZMax = Max(W,ZMax) ;
1731 Graphic3d_Structure::Transforms
1732 (TheTrsf, XTMax, YTMax, ZTMin, U, V, W);
1733 XMin = Min(U,XMin) ; XMax = Max(U,XMax) ;
1734 YMin = Min(V,YMin) ; YMax = Max(V,YMax) ;
1735 ZMin = Min(W,ZMin) ; ZMax = Max(W,ZMax) ;
1736 Graphic3d_Structure::Transforms
1737 (TheTrsf, XTMin, YTMax, ZTMax, U, V, W);
1738 XMin = Min(U,XMin) ; XMax = Max(U,XMax) ;
1739 YMin = Min(V,YMin) ; YMax = Max(V,YMax) ;
1740 ZMin = Min(W,ZMin) ; ZMax = Max(W,ZMax) ;
1741 Graphic3d_Structure::Transforms
1742 (TheTrsf, XTMin, YTMax, ZTMin, U, V, W);
1743 XMin = Min(U,XMin) ; XMax = Max(U,XMax) ;
1744 YMin = Min(V,YMin) ; YMax = Max(V,YMax) ;
1745 ZMin = Min(W,ZMin) ; ZMax = Max(W,ZMax) ;
1749 void Graphic3d_Structure::GroupLabels (Standard_Integer& LB, Standard_Integer& LE) {
1751 LB = MyGroupGenId.Next ();
1752 LE = MyGroupGenId.Next ();
1756 Standard_Integer Graphic3d_Structure::Identification () const {
1758 Standard_Integer Result = MyCStructure.Id;
1764 void Graphic3d_Structure::SetTransformPersistence( const Graphic3d_TransModeFlags& AFlag )
1766 SetTransformPersistence( AFlag, gp_Pnt( 0, 0, 0 ) );
1769 void Graphic3d_Structure::SetTransformPersistence( const Graphic3d_TransModeFlags& AFlag,
1770 const gp_Pnt& APoint )
1772 if (IsDeleted ()) return;
1774 MyCStructure.TransformPersistence.Flag = AFlag;
1775 MyCStructure.TransformPersistence.Point.x = APoint.X();
1776 MyCStructure.TransformPersistence.Point.y = APoint.Y();
1777 MyCStructure.TransformPersistence.Point.z = APoint.Z();
1778 //MyStructureManager->Update ();
1780 MyGraphicDriver->ContextStructure( MyCStructure );
1782 MyCStructure.TransformPersistence.IsSet = 1;
1785 Graphic3d_TransModeFlags Graphic3d_Structure::TransformPersistenceMode() const
1787 return MyCStructure.TransformPersistence.Flag;
1790 gp_Pnt Graphic3d_Structure::TransformPersistencePoint() const
1792 gp_Pnt aPnt( 0., 0., 0. );
1793 aPnt.SetX( MyCStructure.TransformPersistence.Point.x );
1794 aPnt.SetY( MyCStructure.TransformPersistence.Point.y );
1795 aPnt.SetZ( MyCStructure.TransformPersistence.Point.z );
1800 void Graphic3d_Structure::Add (const Handle(Graphic3d_Group)& AGroup) {
1802 // Methode appelee que par le constructeur de Graphic3d_Group
1803 // Ce n'est pas la peine de tester l'existence de <AGroup>
1804 // dans la sequence MyGroups.
1805 MyGroups.Append (AGroup);
1809 void Graphic3d_Structure::Remove (const Standard_Address APtr, const Graphic3d_TypeOfConnection AType) {
1811 Standard_Integer i, index, length;
1815 case Graphic3d_TOC_DESCENDANT :
1817 length = MyDescendants.Length ();
1818 for (i=1; i<=length && index==0; i++)
1819 if ((void *) (MyDescendants.Value (i)) == APtr)
1822 MyDescendants.Remove (index);
1825 cout << "Error, Graphic3d_Structure::Remove\n";
1829 case Graphic3d_TOC_ANCESTOR :
1831 length = MyAncestors.Length ();
1832 for (i=1; i<=length && index==0; i++)
1833 if ((void *) (MyAncestors.Value (i)) == APtr)
1836 MyAncestors.Remove (index);
1839 cout << "Error, Graphic3d_Structure::Remove\n";
1846 void Graphic3d_Structure::Remove (const Handle(Graphic3d_Group)& AGroup) {
1848 Standard_Integer index = 0;
1849 Standard_Integer Length = MyGroups.Length ();
1850 for (Standard_Integer i=1; i<=Length && index==0; i++)
1851 if (MyGroups.Value (i) == AGroup) index = i;
1853 // On cherche dans les Groups
1855 Standard_Integer GroupLabelBegin, GroupLabelEnd;
1856 AGroup->Labels (GroupLabelBegin, GroupLabelEnd);
1857 MyGroupGenId.Free (GroupLabelBegin);
1858 MyGroupGenId.Free (GroupLabelEnd);
1859 MyGroups.Remove (index);
1864 Handle(Graphic3d_StructureManager) Graphic3d_Structure::StructureManager () const {
1868 (Handle(Graphic3d_StructureManager)::DownCast(Handle(Standard_Transient)
1869 ((Standard_Transient*) MyPtrStructureManager)));
1871 return MyStructureManager;
1876 Graphic3d_TypeOfPrimitive Graphic3d_Structure::Type (const Standard_Integer ElementNumber) const {
1878 if (IsDeleted ()) return (Graphic3d_TOP_UNDEFINED);
1880 Graphic3d_TypeOfPrimitive Result;
1882 Result = MyGraphicDriver->ElementType
1883 (MyCStructure, ElementNumber);
1889 Standard_Boolean Graphic3d_Structure::Exploration (const Standard_Integer ElementNumber, Graphic3d_VertexNC& AVertex, Graphic3d_Vector& AVector) const {
1891 Standard_Boolean Result = Standard_False;
1893 if (IsDeleted ()) return (Result);
1895 Result = MyGraphicDriver->ElementExploration
1896 (MyCStructure, ElementNumber, AVertex, AVector);
1902 void Graphic3d_Structure::Exploration () const {
1904 if (IsDeleted ()) return;
1906 MyGraphicDriver->DumpStructure (MyCStructure);
1910 void Graphic3d_Structure::MinMaxCoord (Standard_Real& XMin, Standard_Real& YMin, Standard_Real& ZMin, Standard_Real& XMax, Standard_Real& YMax, Standard_Real& ZMax) const {
1912 Standard_Real RL = RealLast ();
1913 Standard_Real RF = RealFirst ();
1915 Standard_Real Xm, Ym, Zm, XM, YM, ZM;
1917 //Bounding borders of infinite line has been calculated as own point
1918 //in center of this line
1919 if (IsEmpty () || IsInfinite ()) {
1921 for (int i=1; i<=MyGroups.Length (); i++)
1922 if (! (MyGroups.Value (i))->IsEmpty () ) {
1923 (MyGroups.Value (i))->MinMaxValues(Xm, Ym, Zm, XM, YM, ZM);
1924 Graphic3d_Vertex vertex1(Xm, Ym, Zm);
1925 Graphic3d_Vertex vertex2(XM, YM, ZM);
1926 Standard_Real distance = vertex1.Distance( vertex1,vertex2 );
1927 if( distance >= 500000.0){
1928 XMin = XMax = (Xm+ XM)/2.0;
1929 YMin = YMax = (Ym+ YM)/2.0;
1930 ZMin = ZMax = (Zm+ ZM)/2.0;
1951 Standard_Integer i, Length;
1953 Length = MyGroups.Length ();
1954 for (i=1; i<=Length; i++)
1955 if (! (MyGroups.Value (i))->IsEmpty () ) {
1956 (MyGroups.Value (i))->MinMaxValues(Xm, Ym, Zm, XM, YM, ZM);
1957 if (Xm < XMin) XMin = Xm;
1958 if (Ym < YMin) YMin = Ym;
1959 if (Zm < ZMin) ZMin = Zm;
1960 if (XM > XMax) XMax = XM;
1961 if (YM > YMax) YMax = YM;
1962 if (ZM > ZMax) ZMax = ZM;
1965 Length = MyDescendants.Length ();
1966 for (i=1; i<=Length; i++)
1967 if (! ((Graphic3d_Structure *)
1968 (MyDescendants.Value (i)))->IsEmpty () ) {
1969 ((Graphic3d_Structure *)
1970 (MyDescendants.Value (i)))->MinMaxValues (Xm, Ym, Zm, XM, YM, ZM);
1972 if (Xm < XMin) XMin = Xm;
1973 if (Ym < YMin) YMin = Ym;
1974 if (Zm < ZMin) ZMin = Zm;
1975 if (XM > XMax) XMax = XM;
1976 if (YM > YMax) YMax = YM;
1977 if (ZM > ZMax) ZMax = ZM;
1980 if ((XMin == RL) && (YMin == RL) &&
1981 (ZMin == RL) && (XMax == RF) &&
1982 (YMax == RF) && (ZMax == RF)) {
1983 // Cas impossible car cela voudrait dire
1984 // que la structure est vide
1998 void Graphic3d_Structure::Transforms (const TColStd_Array2OfReal& ATrsf, const Standard_Real X, const Standard_Real Y, const Standard_Real Z, Standard_Real& NewX, Standard_Real& NewY, Standard_Real& NewZ) {
2000 Standard_Real A, B, C, D;
2002 Standard_Real RL = RealLast ();
2003 Standard_Real RF = RealFirst ();
2005 if ((X == RF) || (Y == RF) || (Z == RF) ||
2006 (X == RL) || (Y == RL) || (Z == RL)) {
2016 NewX = A * X + B * Y + C * Z + D;
2021 NewY = A * X + B * Y + C * Z + D;
2026 NewZ = A * X + B * Y + C * Z + D;
2031 Graphic3d_Vector Graphic3d_Structure::Transforms (const TColStd_Array2OfReal& ATrsf, const Graphic3d_Vector& Coord) {
2033 Standard_Real NewX, NewY, NewZ;
2034 Graphic3d_Vector Result;
2036 Graphic3d_Structure::Transforms
2037 (ATrsf, Coord.X (), Coord.Y (), Coord.Z (), NewX, NewY, NewZ);
2038 Result.SetCoord (NewX, NewY, NewZ);
2044 Graphic3d_Vertex Graphic3d_Structure::Transforms (const TColStd_Array2OfReal& ATrsf, const Graphic3d_Vertex& Coord) {
2046 Standard_Real NewX, NewY, NewZ;
2047 Graphic3d_Vertex Result;
2049 Graphic3d_Structure::Transforms
2050 (ATrsf, Coord.X (), Coord.Y (), Coord.Z (), NewX, NewY, NewZ);
2051 Result.SetCoord (NewX, NewY, NewZ);
2057 void Graphic3d_Structure::Network (const Handle(Graphic3d_Structure)& AStructure, const Graphic3d_TypeOfConnection AType, Graphic3d_MapOfStructure& ASet) {
2060 Graphic3d_MapOfStructure h1;
2061 Graphic3d_MapOfStructure h2;
2062 AStructure->Descendants (h1);
2063 AStructure->Ancestors (h2);
2065 Graphic3d_MapIteratorOfMapOfStructure IteratorD (h1);
2066 Graphic3d_MapIteratorOfMapOfStructure IteratorA (h2);
2068 ASet.Add (AStructure);
2074 case Graphic3d_TOC_DESCENDANT :
2075 while (IteratorD.More ()) {
2076 Graphic3d_Structure::Network
2077 (IteratorD.Key (), AType, ASet);
2078 // IteratorD.Next () se positionne
2079 // sur la prochaine structure
2084 case Graphic3d_TOC_ANCESTOR :
2085 while (IteratorA.More ()) {
2086 Graphic3d_Structure::Network
2087 (IteratorA.Key (), AType, ASet);
2088 // IteratorA.Next () se positionne
2089 // sur la prochaine structure
2097 void Graphic3d_Structure::PrintNetwork (const Handle(Graphic3d_Structure)& AStructure, const Graphic3d_TypeOfConnection AType)
2100 Graphic3d_MapOfStructure ASet;
2102 Graphic3d_MapIteratorOfMapOfStructure IteratorASet (ASet);
2104 Graphic3d_Structure::Network (AStructure, AType, ASet);
2106 while (IteratorASet.More ()) {
2108 << (IteratorASet.Key ())->Identification () << "\n";
2109 IteratorASet.Next ();
2115 void Graphic3d_Structure::Update () const
2118 if (IsDeleted ()) return;
2120 if (MyStructureManager->UpdateMode () == Aspect_TOU_ASAP)
2121 MyStructureManager->Update ();
2125 void Graphic3d_Structure::UpdateStructure (const Handle(Graphic3d_AspectLine3d)& CTXL, const Handle(Graphic3d_AspectText3d)& CTXT, const Handle(Graphic3d_AspectMarker3d)& CTXM, const Handle(Graphic3d_AspectFillArea3d)& CTXF)
2128 Standard_Real R, G, B;
2129 Standard_Real Rs, Gs, Bs;
2130 Standard_CString AFont;
2131 Standard_Real ASpace;
2132 Standard_Real AnExpansion;
2133 Standard_Real AWidth;
2134 Standard_Real AScale;
2135 Quantity_Color AColor;
2136 Quantity_Color AnIntColor;
2137 Quantity_Color BackIntColor;
2138 Quantity_Color AnEdgeColor;
2139 Aspect_TypeOfLine ALType;
2140 Aspect_TypeOfMarker AMType;
2141 Aspect_InteriorStyle AStyle;
2142 Aspect_TypeOfStyleText AStyleT;
2143 Aspect_TypeOfDisplayText ADisplayType;
2144 Quantity_Color AColorSubTitle;
2145 Standard_Boolean ATextZoomable;
2146 Standard_Real ATextAngle;
2147 OSD_FontAspect ATextFontAspect;
2150 CTXL->Values (AColor, ALType, AWidth);
2151 AColor.Values (R, G, B, Quantity_TOC_RGB);
2153 MyCStructure.ContextLine.Color.r = float (R);
2154 MyCStructure.ContextLine.Color.g = float (G);
2155 MyCStructure.ContextLine.Color.b = float (B);
2156 MyCStructure.ContextLine.LineType = int (ALType);
2157 MyCStructure.ContextLine.Width = float (AWidth);
2159 CTXM->Values (AColor, AMType, AScale);
2160 AColor.Values (R, G, B, Quantity_TOC_RGB);
2162 MyCStructure.ContextMarker.Color.r = float (R);
2163 MyCStructure.ContextMarker.Color.g = float (G);
2164 MyCStructure.ContextMarker.Color.b = float (B);
2165 MyCStructure.ContextMarker.MarkerType = int (AMType);
2166 MyCStructure.ContextMarker.Scale = float (AScale);
2168 CTXT->Values (AColor, AFont, AnExpansion, ASpace,AStyleT,ADisplayType,AColorSubTitle,ATextZoomable,ATextAngle,ATextFontAspect);
2169 AColor.Values (R, G, B, Quantity_TOC_RGB);
2170 AColorSubTitle.Values (Rs, Gs, Bs, Quantity_TOC_RGB);
2172 MyCStructure.ContextText.Color.r = float (R);
2173 MyCStructure.ContextText.Color.g = float (G);
2174 MyCStructure.ContextText.Color.b = float (B);
2175 MyCStructure.ContextText.Font = (char*) (AFont);
2176 MyCStructure.ContextText.Expan = float (AnExpansion);
2177 MyCStructure.ContextText.Style = int (AStyleT);
2178 MyCStructure.ContextText.DisplayType = int (ADisplayType);
2179 MyCStructure.ContextText.Space = float (ASpace);
2180 MyCStructure.ContextText.ColorSubTitle.r = float (Rs);
2181 MyCStructure.ContextText.ColorSubTitle.g = float (Gs);
2182 MyCStructure.ContextText.ColorSubTitle.b = float (Bs);
2183 MyCStructure.ContextText.TextZoomable = ATextZoomable;
2184 MyCStructure.ContextText.TextAngle = ATextAngle;
2185 MyCStructure.ContextText.TextFontAspect = (int)ATextFontAspect;
2189 CTXF->Values (AStyle, AnIntColor, BackIntColor, AnEdgeColor, ALType, AWidth);
2190 AnIntColor.Values (R, G, B, Quantity_TOC_RGB);
2192 MyCStructure.ContextFillArea.Style = int (AStyle);
2193 MyCStructure.ContextFillArea.IntColor.r = float (R);
2194 MyCStructure.ContextFillArea.IntColor.g = float (G);
2195 MyCStructure.ContextFillArea.IntColor.b = float (B);
2197 if ( CTXF->Distinguish() )
2198 BackIntColor.Values( R, G, B, Quantity_TOC_RGB );
2200 MyCStructure.ContextFillArea.BackIntColor.r = float( R );
2201 MyCStructure.ContextFillArea.BackIntColor.g = float( G );
2202 MyCStructure.ContextFillArea.BackIntColor.b = float( B );
2205 MyCStructure.ContextFillArea.Edge = CTXF->Edge () ? 1:0;
2206 AnEdgeColor.Values (R, G, B, Quantity_TOC_RGB);
2207 MyCStructure.ContextFillArea.EdgeColor.r = float (R);
2208 MyCStructure.ContextFillArea.EdgeColor.g = float (G);
2209 MyCStructure.ContextFillArea.EdgeColor.b = float (B);
2210 MyCStructure.ContextFillArea.LineType = int (ALType);
2211 MyCStructure.ContextFillArea.Width = float (AWidth);
2212 MyCStructure.ContextFillArea.Hatch = int (CTXF->HatchStyle ());
2214 Quantity_Ratio ratio;
2215 MyCStructure.ContextFillArea.DegenerationMode =
2216 int (CTXF->DegenerateModel(ratio));
2217 MyCStructure.ContextFillArea.SkipRatio = float (ratio);
2221 /*** Front and Back face ***/
2222 MyCStructure.ContextFillArea.Distinguish = CTXF->Distinguish () ? 1:0;
2223 MyCStructure.ContextFillArea.BackFace = CTXF->BackFace () ? 1:0;
2224 /*** Back Material ***/
2225 // Light specificity
2226 MyCStructure.ContextFillArea.Back.Shininess =
2227 float ((CTXF->BackMaterial ()).Shininess ());
2228 MyCStructure.ContextFillArea.Back.Ambient =
2229 float ((CTXF->BackMaterial ()).Ambient ());
2230 MyCStructure.ContextFillArea.Back.Diffuse =
2231 float ((CTXF->BackMaterial ()).Diffuse ());
2232 MyCStructure.ContextFillArea.Back.Specular =
2233 float ((CTXF->BackMaterial ()).Specular ());
2234 MyCStructure.ContextFillArea.Back.Transparency =
2235 float ((CTXF->BackMaterial ()).Transparency ());
2236 MyCStructure.ContextFillArea.Back.Emission =
2237 float ((CTXF->BackMaterial ()).Emissive ());
2240 MyCStructure.ContextFillArea.Back.IsAmbient =
2241 ( (CTXF->BackMaterial ()).ReflectionMode (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
2242 MyCStructure.ContextFillArea.Back.IsDiffuse =
2243 ( (CTXF->BackMaterial ()).ReflectionMode (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
2244 MyCStructure.ContextFillArea.Back.IsSpecular =
2245 ( (CTXF->BackMaterial ()).ReflectionMode (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
2246 MyCStructure.ContextFillArea.Back.IsEmission =
2247 ( (CTXF->BackMaterial ()).ReflectionMode (Graphic3d_TOR_EMISSION) ? 1 : 0 );
2251 const Graphic3d_MaterialAspect ama = CTXF->BackMaterial () ;
2252 Standard_Boolean amt = ama.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
2253 MyCStructure.ContextFillArea.Back.IsPhysic = ( amt ? 1 : 0 );
2256 MyCStructure.ContextFillArea.Back.ColorSpec.r =
2257 float (((CTXF->BackMaterial ()).SpecularColor ()).Red ());
2258 MyCStructure.ContextFillArea.Back.ColorSpec.g =
2259 float (((CTXF->BackMaterial ()).SpecularColor ()).Green ());
2260 MyCStructure.ContextFillArea.Back.ColorSpec.b =
2261 float (((CTXF->BackMaterial ()).SpecularColor ()).Blue ());
2264 MyCStructure.ContextFillArea.Back.ColorAmb.r =
2265 float (((CTXF->BackMaterial ()).AmbientColor ()).Red ());
2266 MyCStructure.ContextFillArea.Back.ColorAmb.g =
2267 float (((CTXF->BackMaterial ()).AmbientColor ()).Green ());
2268 MyCStructure.ContextFillArea.Back.ColorAmb.b =
2269 float (((CTXF->BackMaterial ()).AmbientColor ()).Blue ());
2272 MyCStructure.ContextFillArea.Back.ColorDif.r =
2273 float (((CTXF->BackMaterial ()).DiffuseColor ()).Red ());
2274 MyCStructure.ContextFillArea.Back.ColorDif.g =
2275 float (((CTXF->BackMaterial ()).DiffuseColor ()).Green ());
2276 MyCStructure.ContextFillArea.Back.ColorDif.b =
2277 float (((CTXF->BackMaterial ()).DiffuseColor ()).Blue ());
2280 MyCStructure.ContextFillArea.Back.ColorEms.r =
2281 float (((CTXF->BackMaterial ()).EmissiveColor ()).Red ());
2282 MyCStructure.ContextFillArea.Back.ColorEms.g =
2283 float (((CTXF->BackMaterial ()).EmissiveColor ()).Green ());
2284 MyCStructure.ContextFillArea.Back.ColorEms.b =
2285 float (((CTXF->BackMaterial ()).EmissiveColor ()).Blue ());
2287 MyCStructure.ContextFillArea.Back.EnvReflexion =
2288 float ((CTXF->BackMaterial ()).EnvReflexion());
2290 /*** Front Material ***/
2291 // Light specificity
2292 MyCStructure.ContextFillArea.Front.Shininess =
2293 float ((CTXF->FrontMaterial ()).Shininess ());
2294 MyCStructure.ContextFillArea.Front.Ambient =
2295 float ((CTXF->FrontMaterial ()).Ambient ());
2296 MyCStructure.ContextFillArea.Front.Diffuse =
2297 float ((CTXF->FrontMaterial ()).Diffuse ());
2298 MyCStructure.ContextFillArea.Front.Specular =
2299 float ((CTXF->FrontMaterial ()).Specular ());
2300 MyCStructure.ContextFillArea.Front.Transparency =
2301 float ((CTXF->FrontMaterial ()).Transparency ());
2302 MyCStructure.ContextFillArea.Front.Emission =
2303 float ((CTXF->FrontMaterial ()).Emissive ());
2306 MyCStructure.ContextFillArea.Front.IsAmbient =
2307 ( (CTXF->FrontMaterial ()).ReflectionMode (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
2308 MyCStructure.ContextFillArea.Front.IsDiffuse =
2309 ( (CTXF->FrontMaterial ()).ReflectionMode (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
2310 MyCStructure.ContextFillArea.Front.IsSpecular =
2311 ( (CTXF->FrontMaterial ()).ReflectionMode (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
2312 MyCStructure.ContextFillArea.Front.IsEmission =
2313 ( (CTXF->FrontMaterial ()).ReflectionMode (Graphic3d_TOR_EMISSION) ? 1 : 0 );
2317 const Graphic3d_MaterialAspect amas = CTXF->FrontMaterial () ;
2318 Standard_Boolean amty = amas.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
2319 MyCStructure.ContextFillArea.Front.IsPhysic = ( amty ? 1 : 0 );
2322 MyCStructure.ContextFillArea.Front.ColorSpec.r =
2323 float (((CTXF->FrontMaterial ()).SpecularColor ()).Red ());
2324 MyCStructure.ContextFillArea.Front.ColorSpec.g =
2325 float (((CTXF->FrontMaterial ()).SpecularColor ()).Green ());
2326 MyCStructure.ContextFillArea.Front.ColorSpec.b =
2327 float (((CTXF->FrontMaterial ()).SpecularColor ()).Blue ());
2330 MyCStructure.ContextFillArea.Front.ColorAmb.r =
2331 float (((CTXF->FrontMaterial ()).AmbientColor ()).Red ());
2332 MyCStructure.ContextFillArea.Front.ColorAmb.g =
2333 float (((CTXF->FrontMaterial ()).AmbientColor ()).Green ());
2334 MyCStructure.ContextFillArea.Front.ColorAmb.b =
2335 float (((CTXF->FrontMaterial ()).AmbientColor ()).Blue ());
2338 MyCStructure.ContextFillArea.Front.ColorDif.r =
2339 float (((CTXF->FrontMaterial ()).DiffuseColor ()).Red ());
2340 MyCStructure.ContextFillArea.Front.ColorDif.g =
2341 float (((CTXF->FrontMaterial ()).DiffuseColor ()).Green ());
2342 MyCStructure.ContextFillArea.Front.ColorDif.b =
2343 float (((CTXF->FrontMaterial ()).DiffuseColor ()).Blue ());
2346 MyCStructure.ContextFillArea.Front.ColorEms.r =
2347 float (((CTXF->FrontMaterial ()).EmissiveColor ()).Red ());
2348 MyCStructure.ContextFillArea.Front.ColorEms.g =
2349 float (((CTXF->FrontMaterial ()).EmissiveColor ()).Green ());
2350 MyCStructure.ContextFillArea.Front.ColorEms.b =
2351 float (((CTXF->FrontMaterial ()).EmissiveColor ()).Blue ());
2353 MyCStructure.ContextFillArea.Front.EnvReflexion =
2354 float ((CTXF->FrontMaterial ()).EnvReflexion());
2356 Handle(Graphic3d_TextureMap) TempTextureMap = CTXF->TextureMap();
2357 if (! TempTextureMap.IsNull() )
2358 MyCStructure.ContextFillArea.Texture.TexId = TempTextureMap->TextureId();
2360 MyCStructure.ContextFillArea.Texture.TexId = -1;
2362 MyCStructure.ContextFillArea.Texture.doTextureMap = CTXF->TextureMapState() ? 1:0;
2364 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
2365 Standard_Integer aPolyMode;
2366 Standard_Real aPolyFactor, aPolyUnits;
2367 CTXF->PolygonOffsets(aPolyMode, aPolyFactor, aPolyUnits);
2368 MyCStructure.ContextFillArea.PolygonOffsetMode = aPolyMode;
2369 MyCStructure.ContextFillArea.PolygonOffsetFactor = aPolyFactor;
2370 MyCStructure.ContextFillArea.PolygonOffsetUnits = aPolyUnits;
2371 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
2374 void Graphic3d_Structure::GraphicHighlight (const Aspect_TypeOfHighlightMethod AMethod) {
2376 Standard_Real XMin, YMin, ZMin, XMax, YMax, ZMax;
2377 Standard_Real R, G, B;
2379 MyCStructure.highlight = 1;
2380 MyHighlightMethod = AMethod;
2384 case Aspect_TOHM_COLOR :
2385 MyHighlightColor.Values (R, G, B, Quantity_TOC_RGB);
2386 MyGraphicDriver->HighlightColor
2387 (MyCStructure, float (R), float (G),
2388 float (B) , Standard_True);
2389 MyGraphicDriver->NameSetStructure (MyCStructure);
2391 case Aspect_TOHM_BLINK :
2392 MyGraphicDriver->Blink (MyCStructure, Standard_True);
2393 MyGraphicDriver->NameSetStructure (MyCStructure);
2395 case Aspect_TOHM_BOUNDBOX :
2396 if (IsEmpty () || IsInfinite ()) {
2397 // Structure vide ou infinie
2398 XMin = YMin = ZMin = 0.;
2399 XMax = YMax = ZMax = 0.;
2403 (XMin, YMin, ZMin, XMax, YMax, ZMax);
2405 MyCStructure.BoundBox.Pmin.x = float (XMin);
2406 MyCStructure.BoundBox.Pmin.y = float (YMin);
2407 MyCStructure.BoundBox.Pmin.z = float (ZMin);
2408 MyCStructure.BoundBox.Pmax.x = float (XMax);
2409 MyCStructure.BoundBox.Pmax.y = float (YMax);
2410 MyCStructure.BoundBox.Pmax.z = float (ZMax);
2411 MyHighlightColor.Values (R, G, B, Quantity_TOC_RGB);
2412 MyCStructure.BoundBox.Color.r = float (R);
2413 MyCStructure.BoundBox.Color.g = float (G);
2414 MyCStructure.BoundBox.Color.b = float (B);
2415 MyGraphicDriver->BoundaryBox (MyCStructure, Standard_True);
2421 void Graphic3d_Structure::GraphicTransform (const TColStd_Array2OfReal& AMatrix) {
2423 Standard_Integer i, j;
2425 for (i=0; i<=3; i++)
2426 for (j=0; j<=3; j++)
2427 MyCStructure.Transformation[i][j] = float (AMatrix (i, j));
2429 MyGraphicDriver->TransformStructure (MyCStructure);
2433 void Graphic3d_Structure::GraphicUnHighlight () {
2435 MyCStructure.highlight = 0;
2437 switch (MyHighlightMethod)
2439 case Aspect_TOHM_COLOR :
2440 MyGraphicDriver->HighlightColor
2441 (MyCStructure, 0.0, 0.0, 0.0 , Standard_False);
2442 MyGraphicDriver->NameSetStructure (MyCStructure);
2444 case Aspect_TOHM_BLINK :
2445 MyGraphicDriver->Blink (MyCStructure, Standard_False);
2446 MyGraphicDriver->NameSetStructure (MyCStructure);
2448 case Aspect_TOHM_BOUNDBOX :
2449 MyGraphicDriver->BoundaryBox
2450 (MyCStructure, Standard_False);
2451 MyGraphicDriver->NameSetStructure (MyCStructure);
2457 Graphic3d_TypeOfStructure Graphic3d_Structure::ComputeVisual () const {
2459 return (MyComputeVisual);
2463 void Graphic3d_Structure::SetComputeVisual (const Graphic3d_TypeOfStructure AVisual) {
2465 // On ne memorise le ComputeVisual que lorsque la structure est
2466 // declaree TOS_ALL, TOS_WIREFRAME ou TOS_SHADING.
2467 // C'est cette declaration qui va nous permettre de calculer
2468 // la bonne representation de la structure calculee par Compute
2469 // et non pas le passage en TOS_COMPUTED.
2470 if (AVisual != Graphic3d_TOS_COMPUTED)
2471 MyComputeVisual = AVisual;
2475 void Graphic3d_Structure::Plot (const Handle(Graphic3d_Plotter)& ) {
2479 void Graphic3d_Structure::SetManager (const Handle(Graphic3d_StructureManager)& AManager, const Standard_Boolean WithPropagation) {
2481 // Toutes les structures connectees doivent suivre ?
2483 if (WithPropagation) {
2484 Standard_Integer i, Length;
2485 Length = MyDescendants.Length ();
2486 for (i=1; i<=Length; i++)
2487 ((Graphic3d_Structure *)
2488 (MyDescendants.Value (i)))->SetStructureManager (AManager);
2490 Length = MyAncestors.Length ();
2491 for (i=1; i<=Length; i++)
2492 ((Graphic3d_Structure *)
2493 (MyAncestors.Value (i)))->SetStructureManager (AManager);
2497 // changement d'identification ?
2498 // MyStructureManager->Remove (Standard_Integer (MyCStructure.Id));
2499 // AManager->NewIdentification ();
2500 // MyCStructure.Id = int (AManager->NewIdentification ());
2502 Aspect_TypeOfUpdate UpdateMode = MyStructureManager->UpdateMode ();
2503 Aspect_TypeOfUpdate NewUpdateMode = AManager->UpdateMode ();
2504 MyStructureManager->SetUpdateMode (Aspect_TOU_WAIT);
2505 AManager->SetUpdateMode (Aspect_TOU_WAIT);
2507 if (MyCStructure.stick) {
2508 MyStructureManager->Erase (this);
2509 AManager->Display (this);
2512 if (MyCStructure.highlight) {
2515 if (MyCStructure.visible) {
2516 MyStructureManager->Invisible (this);
2517 AManager->Visible (this);
2520 if (MyCStructure.pick) {
2521 MyStructureManager->Undetectable (this);
2522 AManager->Detectable (this);
2525 MyStructureManager->SetUpdateMode (UpdateMode);
2526 AManager->SetUpdateMode (NewUpdateMode);
2529 MyPtrStructureManager = (void *) AManager.operator->();
2533 void Graphic3d_Structure::SetHLRValidation (const Standard_Boolean AFlag) {
2535 MyCStructure.HLRValidation = AFlag ? 1:0;
2539 Standard_Boolean Graphic3d_Structure::HLRValidation () const {
2541 // Les parties cachees stockees dans <me> sont valides si :
2542 // 1/ le proprietaire est defini.
2543 // 2/ elles n'ont pas ete invalidees.
2545 Standard_Boolean Result = MyOwner != NULL && MyCStructure.HLRValidation != 0;
2551 Standard_Address Graphic3d_Structure::CStructure () const {
2553 return Standard_Address (&MyCStructure);