f66f5feb320e4eebf577943160c0f94fc679a9c5
[occt.git] / src / Graphic3d / Graphic3d_Group_8.cxx
1 // Created by: NW,JPB,CAL
2 // Copyright (c) 1991-1999 Matra Datavision
3 // Copyright (c) 1999-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 // modified:     1/07/97 ; PCT : ajout texture mapping
17 //              20/07/97 ; PCT : ajout transparence texture
18 //              08/04/98 ; FGU : Ajout emission surface
19 //              30/11/98 ; FMN : S4069. Textes always visible.
20 //              22/03/04 ; SAN : OCC4895 High-level interface for controlling polygon offsets */
21
22
23 //-Version
24
25 //-Design       Declaration des variables specifiques aux groupes
26 //              de primitives
27
28 //-Warning      Un groupe est defini dans une structure
29 //              Il s'agit de la plus petite entite editable
30
31 //-References
32
33 //-Language     C++ 2.0
34
35 //-Declarations
36
37 #define OCC1174 //SAV 08/01/03 : Added back face interior color controling
38
39
40 // for the class
41 #include <Graphic3d_Group.jxx>
42 #include <Graphic3d_Group.pxx>
43 #include <Graphic3d_TextureMap.hxx>
44 #include <Graphic3d_ShaderProgram.hxx>
45
46 //-Methods, in order
47
48 void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTX) {
49
50   if (IsDeleted ()) return;
51
52   Standard_Real R, G, B;
53   Standard_Real AWidth;
54   Quantity_Color AColor;
55   Aspect_TypeOfLine ALType;
56
57   CTX->Values (AColor, ALType, AWidth);
58   AColor.Values (R, G, B, Quantity_TOC_RGB);
59
60   MyCGroup.ContextLine.Color.r    = float (R);
61   MyCGroup.ContextLine.Color.g    = float (G);
62   MyCGroup.ContextLine.Color.b    = float (B);
63   MyCGroup.ContextLine.LineType   = int (ALType);
64   MyCGroup.ContextLine.Width      = float (AWidth);
65   MyCGroup.ContextLine.IsDef      = 1;
66
67   MyCGroup.ContextLine.ShaderProgram = CTX->ShaderProgram();
68
69   int noinsert    = 1;
70   MyGraphicDriver->LineContextGroup (MyCGroup, noinsert);
71
72   MyCGroup.ContextLine.IsSet      = 1;
73
74   Update ();
75 }
76
77 void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFillArea3d)& CTX) {
78
79   if (IsDeleted ()) return;
80
81   Standard_Real R, G, B;
82   Standard_Real AWidth;
83   //Quantity_Color AColor;
84   Quantity_Color AIntColor;
85   Quantity_Color BackIntColor;
86   Quantity_Color AEdgeColor;
87   Aspect_TypeOfLine ALType;
88   Aspect_InteriorStyle AStyle;
89
90   CTX->Values (AStyle, AIntColor, BackIntColor, AEdgeColor, ALType, AWidth);
91   AIntColor.Values (R, G, B, Quantity_TOC_RGB);
92
93   MyCGroup.ContextFillArea.Style          = int (AStyle);
94   MyCGroup.ContextFillArea.IntColor.r     = float (R);
95   MyCGroup.ContextFillArea.IntColor.g     = float (G);
96   MyCGroup.ContextFillArea.IntColor.b     = float (B);
97
98 #ifdef OCC1174
99   if ( CTX->Distinguish() )
100     BackIntColor.Values( R, G, B, Quantity_TOC_RGB );
101 #endif
102   MyCGroup.ContextFillArea.BackIntColor.r = float( R );
103   MyCGroup.ContextFillArea.BackIntColor.g = float( G );
104   MyCGroup.ContextFillArea.BackIntColor.b = float( B );
105
106   MyCGroup.ContextFillArea.Edge   = (CTX->Edge () ? 1 : 0);
107   AEdgeColor.Values (R, G, B, Quantity_TOC_RGB);
108   MyCGroup.ContextFillArea.EdgeColor.r    = float (R);
109   MyCGroup.ContextFillArea.EdgeColor.g    = float (G);
110   MyCGroup.ContextFillArea.EdgeColor.b    = float (B);
111   MyCGroup.ContextFillArea.LineType       = int (ALType);
112   MyCGroup.ContextFillArea.Width  = float (AWidth);
113   MyCGroup.ContextFillArea.Hatch  = int (CTX->HatchStyle ());
114
115   /*** Front and Back face ***/
116   MyCGroup.ContextFillArea.Distinguish    =
117     ( CTX->Distinguish () ? 1 : 0 );
118   MyCGroup.ContextFillArea.BackFace       =
119     ( CTX->BackFace () ? 1 : 0 );
120
121   /*** Back Material ***/
122   // Light specificity
123   MyCGroup.ContextFillArea.Back.Shininess =
124     float ((CTX->BackMaterial ()).Shininess ());
125   MyCGroup.ContextFillArea.Back.Ambient   =
126     float ((CTX->BackMaterial ()).Ambient ());
127   MyCGroup.ContextFillArea.Back.Diffuse   =
128     float ((CTX->BackMaterial ()).Diffuse ());
129   MyCGroup.ContextFillArea.Back.Specular  =
130     float ((CTX->BackMaterial ()).Specular ());
131   MyCGroup.ContextFillArea.Back.Transparency      =
132     float ((CTX->BackMaterial ()).Transparency ());
133   MyCGroup.ContextFillArea.Back.Emission  =
134     float ((CTX->BackMaterial ()).Emissive ());
135
136   // Reflection mode
137   MyCGroup.ContextFillArea.Back.IsAmbient =
138     ( (CTX->BackMaterial ()).ReflectionMode
139     (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
140   MyCGroup.ContextFillArea.Back.IsDiffuse =
141     ( (CTX->BackMaterial ()).ReflectionMode
142     (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
143   MyCGroup.ContextFillArea.Back.IsSpecular        =
144     ( (CTX->BackMaterial ()).ReflectionMode
145     (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
146   MyCGroup.ContextFillArea.Back.IsEmission        =
147     ( (CTX->BackMaterial ()).ReflectionMode
148     (Graphic3d_TOR_EMISSION) ? 1 : 0 );
149
150   // Material type
151   //JR/Hp
152   const Graphic3d_MaterialAspect ama = CTX->BackMaterial () ;
153   Standard_Boolean amt = ama.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
154   MyCGroup.ContextFillArea.Back.IsPhysic = ( amt ? 1 : 0 );
155
156   // Specular color
157   MyCGroup.ContextFillArea.Back.ColorSpec.r       =
158     float (((CTX->BackMaterial ()).SpecularColor ()).Red ());
159   MyCGroup.ContextFillArea.Back.ColorSpec.g       =
160     float (((CTX->BackMaterial ()).SpecularColor ()).Green ());
161   MyCGroup.ContextFillArea.Back.ColorSpec.b       =
162     float (((CTX->BackMaterial ()).SpecularColor ()).Blue ());
163
164
165   // Ambient color
166   MyCGroup.ContextFillArea.Back.ColorAmb.r        =
167     float (((CTX->BackMaterial ()).AmbientColor ()).Red ());
168   MyCGroup.ContextFillArea.Back.ColorAmb.g        =
169     float (((CTX->BackMaterial ()).AmbientColor ()).Green ());
170   MyCGroup.ContextFillArea.Back.ColorAmb.b        =
171     float (((CTX->BackMaterial ()).AmbientColor ()).Blue ());
172
173   // Diffuse color
174   MyCGroup.ContextFillArea.Back.ColorDif.r        =
175     float (((CTX->BackMaterial ()).DiffuseColor ()).Red ());
176   MyCGroup.ContextFillArea.Back.ColorDif.g        =
177     float (((CTX->BackMaterial ()).DiffuseColor ()).Green ());
178   MyCGroup.ContextFillArea.Back.ColorDif.b        =
179     float (((CTX->BackMaterial ()).DiffuseColor ()).Blue ());
180
181   // Emissive color
182   MyCGroup.ContextFillArea.Back.ColorEms.r        =
183     float (((CTX->BackMaterial ()).EmissiveColor ()).Red ());
184   MyCGroup.ContextFillArea.Back.ColorEms.g        =
185     float (((CTX->BackMaterial ()).EmissiveColor ()).Green ());
186   MyCGroup.ContextFillArea.Back.ColorEms.b        =
187     float (((CTX->BackMaterial ()).EmissiveColor ()).Blue ());
188
189   MyCGroup.ContextFillArea.Back.EnvReflexion =
190     float ((CTX->BackMaterial ()).EnvReflexion());
191
192   /*** Front Material ***/
193   // Light specificity
194   MyCGroup.ContextFillArea.Front.Shininess        =
195     float ((CTX->FrontMaterial ()).Shininess ());
196   MyCGroup.ContextFillArea.Front.Ambient  =
197     float ((CTX->FrontMaterial ()).Ambient ());
198   MyCGroup.ContextFillArea.Front.Diffuse  =
199     float ((CTX->FrontMaterial ()).Diffuse ());
200   MyCGroup.ContextFillArea.Front.Specular =
201     float ((CTX->FrontMaterial ()).Specular ());
202   MyCGroup.ContextFillArea.Front.Transparency     =
203     float ((CTX->FrontMaterial ()).Transparency ());
204   MyCGroup.ContextFillArea.Front.Emission =
205     float ((CTX->FrontMaterial ()).Emissive ());
206
207   // Reflection mode
208   MyCGroup.ContextFillArea.Front.IsAmbient        =
209     ( (CTX->FrontMaterial ()).ReflectionMode
210     (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
211   MyCGroup.ContextFillArea.Front.IsDiffuse        =
212     ( (CTX->FrontMaterial ()).ReflectionMode
213     (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
214   MyCGroup.ContextFillArea.Front.IsSpecular       =
215     ( (CTX->FrontMaterial ()).ReflectionMode
216     (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
217   MyCGroup.ContextFillArea.Front.IsEmission       =
218     ( (CTX->FrontMaterial ()).ReflectionMode
219     (Graphic3d_TOR_EMISSION) ? 1 : 0 );
220
221   // Material type
222   //JR/Hp
223   const Graphic3d_MaterialAspect amas = CTX->FrontMaterial () ;
224   Standard_Boolean amty = amas.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
225   MyCGroup.ContextFillArea.Front.IsPhysic = ( amty ? 1 : 0 );
226
227   // Specular color
228   MyCGroup.ContextFillArea.Front.ColorSpec.r      =
229     float (((CTX->FrontMaterial ()).SpecularColor ()).Red ());
230   MyCGroup.ContextFillArea.Front.ColorSpec.g      =
231     float (((CTX->FrontMaterial ()).SpecularColor ()).Green ());
232   MyCGroup.ContextFillArea.Front.ColorSpec.b      =
233     float (((CTX->FrontMaterial ()).SpecularColor ()).Blue ());
234
235   // Ambient color
236   MyCGroup.ContextFillArea.Front.ColorAmb.r       =
237     float (((CTX->FrontMaterial ()).AmbientColor ()).Red ());
238   MyCGroup.ContextFillArea.Front.ColorAmb.g       =
239     float (((CTX->FrontMaterial ()).AmbientColor ()).Green ());
240   MyCGroup.ContextFillArea.Front.ColorAmb.b       =
241     float (((CTX->FrontMaterial ()).AmbientColor ()).Blue ());
242
243   // Diffuse color
244   MyCGroup.ContextFillArea.Front.ColorDif.r       =
245     float (((CTX->FrontMaterial ()).DiffuseColor ()).Red ());
246   MyCGroup.ContextFillArea.Front.ColorDif.g       =
247     float (((CTX->FrontMaterial ()).DiffuseColor ()).Green ());
248   MyCGroup.ContextFillArea.Front.ColorDif.b       =
249     float (((CTX->FrontMaterial ()).DiffuseColor ()).Blue ());
250
251   // Emissive color
252   MyCGroup.ContextFillArea.Front.ColorEms.r       =
253     float (((CTX->FrontMaterial ()).EmissiveColor ()).Red ());
254   MyCGroup.ContextFillArea.Front.ColorEms.g       =
255     float (((CTX->FrontMaterial ()).EmissiveColor ()).Green ());
256   MyCGroup.ContextFillArea.Front.ColorEms.b       =
257     float (((CTX->FrontMaterial ()).EmissiveColor ()).Blue ());
258
259   MyCGroup.ContextFillArea.Front.EnvReflexion =
260     float ((CTX->FrontMaterial ()).EnvReflexion());
261
262   MyCGroup.ContextFillArea.IsDef  = 1; // Definition material ok
263
264   /*** Texture map ***/
265   MyCGroup.ContextFillArea.Texture.TextureMap   = CTX->TextureMap();
266   MyCGroup.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1 : 0;
267
268   // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
269   Standard_Integer aPolyMode;
270   Standard_ShortReal    aPolyFactor, aPolyUnits;
271   CTX->PolygonOffsets(aPolyMode, aPolyFactor, aPolyUnits);
272   MyCGroup.ContextFillArea.PolygonOffsetMode   = aPolyMode;
273   MyCGroup.ContextFillArea.PolygonOffsetFactor = aPolyFactor;
274   MyCGroup.ContextFillArea.PolygonOffsetUnits  = aPolyUnits;
275   // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
276
277   MyCGroup.ContextFillArea.ShaderProgram = CTX->ShaderProgram();
278
279   int noinsert = 1;
280   MyGraphicDriver->FaceContextGroup (MyCGroup, noinsert);
281
282   MyCGroup.ContextFillArea.IsSet  = 1;
283
284   Update();
285 }
286
287 void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectMarker3d)& theCtx)
288 {
289   if (IsDeleted()) return;
290
291   Standard_Real  aRed, aGreen, aBlue;
292   Standard_Real  aScale;
293   Quantity_Color aColor;
294   Aspect_TypeOfMarker aMarkerType;
295
296   theCtx->Values (aColor, aMarkerType, aScale);
297   aColor.Values (aRed, aGreen, aBlue, Quantity_TOC_RGB);
298
299   MyCGroup.ContextMarker.IsDef       = 1;
300   MyCGroup.ContextMarker.Color.r     = Standard_ShortReal (aRed);
301   MyCGroup.ContextMarker.Color.g     = Standard_ShortReal (aGreen);
302   MyCGroup.ContextMarker.Color.b     = Standard_ShortReal (aBlue);
303   MyCGroup.ContextMarker.MarkerType  = aMarkerType;
304   MyCGroup.ContextMarker.Scale       = Standard_ShortReal (aScale);
305   MyCGroup.ContextMarker.MarkerImage = theCtx->GetMarkerImage();
306
307   MyCGroup.ContextMarker.ShaderProgram = theCtx->ShaderProgram();
308
309   int noinsert = 1;
310   MyGraphicDriver->MarkerContextGroup (MyCGroup, noinsert);
311
312   MyCGroup.ContextMarker.IsSet = 1;
313
314   Update();
315 }
316
317 void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectText3d)& CTX) {
318
319   if (IsDeleted ()) return;
320
321   Standard_CString AFont;
322   Standard_Real R, G, B;
323   Standard_Real Rs, Gs, Bs;
324   Standard_Real ASpace;
325   Standard_Real AnExpansion;
326   Quantity_Color AColor;
327   Aspect_TypeOfStyleText  AStyle;
328   Aspect_TypeOfDisplayText ADisplayType;
329   Quantity_Color AColorSubTitle;
330   Standard_Boolean ATextZoomable;
331   Standard_Real    ATextAngle;
332   Font_FontAspect   ATextFontAspect;
333
334   CTX->Values (AColor, AFont, AnExpansion, ASpace, AStyle, ADisplayType,AColorSubTitle,ATextZoomable,ATextAngle,ATextFontAspect);
335   AColor.Values (R, G, B, Quantity_TOC_RGB);
336   AColorSubTitle.Values (Rs, Gs, Bs, Quantity_TOC_RGB);
337
338   MyCGroup.ContextText.Color.r    = float (R);
339   MyCGroup.ContextText.Color.g    = float (G);
340   MyCGroup.ContextText.Color.b    = float (B);
341   MyCGroup.ContextText.Font       = (char*)AFont;
342   MyCGroup.ContextText.Expan      = float (AnExpansion);
343   MyCGroup.ContextText.Space      = float (ASpace);
344   MyCGroup.ContextText.Style      = int (AStyle);
345   MyCGroup.ContextText.DisplayType= int (ADisplayType);
346   MyCGroup.ContextText.ColorSubTitle.r    = float (Rs);
347   MyCGroup.ContextText.ColorSubTitle.g    = float (Gs);
348   MyCGroup.ContextText.ColorSubTitle.b    = float (Bs);
349   MyCGroup.ContextText.TextZoomable   = ATextZoomable;
350   MyCGroup.ContextText.TextAngle    = float (ATextAngle);
351   MyCGroup.ContextText.TextFontAspect   = (int)ATextFontAspect;
352
353   MyCGroup.ContextText.ShaderProgram = CTX->ShaderProgram();
354
355   MyCGroup.ContextText.IsDef      = 1;
356
357   int noinsert    = 1;
358   MyGraphicDriver->TextContextGroup (MyCGroup, noinsert);
359
360   MyCGroup.ContextText.IsSet              = 1;
361
362   Update ();
363 }
364
365 void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTX) {
366
367   if (IsDeleted ()) return;
368
369   Standard_Real R, G, B;
370   Standard_Real AWidth;
371   Quantity_Color AColor;
372   Aspect_TypeOfLine ALType;
373
374   CTX->Values (AColor, ALType, AWidth);
375   AColor.Values (R, G, B, Quantity_TOC_RGB);
376
377   MyCGroup.ContextLine.Color.r    = float (R);
378   MyCGroup.ContextLine.Color.g    = float (G);
379   MyCGroup.ContextLine.Color.b    = float (B);
380   MyCGroup.ContextLine.LineType   = int (ALType);
381   MyCGroup.ContextLine.Width              = float (AWidth);
382   MyCGroup.ContextLine.IsDef              = 1;
383
384   MyCGroup.ContextLine.ShaderProgram = CTX->ShaderProgram();
385
386   int noinsert    = 0;
387   MyGraphicDriver->LineContextGroup (MyCGroup, noinsert);
388
389   MyCGroup.ContextLine.IsSet              = 1;
390
391   Update ();
392 }
393
394 void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea3d)& CTX) {
395
396   if (IsDeleted ()) return;
397
398   Standard_Real R, G, B;
399   Standard_Real AWidth;
400   Quantity_Color AIntColor;
401   Quantity_Color BackIntColor;
402   Quantity_Color AEdgeColor;
403   Aspect_TypeOfLine ALType;
404   Aspect_InteriorStyle AStyle;
405
406   CTX->Values (AStyle, AIntColor, BackIntColor, AEdgeColor, ALType, AWidth);
407   AIntColor.Values (R, G, B, Quantity_TOC_RGB);
408
409   MyCGroup.ContextFillArea.Style          = int (AStyle);
410   MyCGroup.ContextFillArea.IntColor.r     = float (R);
411   MyCGroup.ContextFillArea.IntColor.g     = float (G);
412   MyCGroup.ContextFillArea.IntColor.b     = float (B);
413 #ifdef OCC1174
414   if ( CTX->Distinguish() )
415     BackIntColor.Values( R, G, B, Quantity_TOC_RGB );
416 #endif
417   MyCGroup.ContextFillArea.BackIntColor.r = float( R );
418   MyCGroup.ContextFillArea.BackIntColor.g = float( G );
419   MyCGroup.ContextFillArea.BackIntColor.b = float( B );
420
421   MyCGroup.ContextFillArea.Edge   = (CTX->Edge () ? 1 : 0);
422   AEdgeColor.Values (R, G, B, Quantity_TOC_RGB);
423   MyCGroup.ContextFillArea.EdgeColor.r    = float (R);
424   MyCGroup.ContextFillArea.EdgeColor.g    = float (G);
425   MyCGroup.ContextFillArea.EdgeColor.b    = float (B);
426   MyCGroup.ContextFillArea.LineType       = int (ALType);
427   MyCGroup.ContextFillArea.Width  = float (AWidth);
428   MyCGroup.ContextFillArea.Hatch  = int (CTX->HatchStyle ());
429   // Front and Back face
430   MyCGroup.ContextFillArea.Distinguish    =
431     ( CTX->Distinguish () ? 1 : 0 );
432   MyCGroup.ContextFillArea.BackFace       =
433     ( CTX->BackFace () ? 1 : 0 );
434
435   /*** Back Material ***/
436   // Material state
437   MyCGroup.ContextFillArea.Back.Shininess =
438     float ((CTX->BackMaterial ()).Shininess ());
439   MyCGroup.ContextFillArea.Back.Ambient   =
440     float ((CTX->BackMaterial ()).Ambient ());
441   MyCGroup.ContextFillArea.Back.Diffuse   =
442     float ((CTX->BackMaterial ()).Diffuse ());
443   MyCGroup.ContextFillArea.Back.Specular  =
444     float ((CTX->BackMaterial ()).Specular ());
445   MyCGroup.ContextFillArea.Back.Transparency      =
446     float ((CTX->BackMaterial ()).Transparency ());
447   MyCGroup.ContextFillArea.Back.Emission  =
448     float ((CTX->BackMaterial ()).Emissive ());
449
450   // Reflection mode
451   MyCGroup.ContextFillArea.Back.IsAmbient =
452     ( (CTX->BackMaterial ()).ReflectionMode
453     (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
454   MyCGroup.ContextFillArea.Back.IsDiffuse =
455     ( (CTX->BackMaterial ()).ReflectionMode
456     (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
457   MyCGroup.ContextFillArea.Back.IsSpecular        =
458     ( (CTX->BackMaterial ()).ReflectionMode
459     (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
460   MyCGroup.ContextFillArea.Back.IsEmission        =
461     ( (CTX->BackMaterial ()).ReflectionMode
462     (Graphic3d_TOR_EMISSION) ? 1 : 0 );
463
464   // Material type
465   //JR/Hp
466   const Graphic3d_MaterialAspect ama = CTX->BackMaterial () ;
467   Standard_Boolean amt = ama.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
468   MyCGroup.ContextFillArea.Back.IsPhysic = ( amt ? 1 : 0 );
469
470   // Specular color
471   MyCGroup.ContextFillArea.Back.ColorSpec.r       =
472     float (((CTX->BackMaterial ()).SpecularColor ()).Red ());
473   MyCGroup.ContextFillArea.Back.ColorSpec.g       =
474     float (((CTX->BackMaterial ()).SpecularColor ()).Green ());
475   MyCGroup.ContextFillArea.Back.ColorSpec.b       =
476     float (((CTX->BackMaterial ()).SpecularColor ()).Blue ());
477
478   // Ambient color
479   MyCGroup.ContextFillArea.Back.ColorAmb.r        =
480     float (((CTX->BackMaterial ()).AmbientColor ()).Red ());
481   MyCGroup.ContextFillArea.Back.ColorAmb.g        =
482     float (((CTX->BackMaterial ()).AmbientColor ()).Green ());
483   MyCGroup.ContextFillArea.Back.ColorAmb.b        =
484     float (((CTX->BackMaterial ()).AmbientColor ()).Blue ());
485
486   // Diffuse color
487   MyCGroup.ContextFillArea.Back.ColorDif.r        =
488     float (((CTX->BackMaterial ()).DiffuseColor ()).Red ());
489   MyCGroup.ContextFillArea.Back.ColorDif.g        =
490     float (((CTX->BackMaterial ()).DiffuseColor ()).Green ());
491   MyCGroup.ContextFillArea.Back.ColorDif.b        =
492     float (((CTX->BackMaterial ()).DiffuseColor ()).Blue ());
493
494   // Emissive color
495   MyCGroup.ContextFillArea.Back.ColorEms.r        =
496     float (((CTX->BackMaterial ()).EmissiveColor ()).Red ());
497   MyCGroup.ContextFillArea.Back.ColorEms.g        =
498     float (((CTX->BackMaterial ()).EmissiveColor ()).Green ());
499   MyCGroup.ContextFillArea.Back.ColorEms.b        =
500     float (((CTX->BackMaterial ()).EmissiveColor ()).Blue ());
501
502   MyCGroup.ContextFillArea.Back.EnvReflexion =
503     float ((CTX->BackMaterial ()).EnvReflexion());
504
505   /*** Front Material ***/
506   // Ligth specificity
507   MyCGroup.ContextFillArea.Front.Shininess        =
508     float ((CTX->FrontMaterial ()).Shininess ());
509   MyCGroup.ContextFillArea.Front.Ambient  =
510     float ((CTX->FrontMaterial ()).Ambient ());
511   MyCGroup.ContextFillArea.Front.Diffuse  =
512     float ((CTX->FrontMaterial ()).Diffuse ());
513   MyCGroup.ContextFillArea.Front.Specular =
514     float ((CTX->FrontMaterial ()).Specular ());
515   MyCGroup.ContextFillArea.Front.Transparency     =
516     float ((CTX->FrontMaterial ()).Transparency ());
517   MyCGroup.ContextFillArea.Front.Emission =
518     float ((CTX->FrontMaterial ()).Emissive ());
519
520   // Reflection mode
521   MyCGroup.ContextFillArea.Front.IsAmbient        =
522     ( (CTX->FrontMaterial ()).ReflectionMode
523     (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
524   MyCGroup.ContextFillArea.Front.IsDiffuse        =
525     ( (CTX->FrontMaterial ()).ReflectionMode
526     (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
527   MyCGroup.ContextFillArea.Front.IsSpecular       =
528     ( (CTX->FrontMaterial ()).ReflectionMode
529     (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
530   MyCGroup.ContextFillArea.Front.IsEmission       =
531     ( (CTX->FrontMaterial ()).ReflectionMode
532     (Graphic3d_TOR_EMISSION) ? 1 : 0 );
533
534   //Material type
535   //JR/Hp
536   const Graphic3d_MaterialAspect amas = CTX->FrontMaterial () ;
537   Standard_Boolean amty = amas.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
538   MyCGroup.ContextFillArea.Front.IsPhysic = ( amty ? 1 : 0 );
539
540   // Specular color
541   MyCGroup.ContextFillArea.Front.ColorSpec.r      =
542     float (((CTX->FrontMaterial ()).SpecularColor ()).Red ());
543   MyCGroup.ContextFillArea.Front.ColorSpec.g      =
544     float (((CTX->FrontMaterial ()).SpecularColor ()).Green ());
545   MyCGroup.ContextFillArea.Front.ColorSpec.b      =
546     float (((CTX->FrontMaterial ()).SpecularColor ()).Blue ());
547
548   // Ambient color
549   MyCGroup.ContextFillArea.Front.ColorAmb.r       =
550     float (((CTX->FrontMaterial ()).AmbientColor ()).Red ());
551   MyCGroup.ContextFillArea.Front.ColorAmb.g       =
552     float (((CTX->FrontMaterial ()).AmbientColor ()).Green ());
553   MyCGroup.ContextFillArea.Front.ColorAmb.b       =
554     float (((CTX->FrontMaterial ()).AmbientColor ()).Blue ());
555
556   // Diffuse color
557   MyCGroup.ContextFillArea.Front.ColorDif.r       =
558     float (((CTX->FrontMaterial ()).DiffuseColor ()).Red ());
559   MyCGroup.ContextFillArea.Front.ColorDif.g       =
560     float (((CTX->FrontMaterial ()).DiffuseColor ()).Green ());
561   MyCGroup.ContextFillArea.Front.ColorDif.b       =
562     float (((CTX->FrontMaterial ()).DiffuseColor ()).Blue ());
563
564   // Emissive color
565   MyCGroup.ContextFillArea.Front.ColorEms.r       =
566     float (((CTX->FrontMaterial ()).EmissiveColor ()).Red ());
567   MyCGroup.ContextFillArea.Front.ColorEms.g       =
568     float (((CTX->FrontMaterial ()).EmissiveColor ()).Green ());
569   MyCGroup.ContextFillArea.Front.ColorEms.b       =
570     float (((CTX->FrontMaterial ()).EmissiveColor ()).Blue ());
571
572   MyCGroup.ContextFillArea.Front.EnvReflexion =
573     float ((CTX->FrontMaterial ()).EnvReflexion());
574
575   MyCGroup.ContextFillArea.IsDef  = 1; // Material definition ok
576
577   MyCGroup.ContextFillArea.Texture.TextureMap   = CTX->TextureMap();
578   MyCGroup.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1 : 0;
579
580   // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
581   Standard_Integer aPolyMode;
582   Standard_ShortReal    aPolyFactor, aPolyUnits;
583   CTX->PolygonOffsets(aPolyMode, aPolyFactor, aPolyUnits);
584   MyCGroup.ContextFillArea.PolygonOffsetMode   = aPolyMode;
585   MyCGroup.ContextFillArea.PolygonOffsetFactor = (Standard_ShortReal)aPolyFactor;
586   MyCGroup.ContextFillArea.PolygonOffsetUnits  = (Standard_ShortReal)aPolyUnits;
587   // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
588
589   MyCGroup.ContextFillArea.ShaderProgram = CTX->ShaderProgram();
590
591   int noinsert    = 0;
592   MyGraphicDriver->FaceContextGroup (MyCGroup, noinsert);
593
594   MyCGroup.ContextFillArea.IsSet  = 1;
595
596   Update ();
597 }
598
599 void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectMarker3d)& thCtx)
600 {
601   if (IsDeleted()) return;
602
603   Standard_Real  aRed, aGreen, aBlue;
604   Standard_Real  aScale;
605   Quantity_Color aColor;
606   Aspect_TypeOfMarker aMarkerType;
607
608   thCtx->Values (aColor, aMarkerType, aScale);
609   aColor.Values (aRed, aGreen, aBlue, Quantity_TOC_RGB);
610
611   MyCGroup.ContextMarker.IsDef       = 1;
612   MyCGroup.ContextMarker.Color.r     = Standard_ShortReal (aRed);
613   MyCGroup.ContextMarker.Color.g     = Standard_ShortReal (aGreen);
614   MyCGroup.ContextMarker.Color.b     = Standard_ShortReal (aBlue);
615   MyCGroup.ContextMarker.MarkerType  = aMarkerType;
616   MyCGroup.ContextMarker.Scale       = Standard_ShortReal (aScale);
617   MyCGroup.ContextMarker.MarkerImage = thCtx->GetMarkerImage();
618
619   MyCGroup.ContextMarker.ShaderProgram = thCtx->ShaderProgram();
620
621   int noinsert = 0;
622   MyGraphicDriver->MarkerContextGroup (MyCGroup, noinsert);
623
624   MyCGroup.ContextMarker.IsSet = 1;
625
626   Update();
627 }
628
629 void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectText3d)& CTX) {
630
631   if (IsDeleted ()) return;
632
633   Standard_CString AFont;
634   Standard_Real R, G, B;
635   Standard_Real Rs, Gs, Bs;
636   Standard_Real ASpace;
637   Standard_Real AnExpansion;
638   Quantity_Color AColor;
639   Aspect_TypeOfStyleText  AStyle;
640   Aspect_TypeOfDisplayText ADisplayType;
641   Quantity_Color AColorSubTitle;
642   Standard_Boolean ATextZoomable;
643   Standard_Real ATextAngle;
644   Font_FontAspect ATextFontAspect;
645
646   CTX->Values (AColor, AFont, AnExpansion, ASpace, AStyle, ADisplayType,AColorSubTitle,ATextZoomable,ATextAngle,ATextFontAspect);
647   AColor.Values (R, G, B, Quantity_TOC_RGB);
648   AColorSubTitle.Values (Rs, Gs, Bs, Quantity_TOC_RGB);
649
650   MyCGroup.ContextText.Color.r    = float (R);
651   MyCGroup.ContextText.Color.g    = float (G);
652   MyCGroup.ContextText.Color.b    = float (B);
653   MyCGroup.ContextText.Font       = (char*)AFont;
654   MyCGroup.ContextText.Expan      = float (AnExpansion);
655   MyCGroup.ContextText.Space      = float (ASpace);
656   MyCGroup.ContextText.Style      = int (AStyle);
657   MyCGroup.ContextText.DisplayType= int (ADisplayType);
658   MyCGroup.ContextText.ColorSubTitle.r    = float (Rs);
659   MyCGroup.ContextText.ColorSubTitle.g    = float (Gs);
660   MyCGroup.ContextText.ColorSubTitle.b    = float (Bs);
661   MyCGroup.ContextText.TextZoomable   = ATextZoomable;
662   MyCGroup.ContextText.TextAngle    = float (ATextAngle);
663   MyCGroup.ContextText.TextFontAspect   = (int)ATextFontAspect;
664   MyCGroup.ContextText.IsDef              = 1;
665
666   MyCGroup.ContextText.ShaderProgram = CTX->ShaderProgram();
667
668   int noinsert    = 0;
669   MyGraphicDriver->TextContextGroup (MyCGroup, noinsert);
670
671   MyCGroup.ContextText.IsSet              = 1;
672
673   Update();
674 }
675
676 Standard_Boolean Graphic3d_Group::IsGroupPrimitivesAspectSet (const Graphic3d_GroupAspect theAspect) const {
677     switch (theAspect) {
678         case Graphic3d_ASPECT_LINE:      return MyCGroup.ContextLine.IsSet;
679         case Graphic3d_ASPECT_TEXT:      return MyCGroup.ContextText.IsSet;
680         case Graphic3d_ASPECT_MARKER:    return MyCGroup.ContextMarker.IsSet;
681         case Graphic3d_ASPECT_FILL_AREA: return MyCGroup.ContextFillArea.IsSet;
682         default: return Standard_False;
683     }
684 }
685
686
687 void Graphic3d_Group::GroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTXL, const Handle(Graphic3d_AspectText3d)& CTXT, const Handle(Graphic3d_AspectMarker3d)& CTXM, const Handle(Graphic3d_AspectFillArea3d)& CTXF) const {
688
689   Standard_Real           R, G, B;
690   Standard_Real           Rs, Gs, Bs;
691   Quantity_Color          AColor;
692
693   Standard_Real           AWidth;
694   Aspect_TypeOfLine       ALType;
695
696   Standard_CString    AFont;
697   Standard_Real           ASpace;
698   Standard_Real           AnExpansion;
699
700   Standard_Real           AScale;
701   Aspect_TypeOfMarker     AMType;
702
703   Quantity_Color          AnIntColor;
704   Quantity_Color          AnEdgeColor;
705   Aspect_InteriorStyle    AStyle;
706   Standard_Boolean        EdgeOn = Standard_False;
707   Graphic3d_MaterialAspect Front;
708   Graphic3d_MaterialAspect Back;
709   Aspect_TypeOfStyleText   AStyleT;
710   Aspect_TypeOfDisplayText ADisplayType;
711   Quantity_Color          AColorSubTitle;
712
713   if (MyCGroup.ContextLine.IsSet)
714   {
715     R      = Standard_Real (MyCGroup.ContextLine.Color.r);
716     G      = Standard_Real (MyCGroup.ContextLine.Color.g);
717     B      = Standard_Real (MyCGroup.ContextLine.Color.b);
718     ALType = Aspect_TypeOfLine (MyCGroup.ContextLine.LineType);
719     AWidth = Standard_Real (MyCGroup.ContextLine.Width);
720     CTXL->SetShaderProgram (MyCGroup.ContextLine.ShaderProgram);
721   }
722   else
723   {
724     R      = Standard_Real (MyCGroup.Struct->ContextLine.Color.r);
725     G      = Standard_Real (MyCGroup.Struct->ContextLine.Color.g);
726     B      = Standard_Real (MyCGroup.Struct->ContextLine.Color.b);
727     ALType = Aspect_TypeOfLine (MyCGroup.Struct->ContextLine.LineType);
728     AWidth = Standard_Real (MyCGroup.Struct->ContextLine.Width);
729     CTXL->SetShaderProgram (MyCGroup.Struct->ContextLine.ShaderProgram);
730   }
731   AColor.SetValues (R, G, B, Quantity_TOC_RGB);
732   CTXL->SetColor (AColor);
733   CTXL->SetType (ALType);
734   CTXL->SetWidth (AWidth);
735
736   if (MyCGroup.ContextText.IsSet)
737   {
738     R   = Standard_Real (MyCGroup.ContextText.Color.r);
739     G   = Standard_Real (MyCGroup.ContextText.Color.g);
740     B   = Standard_Real (MyCGroup.ContextText.Color.b);
741     Rs  = Standard_Real (MyCGroup.ContextText.ColorSubTitle.r);
742     Gs  = Standard_Real (MyCGroup.ContextText.ColorSubTitle.g);
743     Bs  = Standard_Real (MyCGroup.ContextText.ColorSubTitle.b);
744     AFont       = Standard_CString (MyCGroup.ContextText.Font);
745     AnExpansion = Standard_Real (MyCGroup.ContextText.Expan);
746     ASpace      = Standard_Real (MyCGroup.ContextText.Space);
747     AStyleT     = Aspect_TypeOfStyleText (MyCGroup.ContextText.Style);
748     ADisplayType= Aspect_TypeOfDisplayText (MyCGroup.ContextText.DisplayType);
749     CTXT->SetShaderProgram (MyCGroup.ContextText.ShaderProgram);
750   }
751   else
752   {
753     R   = Standard_Real (MyCGroup.Struct->ContextText.Color.r);
754     G   = Standard_Real (MyCGroup.Struct->ContextText.Color.g);
755     B   = Standard_Real (MyCGroup.Struct->ContextText.Color.b);
756     Rs  = Standard_Real (MyCGroup.Struct->ContextText.ColorSubTitle.r);
757     Gs  = Standard_Real (MyCGroup.Struct->ContextText.ColorSubTitle.g);
758     Bs  = Standard_Real (MyCGroup.Struct->ContextText.ColorSubTitle.b);
759     AFont        = Standard_CString (MyCGroup.Struct->ContextText.Font);
760     AnExpansion  = Standard_Real (MyCGroup.Struct->ContextText.Expan);
761     ASpace       = Standard_Real (MyCGroup.Struct->ContextText.Space);
762     AStyleT      = Aspect_TypeOfStyleText (MyCGroup.Struct->ContextText.Style);
763     ADisplayType = Aspect_TypeOfDisplayText (MyCGroup.Struct->ContextText.DisplayType);
764     CTXT->SetShaderProgram (MyCGroup.Struct->ContextText.ShaderProgram);
765   }
766   AColor.SetValues (R, G, B, Quantity_TOC_RGB);
767   AColorSubTitle.SetValues (Rs, Gs, Bs, Quantity_TOC_RGB);
768   CTXT->SetColor (AColor);
769   CTXT->SetFont (AFont);
770   CTXT->SetExpansionFactor (AnExpansion);
771   CTXT->SetSpace (ASpace);
772   CTXT->SetStyle (AStyleT);
773   CTXT->SetDisplayType (ADisplayType);
774   CTXT->SetColorSubTitle (AColorSubTitle);
775
776   if (MyCGroup.ContextMarker.IsSet)
777   {
778     R      = Standard_Real (MyCGroup.ContextMarker.Color.r);
779     G      = Standard_Real (MyCGroup.ContextMarker.Color.g);
780     B      = Standard_Real (MyCGroup.ContextMarker.Color.b);
781     AMType = MyCGroup.ContextMarker.MarkerType;
782     AScale = Standard_Real (MyCGroup.ContextMarker.Scale);
783     CTXT->SetShaderProgram (MyCGroup.ContextMarker.ShaderProgram);
784
785     if (AMType == Aspect_TOM_USERDEFINED)
786     {
787       CTXM->SetBitMap (MyMarkWidth, MyMarkHeight, MyMarkArray);
788     }
789   }
790   else
791   {
792     R      = Standard_Real (MyCGroup.Struct->ContextMarker.Color.r);
793     G      = Standard_Real (MyCGroup.Struct->ContextMarker.Color.g);
794     B      = Standard_Real (MyCGroup.Struct->ContextMarker.Color.b);
795     AMType = MyCGroup.Struct->ContextMarker.MarkerType;
796     AScale = Standard_Real (MyCGroup.Struct->ContextMarker.Scale);
797     CTXT->SetShaderProgram (MyCGroup.Struct->ContextMarker.ShaderProgram);
798   }
799   AColor.SetValues (R, G, B, Quantity_TOC_RGB);
800   CTXM->SetColor (AColor);
801   CTXM->SetType (AMType);
802   CTXM->SetScale (AScale);
803
804   if (MyCGroup.ContextFillArea.IsSet)
805   {
806     // Interior
807     AStyle      = Aspect_InteriorStyle (MyCGroup.ContextFillArea.Style);
808     R   = Standard_Real (MyCGroup.ContextFillArea.IntColor.r);
809     G   = Standard_Real (MyCGroup.ContextFillArea.IntColor.g);
810     B   = Standard_Real (MyCGroup.ContextFillArea.IntColor.b);
811     AnIntColor.SetValues (R, G, B, Quantity_TOC_RGB);
812     // Edges
813     if (MyCGroup.ContextFillArea.Edge == 1) EdgeOn = Standard_True;
814     R   = Standard_Real (MyCGroup.ContextFillArea.EdgeColor.r);
815     G   = Standard_Real (MyCGroup.ContextFillArea.EdgeColor.g);
816     B   = Standard_Real (MyCGroup.ContextFillArea.EdgeColor.b);
817     AnEdgeColor.SetValues (R, G, B, Quantity_TOC_RGB);
818     ALType      = Aspect_TypeOfLine (MyCGroup.ContextFillArea.LineType);
819     AWidth      = Standard_Real (MyCGroup.ContextFillArea.Width);
820     // Back Material
821     Back.SetShininess (
822       Standard_Real (MyCGroup.ContextFillArea.Back.Shininess));
823     Back.SetAmbient (
824       Standard_Real (MyCGroup.ContextFillArea.Back.Ambient));
825     Back.SetDiffuse (
826       Standard_Real (MyCGroup.ContextFillArea.Back.Diffuse));
827     Back.SetSpecular (
828       Standard_Real (MyCGroup.ContextFillArea.Back.Specular));
829     Back.SetTransparency (
830       Standard_Real (MyCGroup.ContextFillArea.Back.Transparency));
831     Back.SetEmissive (
832       Standard_Real (MyCGroup.ContextFillArea.Back.Emission));
833     if (MyCGroup.ContextFillArea.Back.IsAmbient == 1)
834       Back.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
835     else
836       Back.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
837     if (MyCGroup.ContextFillArea.Back.IsDiffuse == 1)
838       Back.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
839     else
840       Back.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
841     if (MyCGroup.ContextFillArea.Back.IsSpecular == 1)
842       Back.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
843     else
844       Back.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
845
846     R   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorSpec.r);
847     G   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorSpec.g);
848     B   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorSpec.b);
849     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
850     Back.SetSpecularColor (AColor);
851
852     R   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorAmb.r);
853     G   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorAmb.g);
854     B   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorAmb.b);
855     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
856     Back.SetAmbientColor (AColor);
857
858     R   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorDif.r);
859     G   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorDif.g);
860     B   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorDif.b);
861     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
862     Back.SetDiffuseColor (AColor);
863
864     R   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorEms.r);
865     G   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorEms.g);
866     B   = Standard_Real (MyCGroup.ContextFillArea.Back.ColorEms.b);
867     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
868     Back.SetEmissiveColor (AColor);
869
870     Back.SetEnvReflexion (MyCGroup.ContextFillArea.Back.EnvReflexion);
871     // Front Material
872     Front.SetShininess (
873       Standard_Real (MyCGroup.ContextFillArea.Front.Shininess));
874     Front.SetAmbient (
875       Standard_Real (MyCGroup.ContextFillArea.Front.Ambient));
876     Front.SetDiffuse (
877       Standard_Real (MyCGroup.ContextFillArea.Front.Diffuse));
878     Front.SetSpecular (
879       Standard_Real (MyCGroup.ContextFillArea.Front.Specular));
880     Front.SetTransparency (
881       Standard_Real (MyCGroup.ContextFillArea.Front.Transparency));
882     Front.SetEmissive (
883       Standard_Real (MyCGroup.ContextFillArea.Back.Emission));
884     if (MyCGroup.ContextFillArea.Front.IsAmbient == 1)
885       Front.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
886     else
887       Front.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
888     if (MyCGroup.ContextFillArea.Front.IsDiffuse == 1)
889       Front.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
890     else
891       Front.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
892     if (MyCGroup.ContextFillArea.Front.IsSpecular == 1)
893       Front.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
894     else
895       Front.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
896
897     R   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorSpec.r);
898     G   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorSpec.g);
899     B   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorSpec.b);
900     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
901     Front.SetSpecularColor (AColor);
902
903     R   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorAmb.r);
904     G   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorAmb.g);
905     B   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorAmb.b);
906     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
907     Front.SetAmbientColor (AColor);
908
909     R   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorDif.r);
910     G   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorDif.g);
911     B   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorDif.b);
912     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
913     Front.SetDiffuseColor (AColor);
914
915     R   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorEms.r);
916     G   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorEms.g);
917     B   = Standard_Real (MyCGroup.ContextFillArea.Front.ColorEms.b);
918     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
919     Front.SetEmissiveColor (AColor);
920
921     Front.SetEnvReflexion (MyCGroup.ContextFillArea.Front.EnvReflexion);
922
923     // Edges
924     if (EdgeOn)
925       CTXF->SetEdgeOn ();
926     else
927       CTXF->SetEdgeOff ();
928     // Hatch
929     CTXF->SetHatchStyle(Aspect_HatchStyle (MyCGroup.ContextFillArea.Hatch));
930     // Materials
931     // Front and Back face
932     if (MyCGroup.ContextFillArea.Distinguish == 1)
933       CTXF->SetDistinguishOn ();
934     else
935       CTXF->SetDistinguishOff ();
936     if (MyCGroup.ContextFillArea.BackFace == 1)
937       CTXF->SuppressBackFace ();
938     else
939       CTXF->AllowBackFace ();
940     // Texture
941     CTXF->SetTextureMap (MyCGroup.ContextFillArea.Texture.TextureMap);
942     if (MyCGroup.ContextFillArea.Texture.doTextureMap == 1)
943     {
944       CTXF->SetTextureMapOn();
945     }
946     else
947     {
948       CTXF->SetTextureMapOff();
949     }
950     CTXF->SetShaderProgram (MyCGroup.ContextFillArea.ShaderProgram);
951
952     // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
953     CTXF->SetPolygonOffsets(MyCGroup.ContextFillArea.PolygonOffsetMode,
954       MyCGroup.ContextFillArea.PolygonOffsetFactor,
955       MyCGroup.ContextFillArea.PolygonOffsetUnits);
956     // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
957   }
958   else
959   {
960     // Interior
961     AStyle      = Aspect_InteriorStyle (MyCGroup.Struct->ContextFillArea.Style);
962     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.IntColor.r);
963     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.IntColor.g);
964     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.IntColor.b);
965     AnIntColor.SetValues (R, G, B, Quantity_TOC_RGB);
966     // Edges
967     if (MyCGroup.Struct->ContextFillArea.Edge == 1) EdgeOn = Standard_True;
968     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.EdgeColor.r);
969     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.EdgeColor.g);
970     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.EdgeColor.b);
971     AnEdgeColor.SetValues (R, G, B, Quantity_TOC_RGB);
972     ALType      = Aspect_TypeOfLine (MyCGroup.Struct->ContextFillArea.LineType);
973     AWidth      = Standard_Real (MyCGroup.Struct->ContextFillArea.Width);
974     // Back Material
975     Back.SetShininess (
976       Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Shininess));
977     Back.SetAmbient (
978       Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Ambient));
979     Back.SetDiffuse (
980       Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Diffuse));
981     Back.SetSpecular (
982       Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Specular));
983     Back.SetTransparency (
984       Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Transparency));
985     Back.SetEmissive (
986       Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Emission));
987     if (MyCGroup.Struct->ContextFillArea.Back.IsAmbient == 1)
988       Back.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
989     else
990       Back.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
991     if (MyCGroup.Struct->ContextFillArea.Back.IsDiffuse == 1)
992       Back.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
993     else
994       Back.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
995     if (MyCGroup.Struct->ContextFillArea.Back.IsSpecular == 1)
996       Back.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
997     else
998       Back.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
999
1000     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorSpec.r);
1001     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorSpec.g);
1002     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorSpec.b);
1003     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1004     Back.SetSpecularColor (AColor);
1005
1006     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorAmb.r);
1007     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorAmb.g);
1008     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorAmb.b);
1009     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1010     Back.SetAmbientColor (AColor);
1011
1012     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorDif.r);
1013     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorDif.g);
1014     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorDif.b);
1015     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1016     Back.SetDiffuseColor (AColor);
1017
1018     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorEms.r);
1019     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorEms.g);
1020     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorEms.b);
1021     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1022     Back.SetEmissiveColor (AColor);
1023
1024     Back.SetEnvReflexion (MyCGroup.Struct->ContextFillArea.Back.EnvReflexion);
1025     // Front Material
1026     Front.SetShininess (
1027       Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Shininess));
1028     Front.SetAmbient (
1029       Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Ambient));
1030     Front.SetDiffuse (
1031       Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Diffuse));
1032     Front.SetSpecular (
1033       Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Specular));
1034     Front.SetTransparency (
1035       Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Transparency));
1036     Front.SetEmissive (
1037       Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Emission));
1038     if (MyCGroup.Struct->ContextFillArea.Front.IsAmbient == 1)
1039       Front.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
1040     else
1041       Front.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
1042     if (MyCGroup.Struct->ContextFillArea.Front.IsDiffuse == 1)
1043       Front.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
1044     else
1045       Front.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
1046     if (MyCGroup.Struct->ContextFillArea.Front.IsSpecular == 1)
1047       Front.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
1048     else
1049       Front.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
1050
1051     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorSpec.r);
1052     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorSpec.g);
1053     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorSpec.b);
1054     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1055     Front.SetSpecularColor (AColor);
1056
1057     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorAmb.r);
1058     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorAmb.g);
1059     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorAmb.b);
1060     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1061     Front.SetAmbientColor (AColor);
1062
1063     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorDif.r);
1064     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorDif.g);
1065     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorDif.b);
1066     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1067     Front.SetDiffuseColor (AColor);
1068
1069     R   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorEms.r);
1070     G   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorEms.g);
1071     B   = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorEms.b);
1072     AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1073     Front.SetEmissiveColor (AColor);
1074
1075     Front.SetEnvReflexion (MyCGroup.Struct->ContextFillArea.Front.EnvReflexion);
1076
1077     // Edges
1078     if (EdgeOn)
1079       CTXF->SetEdgeOn ();
1080     else
1081       CTXF->SetEdgeOff ();
1082     // Hatch
1083     CTXF->SetHatchStyle(Aspect_HatchStyle (MyCGroup.Struct->ContextFillArea.Hatch));
1084     // Materials
1085     // Front and Back face
1086     if (MyCGroup.Struct->ContextFillArea.Distinguish == 1)
1087       CTXF->SetDistinguishOn ();
1088     else
1089       CTXF->SetDistinguishOff ();
1090     if (MyCGroup.Struct->ContextFillArea.BackFace == 1)
1091       CTXF->SuppressBackFace ();
1092     else
1093       CTXF->AllowBackFace ();
1094     // Texture
1095     CTXF->SetTextureMap (MyCGroup.Struct->ContextFillArea.Texture.TextureMap);
1096     if (MyCGroup.Struct->ContextFillArea.Texture.doTextureMap == 1)
1097     {
1098       CTXF->SetTextureMapOn();
1099     }
1100     else
1101     {
1102       CTXF->SetTextureMapOff();
1103     }
1104     CTXF->SetShaderProgram (MyCGroup.Struct->ContextFillArea.ShaderProgram);
1105
1106     // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
1107     CTXF->SetPolygonOffsets(MyCGroup.Struct->ContextFillArea.PolygonOffsetMode,
1108       MyCGroup.Struct->ContextFillArea.PolygonOffsetFactor,
1109       MyCGroup.Struct->ContextFillArea.PolygonOffsetUnits);
1110     // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
1111   }
1112   CTXF->SetInteriorStyle (AStyle);
1113   CTXF->SetInteriorColor (AnIntColor);
1114   CTXF->SetEdgeColor (AnEdgeColor);
1115   CTXF->SetEdgeLineType (ALType);
1116   CTXF->SetEdgeWidth (AWidth);
1117   CTXF->SetBackMaterial (Back);
1118   CTXF->SetFrontMaterial (Front);
1119 }
1120
1121 void Graphic3d_Group::PrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTXL, const Handle(Graphic3d_AspectText3d)& CTXT, const Handle(Graphic3d_AspectMarker3d)& CTXM, const Handle(Graphic3d_AspectFillArea3d)& CTXF) const
1122 {
1123   GroupPrimitivesAspect (CTXL, CTXT, CTXM, CTXF);
1124 }