1 // File: OpenGl_GraphicDriver_703.cxx
2 // Created: 20 October 2011
3 // Author: Sergey ZERCHANINOV
4 // Copyright: OPEN CASCADE 2011
6 #include <OpenGl_GraphicDriver.hxx>
8 #include <Aspect_TypeOfMarker.hxx>
9 #include <OpenGl_Group.hxx>
10 #include <OpenGl_MarkerSet.hxx>
11 #include <Graphic3d_Array1OfVertex.hxx>
13 static void OpenGl_CreateMarkers(const Graphic3d_CGroup& ACGroup, const Standard_Integer NbPoints, const Graphic3d_Vertex *Points)
15 OpenGl_MarkerSet *amarkerset = new OpenGl_MarkerSet( NbPoints, Points );
16 ((OpenGl_Group *)ACGroup.ptrGroup)->AddElement( TelMarkerSet, amarkerset );
19 void OpenGl_GraphicDriver::Marker (const Graphic3d_CGroup& ACGroup, const Graphic3d_Vertex& APoint, const Standard_Boolean )
21 if (!ACGroup.ptrGroup)
24 const Aspect_TypeOfMarker AType = Aspect_TypeOfMarker (ACGroup.ContextMarker.MarkerType);
28 case Aspect_TOM_POINT :
29 case Aspect_TOM_PLUS :
30 case Aspect_TOM_STAR :
33 case Aspect_TOM_O_POINT :
34 case Aspect_TOM_O_PLUS :
35 case Aspect_TOM_O_STAR :
37 case Aspect_TOM_RING1 :
38 case Aspect_TOM_RING2 :
39 case Aspect_TOM_RING3 :
40 case Aspect_TOM_USERDEFINED:
41 OpenGl_CreateMarkers(ACGroup, 1, &APoint);
44 case Aspect_TOM_BALL :
46 const Standard_Real Delta = 0.1;
48 Standard_Real R, G, B, H, L, S, AScale;
49 R = Standard_Real (ACGroup.ContextMarker.Color.r);
50 G = Standard_Real (ACGroup.ContextMarker.Color.g);
51 B = Standard_Real (ACGroup.ContextMarker.Color.b);
52 AScale = Standard_Real (ACGroup.ContextMarker.Scale);
54 // we draw a set of circles
55 CALL_DEF_CONTEXTMARKER AContext;
56 AContext.MarkerType = int (Aspect_TOM_O);
59 Quantity_Color::RgbHls (R, G, B, H, L, S);
60 // Modification de la saturation de 5 %
62 Quantity_Color::HlsRgb (H, L, S, R, G, B);
63 AContext.Color.r = float (R);
64 AContext.Color.g = float (G);
65 AContext.Color.b = float (B);
66 AContext.Scale = float (AScale);
67 ((OpenGl_Group *)ACGroup.ptrGroup)->SetAspectMarker(AContext, Standard_False);
68 OpenGl_CreateMarkers(ACGroup, 1, &APoint);
78 void OpenGl_GraphicDriver::MarkerSet (const Graphic3d_CGroup& ACGroup,
79 const Graphic3d_Array1OfVertex& ListVertex,
80 const Standard_Boolean )
82 if (!ACGroup.ptrGroup)
85 const Standard_Integer nb = ListVertex.Length();
86 const Graphic3d_Vertex *arr = &ListVertex( ListVertex.Lower() );
88 const Aspect_TypeOfMarker AType = Aspect_TypeOfMarker (ACGroup.ContextMarker.MarkerType);
92 case Aspect_TOM_POINT :
93 case Aspect_TOM_PLUS :
94 case Aspect_TOM_STAR :
97 case Aspect_TOM_O_POINT :
98 case Aspect_TOM_O_PLUS :
99 case Aspect_TOM_O_STAR :
100 case Aspect_TOM_O_X :
101 case Aspect_TOM_RING1 :
102 case Aspect_TOM_RING2 :
103 case Aspect_TOM_RING3 :
104 case Aspect_TOM_USERDEFINED:
105 OpenGl_CreateMarkers(ACGroup, nb, arr);
108 case Aspect_TOM_BALL :
110 const Standard_Real Delta = 0.1;
112 Standard_Real R, G, B, H, L, S, AScale;
113 R = Standard_Real (ACGroup.ContextMarker.Color.r);
114 G = Standard_Real (ACGroup.ContextMarker.Color.g);
115 B = Standard_Real (ACGroup.ContextMarker.Color.b);
116 AScale = Standard_Real (ACGroup.ContextMarker.Scale);
118 // we draw a set of circles
119 CALL_DEF_CONTEXTMARKER AContext;
120 AContext.MarkerType = int (Aspect_TOM_O);
121 while (AScale >= 1.0)
123 Quantity_Color::RgbHls (R, G, B, H, L, S);
124 // Modification de la saturation de 5 %
126 Quantity_Color::HlsRgb (H, L, S, R, G, B);
127 AContext.Color.r = float (R);
128 AContext.Color.g = float (G);
129 AContext.Color.b = float (B);
130 AContext.Scale = float (AScale);
131 ((OpenGl_Group *)ACGroup.ptrGroup)->SetAspectMarker(AContext, Standard_False);
132 OpenGl_CreateMarkers(ACGroup, nb, arr);