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