0023634: Eliminate Polyline and Polygon usage in drawers
[occt.git] / src / Graphic3d / Graphic3d_Group_8.cxx
CommitLineData
b311480e 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
7fd59977 20
7fd59977 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
bf75be98 24// 30/11/98 ; FMN : S4069. Textes always visible.
7fd59977 25// 22/03/04 ; SAN : OCC4895 High-level interface for controlling polygon offsets */
26
7fd59977 27
bf75be98 28//-Version
7fd59977 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
bf75be98 36//-References
7fd59977 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
52void 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
80void 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
bf75be98 139 // Reflection mode
7fd59977 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
bf75be98 153 // Material type
7fd59977 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
bf75be98 159 // Specular color
7fd59977 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
bf75be98 192 MyCGroup.ContextFillArea.Back.EnvReflexion =
7fd59977 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 =
bf75be98 208 float ((CTX->FrontMaterial ()).Emissive ());
7fd59977 209
bf75be98 210 // Reflection mode
7fd59977 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
bf75be98 230 // Specular color
7fd59977 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
bf75be98 238 // Ambient color
7fd59977 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
bf75be98 246 // Diffuse color
7fd59977 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
bf75be98 262 MyCGroup.ContextFillArea.Front.EnvReflexion =
7fd59977 263 float ((CTX->FrontMaterial ()).EnvReflexion());
264
265 MyCGroup.ContextFillArea.IsDef = 1; // Definition material ok
266
267 /*** Texture map ***/
bf75be98 268 MyCGroup.ContextFillArea.Texture.TextureMap = CTX->TextureMap();
269 MyCGroup.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1 : 0;
7fd59977 270
bf75be98 271 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
7fd59977 272 Standard_Integer aPolyMode;
60be1f9b 273 Standard_ShortReal aPolyFactor, aPolyUnits;
7fd59977 274 CTX->PolygonOffsets(aPolyMode, aPolyFactor, aPolyUnits);
275 MyCGroup.ContextFillArea.PolygonOffsetMode = aPolyMode;
276 MyCGroup.ContextFillArea.PolygonOffsetFactor = aPolyFactor;
277 MyCGroup.ContextFillArea.PolygonOffsetUnits = aPolyUnits;
bf75be98 278 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
7fd59977 279
280 int noinsert = 1;
281 MyGraphicDriver->FaceContextGroup (MyCGroup, noinsert);
282
283 MyCGroup.ContextFillArea.IsSet = 1;
284
285 Update ();
286
287}
288
289void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectMarker3d)& CTX) {
290
291 if (IsDeleted ()) return;
292
293 Standard_Real R, G, B;
294 Standard_Real AScale;
295 Quantity_Color AColor;
296 Aspect_TypeOfMarker AMType;
297
298 CTX->Values (AColor, AMType, AScale);
299 AColor.Values (R, G, B, Quantity_TOC_RGB);
300
301 MyCGroup.ContextMarker.Color.r = float (R);
302 MyCGroup.ContextMarker.Color.g = float (G);
303 MyCGroup.ContextMarker.Color.b = float (B);
304 MyCGroup.ContextMarker.MarkerType = int (AMType);
305 MyCGroup.ContextMarker.Scale = float (AScale);
306 MyCGroup.ContextMarker.IsDef = 1;
307
308 int noinsert = 1;
309 if ( AMType == Aspect_TOM_USERDEFINED )
310 {
311 CTX->GetTextureSize( MyMarkWidth, MyMarkHeight );
312 MyMarkArray = CTX->GetTexture();
313 MyGraphicDriver->MarkerContextGroup (MyCGroup, noinsert, MyMarkWidth, MyMarkHeight, MyMarkArray);
314 }
315 else
316 MyGraphicDriver->MarkerContextGroup (MyCGroup, noinsert);
317
318 MyCGroup.ContextMarker.IsSet = 1;
319
320 Update ();
321
322}
323
324void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectText3d)& CTX) {
325
326 if (IsDeleted ()) return;
327
328 Standard_CString AFont;
329 Standard_Real R, G, B;
330 Standard_Real Rs, Gs, Bs;
331 Standard_Real ASpace;
332 Standard_Real AnExpansion;
333 Quantity_Color AColor;
334 Aspect_TypeOfStyleText AStyle;
335 Aspect_TypeOfDisplayText ADisplayType;
336 Quantity_Color AColorSubTitle;
337 Standard_Boolean ATextZoomable;
338 Standard_Real ATextAngle;
eeaaaefb 339 Font_FontAspect ATextFontAspect;
7fd59977 340
341 CTX->Values (AColor, AFont, AnExpansion, ASpace, AStyle, ADisplayType,AColorSubTitle,ATextZoomable,ATextAngle,ATextFontAspect);
342 AColor.Values (R, G, B, Quantity_TOC_RGB);
343 AColorSubTitle.Values (Rs, Gs, Bs, Quantity_TOC_RGB);
344
345 MyCGroup.ContextText.Color.r = float (R);
346 MyCGroup.ContextText.Color.g = float (G);
347 MyCGroup.ContextText.Color.b = float (B);
348 MyCGroup.ContextText.Font = (char*)AFont;
349 MyCGroup.ContextText.Expan = float (AnExpansion);
350 MyCGroup.ContextText.Space = float (ASpace);
351 MyCGroup.ContextText.Style = int (AStyle);
352 MyCGroup.ContextText.DisplayType= int (ADisplayType);
353 MyCGroup.ContextText.ColorSubTitle.r = float (Rs);
354 MyCGroup.ContextText.ColorSubTitle.g = float (Gs);
355 MyCGroup.ContextText.ColorSubTitle.b = float (Bs);
bf75be98 356 MyCGroup.ContextText.TextZoomable = ATextZoomable;
357 MyCGroup.ContextText.TextAngle = float (ATextAngle);
7fd59977 358 MyCGroup.ContextText.TextFontAspect = (int)ATextFontAspect;
359
360 MyCGroup.ContextText.IsDef = 1;
361
362 int noinsert = 1;
363 MyGraphicDriver->TextContextGroup (MyCGroup, noinsert);
364
365 MyCGroup.ContextText.IsSet = 1;
366
367 Update ();
368
369}
370
371void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTX) {
372
373 if (IsDeleted ()) return;
374
375 Standard_Real R, G, B;
376 Standard_Real AWidth;
377 Quantity_Color AColor;
378 Aspect_TypeOfLine ALType;
379
380 CTX->Values (AColor, ALType, AWidth);
381 AColor.Values (R, G, B, Quantity_TOC_RGB);
382
383 MyCGroup.ContextLine.Color.r = float (R);
384 MyCGroup.ContextLine.Color.g = float (G);
385 MyCGroup.ContextLine.Color.b = float (B);
386 MyCGroup.ContextLine.LineType = int (ALType);
387 MyCGroup.ContextLine.Width = float (AWidth);
388 MyCGroup.ContextLine.IsDef = 1;
389
390 int noinsert = 0;
391 MyGraphicDriver->LineContextGroup (MyCGroup, noinsert);
392
393 MyCGroup.ContextLine.IsSet = 1;
394
395 Update ();
396
397}
398
399void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea3d)& CTX) {
400
401 if (IsDeleted ()) return;
402
403 Standard_Real R, G, B;
404 Standard_Real AWidth;
405 Quantity_Color AIntColor;
406 Quantity_Color BackIntColor;
407 Quantity_Color AEdgeColor;
408 Aspect_TypeOfLine ALType;
409 Aspect_InteriorStyle AStyle;
410
411 CTX->Values (AStyle, AIntColor, BackIntColor, AEdgeColor, ALType, AWidth);
412 AIntColor.Values (R, G, B, Quantity_TOC_RGB);
413
414 MyCGroup.ContextFillArea.Style = int (AStyle);
415 MyCGroup.ContextFillArea.IntColor.r = float (R);
416 MyCGroup.ContextFillArea.IntColor.g = float (G);
417 MyCGroup.ContextFillArea.IntColor.b = float (B);
bf75be98 418#ifdef OCC1174
7fd59977 419 if ( CTX->Distinguish() )
420 BackIntColor.Values( R, G, B, Quantity_TOC_RGB );
421#endif
422 MyCGroup.ContextFillArea.BackIntColor.r = float( R );
423 MyCGroup.ContextFillArea.BackIntColor.g = float( G );
424 MyCGroup.ContextFillArea.BackIntColor.b = float( B );
425
426 MyCGroup.ContextFillArea.Edge = (CTX->Edge () ? 1 : 0);
427 AEdgeColor.Values (R, G, B, Quantity_TOC_RGB);
428 MyCGroup.ContextFillArea.EdgeColor.r = float (R);
429 MyCGroup.ContextFillArea.EdgeColor.g = float (G);
430 MyCGroup.ContextFillArea.EdgeColor.b = float (B);
431 MyCGroup.ContextFillArea.LineType = int (ALType);
432 MyCGroup.ContextFillArea.Width = float (AWidth);
433 MyCGroup.ContextFillArea.Hatch = int (CTX->HatchStyle ());
434 // Front and Back face
435 MyCGroup.ContextFillArea.Distinguish =
436 ( CTX->Distinguish () ? 1 : 0 );
437 MyCGroup.ContextFillArea.BackFace =
438 ( CTX->BackFace () ? 1 : 0 );
439
440 /*** Back Material ***/
441 // Material state
442 MyCGroup.ContextFillArea.Back.Shininess =
443 float ((CTX->BackMaterial ()).Shininess ());
444 MyCGroup.ContextFillArea.Back.Ambient =
445 float ((CTX->BackMaterial ()).Ambient ());
446 MyCGroup.ContextFillArea.Back.Diffuse =
447 float ((CTX->BackMaterial ()).Diffuse ());
448 MyCGroup.ContextFillArea.Back.Specular =
449 float ((CTX->BackMaterial ()).Specular ());
450 MyCGroup.ContextFillArea.Back.Transparency =
451 float ((CTX->BackMaterial ()).Transparency ());
452 MyCGroup.ContextFillArea.Back.Emission =
bf75be98 453 float ((CTX->BackMaterial ()).Emissive ());
7fd59977 454
bf75be98 455 // Reflection mode
7fd59977 456 MyCGroup.ContextFillArea.Back.IsAmbient =
457 ( (CTX->BackMaterial ()).ReflectionMode
458 (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
459 MyCGroup.ContextFillArea.Back.IsDiffuse =
460 ( (CTX->BackMaterial ()).ReflectionMode
461 (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
462 MyCGroup.ContextFillArea.Back.IsSpecular =
463 ( (CTX->BackMaterial ()).ReflectionMode
464 (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
465 MyCGroup.ContextFillArea.Back.IsEmission =
466 ( (CTX->BackMaterial ()).ReflectionMode
467 (Graphic3d_TOR_EMISSION) ? 1 : 0 );
468
469 // Material type
470 //JR/Hp
471 const Graphic3d_MaterialAspect ama = CTX->BackMaterial () ;
472 Standard_Boolean amt = ama.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
473 MyCGroup.ContextFillArea.Back.IsPhysic = ( amt ? 1 : 0 );
474
bf75be98 475 // Specular color
7fd59977 476 MyCGroup.ContextFillArea.Back.ColorSpec.r =
477 float (((CTX->BackMaterial ()).SpecularColor ()).Red ());
478 MyCGroup.ContextFillArea.Back.ColorSpec.g =
479 float (((CTX->BackMaterial ()).SpecularColor ()).Green ());
480 MyCGroup.ContextFillArea.Back.ColorSpec.b =
481 float (((CTX->BackMaterial ()).SpecularColor ()).Blue ());
482
bf75be98 483 // Ambient color
7fd59977 484 MyCGroup.ContextFillArea.Back.ColorAmb.r =
485 float (((CTX->BackMaterial ()).AmbientColor ()).Red ());
486 MyCGroup.ContextFillArea.Back.ColorAmb.g =
487 float (((CTX->BackMaterial ()).AmbientColor ()).Green ());
488 MyCGroup.ContextFillArea.Back.ColorAmb.b =
489 float (((CTX->BackMaterial ()).AmbientColor ()).Blue ());
490
bf75be98 491 // Diffuse color
7fd59977 492 MyCGroup.ContextFillArea.Back.ColorDif.r =
493 float (((CTX->BackMaterial ()).DiffuseColor ()).Red ());
494 MyCGroup.ContextFillArea.Back.ColorDif.g =
495 float (((CTX->BackMaterial ()).DiffuseColor ()).Green ());
496 MyCGroup.ContextFillArea.Back.ColorDif.b =
497 float (((CTX->BackMaterial ()).DiffuseColor ()).Blue ());
498
499 // Emissive color
500 MyCGroup.ContextFillArea.Back.ColorEms.r =
501 float (((CTX->BackMaterial ()).EmissiveColor ()).Red ());
502 MyCGroup.ContextFillArea.Back.ColorEms.g =
503 float (((CTX->BackMaterial ()).EmissiveColor ()).Green ());
504 MyCGroup.ContextFillArea.Back.ColorEms.b =
505 float (((CTX->BackMaterial ()).EmissiveColor ()).Blue ());
506
bf75be98 507 MyCGroup.ContextFillArea.Back.EnvReflexion =
7fd59977 508 float ((CTX->BackMaterial ()).EnvReflexion());
509
510 /*** Front Material ***/
511 // Ligth specificity
512 MyCGroup.ContextFillArea.Front.Shininess =
513 float ((CTX->FrontMaterial ()).Shininess ());
514 MyCGroup.ContextFillArea.Front.Ambient =
515 float ((CTX->FrontMaterial ()).Ambient ());
516 MyCGroup.ContextFillArea.Front.Diffuse =
517 float ((CTX->FrontMaterial ()).Diffuse ());
518 MyCGroup.ContextFillArea.Front.Specular =
519 float ((CTX->FrontMaterial ()).Specular ());
520 MyCGroup.ContextFillArea.Front.Transparency =
521 float ((CTX->FrontMaterial ()).Transparency ());
522 MyCGroup.ContextFillArea.Front.Emission =
bf75be98 523 float ((CTX->FrontMaterial ()).Emissive ());
7fd59977 524
bf75be98 525 // Reflection mode
7fd59977 526 MyCGroup.ContextFillArea.Front.IsAmbient =
527 ( (CTX->FrontMaterial ()).ReflectionMode
528 (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
529 MyCGroup.ContextFillArea.Front.IsDiffuse =
530 ( (CTX->FrontMaterial ()).ReflectionMode
531 (Graphic3d_TOR_DIFFUSE) ? 1 : 0 );
532 MyCGroup.ContextFillArea.Front.IsSpecular =
533 ( (CTX->FrontMaterial ()).ReflectionMode
534 (Graphic3d_TOR_SPECULAR) ? 1 : 0 );
535 MyCGroup.ContextFillArea.Front.IsEmission =
536 ( (CTX->FrontMaterial ()).ReflectionMode
537 (Graphic3d_TOR_EMISSION) ? 1 : 0 );
538
539 //Material type
540 //JR/Hp
541 const Graphic3d_MaterialAspect amas = CTX->FrontMaterial () ;
542 Standard_Boolean amty = amas.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
543 MyCGroup.ContextFillArea.Front.IsPhysic = ( amty ? 1 : 0 );
544
bf75be98 545 // Specular color
7fd59977 546 MyCGroup.ContextFillArea.Front.ColorSpec.r =
547 float (((CTX->FrontMaterial ()).SpecularColor ()).Red ());
548 MyCGroup.ContextFillArea.Front.ColorSpec.g =
549 float (((CTX->FrontMaterial ()).SpecularColor ()).Green ());
550 MyCGroup.ContextFillArea.Front.ColorSpec.b =
551 float (((CTX->FrontMaterial ()).SpecularColor ()).Blue ());
552
bf75be98 553 // Ambient color
7fd59977 554 MyCGroup.ContextFillArea.Front.ColorAmb.r =
555 float (((CTX->FrontMaterial ()).AmbientColor ()).Red ());
556 MyCGroup.ContextFillArea.Front.ColorAmb.g =
557 float (((CTX->FrontMaterial ()).AmbientColor ()).Green ());
558 MyCGroup.ContextFillArea.Front.ColorAmb.b =
559 float (((CTX->FrontMaterial ()).AmbientColor ()).Blue ());
560
bf75be98 561 // Diffuse color
7fd59977 562 MyCGroup.ContextFillArea.Front.ColorDif.r =
563 float (((CTX->FrontMaterial ()).DiffuseColor ()).Red ());
564 MyCGroup.ContextFillArea.Front.ColorDif.g =
565 float (((CTX->FrontMaterial ()).DiffuseColor ()).Green ());
566 MyCGroup.ContextFillArea.Front.ColorDif.b =
567 float (((CTX->FrontMaterial ()).DiffuseColor ()).Blue ());
568
569 // Emissive color
570 MyCGroup.ContextFillArea.Front.ColorEms.r =
571 float (((CTX->FrontMaterial ()).EmissiveColor ()).Red ());
572 MyCGroup.ContextFillArea.Front.ColorEms.g =
573 float (((CTX->FrontMaterial ()).EmissiveColor ()).Green ());
574 MyCGroup.ContextFillArea.Front.ColorEms.b =
575 float (((CTX->FrontMaterial ()).EmissiveColor ()).Blue ());
576
bf75be98 577 MyCGroup.ContextFillArea.Front.EnvReflexion =
7fd59977 578 float ((CTX->FrontMaterial ()).EnvReflexion());
579
580 MyCGroup.ContextFillArea.IsDef = 1; // Material definition ok
581
bf75be98 582 MyCGroup.ContextFillArea.Texture.TextureMap = CTX->TextureMap();
583 MyCGroup.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1 : 0;
7fd59977 584
bf75be98 585 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
7fd59977 586 Standard_Integer aPolyMode;
60be1f9b 587 Standard_ShortReal aPolyFactor, aPolyUnits;
7fd59977 588 CTX->PolygonOffsets(aPolyMode, aPolyFactor, aPolyUnits);
589 MyCGroup.ContextFillArea.PolygonOffsetMode = aPolyMode;
b8ddfc2f 590 MyCGroup.ContextFillArea.PolygonOffsetFactor = (Standard_ShortReal)aPolyFactor;
591 MyCGroup.ContextFillArea.PolygonOffsetUnits = (Standard_ShortReal)aPolyUnits;
7fd59977 592 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
593
594 int noinsert = 0;
595 MyGraphicDriver->FaceContextGroup (MyCGroup, noinsert);
596
597 MyCGroup.ContextFillArea.IsSet = 1;
598
599 Update ();
600
601}
602
603void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectMarker3d)& CTX) {
604
605 if (IsDeleted ()) return;
606
607 Standard_Real R, G, B;
608 Standard_Real AScale;
609 Quantity_Color AColor;
610 Aspect_TypeOfMarker AMType;
611
612 CTX->Values (AColor, AMType, AScale);
613 AColor.Values (R, G, B, Quantity_TOC_RGB);
614
615 MyCGroup.ContextMarker.Color.r = float (R);
616 MyCGroup.ContextMarker.Color.g = float (G);
617 MyCGroup.ContextMarker.Color.b = float (B);
618 MyCGroup.ContextMarker.MarkerType = int (AMType);
619 MyCGroup.ContextMarker.Scale = float (AScale);
620 MyCGroup.ContextMarker.IsDef = 1;
621
622 int noinsert = 0;
623 if ( AMType == Aspect_TOM_USERDEFINED )
624 {
625 CTX->GetTextureSize( MyMarkWidth, MyMarkHeight );
626 MyMarkArray = CTX->GetTexture();
627 MyGraphicDriver->MarkerContextGroup (MyCGroup, noinsert, MyMarkWidth, MyMarkHeight, MyMarkArray);
628 }
629 else
630 MyGraphicDriver->MarkerContextGroup (MyCGroup, noinsert);
631
632 MyCGroup.ContextMarker.IsSet = 1;
633
634 Update ();
635
636}
637
638void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectText3d)& CTX) {
639
640 if (IsDeleted ()) return;
641
642 Standard_CString AFont;
643 Standard_Real R, G, B;
644 Standard_Real Rs, Gs, Bs;
645 Standard_Real ASpace;
646 Standard_Real AnExpansion;
647 Quantity_Color AColor;
648 Aspect_TypeOfStyleText AStyle;
649 Aspect_TypeOfDisplayText ADisplayType;
bf75be98 650 Quantity_Color AColorSubTitle;
7fd59977 651 Standard_Boolean ATextZoomable;
652 Standard_Real ATextAngle;
eeaaaefb 653 Font_FontAspect ATextFontAspect;
7fd59977 654
655 CTX->Values (AColor, AFont, AnExpansion, ASpace, AStyle, ADisplayType,AColorSubTitle,ATextZoomable,ATextAngle,ATextFontAspect);
656 AColor.Values (R, G, B, Quantity_TOC_RGB);
657 AColorSubTitle.Values (Rs, Gs, Bs, Quantity_TOC_RGB);
658
659 MyCGroup.ContextText.Color.r = float (R);
660 MyCGroup.ContextText.Color.g = float (G);
661 MyCGroup.ContextText.Color.b = float (B);
662 MyCGroup.ContextText.Font = (char*)AFont;
663 MyCGroup.ContextText.Expan = float (AnExpansion);
664 MyCGroup.ContextText.Space = float (ASpace);
665 MyCGroup.ContextText.Style = int (AStyle);
666 MyCGroup.ContextText.DisplayType= int (ADisplayType);
667 MyCGroup.ContextText.ColorSubTitle.r = float (Rs);
668 MyCGroup.ContextText.ColorSubTitle.g = float (Gs);
669 MyCGroup.ContextText.ColorSubTitle.b = float (Bs);
bf75be98 670 MyCGroup.ContextText.TextZoomable = ATextZoomable;
671 MyCGroup.ContextText.TextAngle = float (ATextAngle);
672 MyCGroup.ContextText.TextFontAspect = (int)ATextFontAspect;
7fd59977 673 MyCGroup.ContextText.IsDef = 1;
674
675 int noinsert = 0;
676 MyGraphicDriver->TextContextGroup (MyCGroup, noinsert);
677
678 MyCGroup.ContextText.IsSet = 1;
679
680 Update ();
681
682}
683
684Standard_Boolean Graphic3d_Group::IsGroupPrimitivesAspectSet (const Graphic3d_GroupAspect theAspect) const {
685 switch (theAspect) {
686 case Graphic3d_ASPECT_LINE: return MyCGroup.ContextLine.IsSet;
687 case Graphic3d_ASPECT_TEXT: return MyCGroup.ContextText.IsSet;
688 case Graphic3d_ASPECT_MARKER: return MyCGroup.ContextMarker.IsSet;
689 case Graphic3d_ASPECT_FILL_AREA: return MyCGroup.ContextFillArea.IsSet;
690 default: return Standard_False;
691 }
bf75be98 692}
7fd59977 693
694
695void Graphic3d_Group::GroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTXL, const Handle(Graphic3d_AspectText3d)& CTXT, const Handle(Graphic3d_AspectMarker3d)& CTXM, const Handle(Graphic3d_AspectFillArea3d)& CTXF) const {
696
697 Standard_Real R, G, B;
698 Standard_Real Rs, Gs, Bs;
699 Quantity_Color AColor;
700
701 Standard_Real AWidth;
702 Aspect_TypeOfLine ALType;
703
704 Standard_CString AFont;
705 Standard_Real ASpace;
706 Standard_Real AnExpansion;
707
708 Standard_Real AScale;
709 Aspect_TypeOfMarker AMType;
710
711 Quantity_Color AnIntColor;
712 Quantity_Color AnEdgeColor;
713 Aspect_InteriorStyle AStyle;
714 Standard_Boolean EdgeOn = Standard_False;
715 Graphic3d_MaterialAspect Front;
716 Graphic3d_MaterialAspect Back;
717 Aspect_TypeOfStyleText AStyleT;
718 Aspect_TypeOfDisplayText ADisplayType;
719 Quantity_Color AColorSubTitle;
720
721 if (MyCGroup.ContextLine.IsSet) {
722 R = Standard_Real (MyCGroup.ContextLine.Color.r);
723 G = Standard_Real (MyCGroup.ContextLine.Color.g);
724 B = Standard_Real (MyCGroup.ContextLine.Color.b);
725 ALType = Aspect_TypeOfLine (MyCGroup.ContextLine.LineType);
726 AWidth = Standard_Real (MyCGroup.ContextLine.Width);
727 }
728 else {
729 R = Standard_Real (MyCGroup.Struct->ContextLine.Color.r);
730 G = Standard_Real (MyCGroup.Struct->ContextLine.Color.g);
731 B = Standard_Real (MyCGroup.Struct->ContextLine.Color.b);
732 ALType = Aspect_TypeOfLine (MyCGroup.Struct->ContextLine.LineType);
733 AWidth = Standard_Real (MyCGroup.Struct->ContextLine.Width);
734 }
735 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
736 CTXL->SetColor (AColor);
737 CTXL->SetType (ALType);
738 CTXL->SetWidth (AWidth);
739
740 if (MyCGroup.ContextText.IsSet) {
741 R = Standard_Real (MyCGroup.ContextText.Color.r);
742 G = Standard_Real (MyCGroup.ContextText.Color.g);
743 B = Standard_Real (MyCGroup.ContextText.Color.b);
744 Rs = Standard_Real (MyCGroup.ContextText.ColorSubTitle.r);
745 Gs = Standard_Real (MyCGroup.ContextText.ColorSubTitle.g);
746 Bs = Standard_Real (MyCGroup.ContextText.ColorSubTitle.b);
747 AFont = Standard_CString (MyCGroup.ContextText.Font);
748 AnExpansion = Standard_Real (MyCGroup.ContextText.Expan);
749 ASpace = Standard_Real (MyCGroup.ContextText.Space);
750 AStyleT = Aspect_TypeOfStyleText (MyCGroup.ContextText.Style);
751 ADisplayType= Aspect_TypeOfDisplayText (MyCGroup.ContextText.DisplayType);
752 }
753 else {
754 R = Standard_Real (MyCGroup.Struct->ContextText.Color.r);
755 G = Standard_Real (MyCGroup.Struct->ContextText.Color.g);
756 B = Standard_Real (MyCGroup.Struct->ContextText.Color.b);
757 Rs = Standard_Real (MyCGroup.Struct->ContextText.ColorSubTitle.r);
758 Gs = Standard_Real (MyCGroup.Struct->ContextText.ColorSubTitle.g);
759 Bs = Standard_Real (MyCGroup.Struct->ContextText.ColorSubTitle.b);
760 AFont = Standard_CString (MyCGroup.Struct->ContextText.Font);
761 AnExpansion = Standard_Real (MyCGroup.Struct->ContextText.Expan);
762 ASpace = Standard_Real (MyCGroup.Struct->ContextText.Space);
763 AStyleT = Aspect_TypeOfStyleText (MyCGroup.Struct->ContextText.Style);
764 ADisplayType= Aspect_TypeOfDisplayText (MyCGroup.Struct->ContextText.DisplayType);
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 R = Standard_Real (MyCGroup.ContextMarker.Color.r);
778 G = Standard_Real (MyCGroup.ContextMarker.Color.g);
779 B = Standard_Real (MyCGroup.ContextMarker.Color.b);
780 AMType = Aspect_TypeOfMarker (MyCGroup.ContextMarker.MarkerType);
781 AScale = Standard_Real (MyCGroup.ContextMarker.Scale);
782 if( AMType == Aspect_TOM_USERDEFINED )
783 {
784
785 CTXM->SetTexture( MyMarkWidth, MyMarkHeight, MyMarkArray );
786 }
787 }
788 else {
789 R = Standard_Real (MyCGroup.Struct->ContextMarker.Color.r);
790 G = Standard_Real (MyCGroup.Struct->ContextMarker.Color.g);
791 B = Standard_Real (MyCGroup.Struct->ContextMarker.Color.b);
792 AMType = Aspect_TypeOfMarker (MyCGroup.Struct->ContextMarker.MarkerType);
793 AScale = Standard_Real (MyCGroup.Struct->ContextMarker.Scale);
794 }
795 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
796 CTXM->SetColor (AColor);
797 CTXM->SetType (AMType);
798 CTXM->SetScale (AScale);
799
800 if (MyCGroup.ContextFillArea.IsSet) {
801 // Interior
802 AStyle = Aspect_InteriorStyle (MyCGroup.ContextFillArea.Style);
803 R = Standard_Real (MyCGroup.ContextFillArea.IntColor.r);
804 G = Standard_Real (MyCGroup.ContextFillArea.IntColor.g);
805 B = Standard_Real (MyCGroup.ContextFillArea.IntColor.b);
806 AnIntColor.SetValues (R, G, B, Quantity_TOC_RGB);
807 // Edges
808 if (MyCGroup.ContextFillArea.Edge == 1) EdgeOn = Standard_True;
809 R = Standard_Real (MyCGroup.ContextFillArea.EdgeColor.r);
810 G = Standard_Real (MyCGroup.ContextFillArea.EdgeColor.g);
811 B = Standard_Real (MyCGroup.ContextFillArea.EdgeColor.b);
812 AnEdgeColor.SetValues (R, G, B, Quantity_TOC_RGB);
813 ALType = Aspect_TypeOfLine (MyCGroup.ContextFillArea.LineType);
814 AWidth = Standard_Real (MyCGroup.ContextFillArea.Width);
815 // Back Material
816 Back.SetShininess (
817 Standard_Real (MyCGroup.ContextFillArea.Back.Shininess));
818 Back.SetAmbient (
819 Standard_Real (MyCGroup.ContextFillArea.Back.Ambient));
820 Back.SetDiffuse (
821 Standard_Real (MyCGroup.ContextFillArea.Back.Diffuse));
822 Back.SetSpecular (
823 Standard_Real (MyCGroup.ContextFillArea.Back.Specular));
824 Back.SetTransparency (
825 Standard_Real (MyCGroup.ContextFillArea.Back.Transparency));
826 Back.SetEmissive (
827 Standard_Real (MyCGroup.ContextFillArea.Back.Emission));
828 if (MyCGroup.ContextFillArea.Back.IsAmbient == 1)
829 Back.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
830 else
831 Back.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
832 if (MyCGroup.ContextFillArea.Back.IsDiffuse == 1)
833 Back.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
834 else
835 Back.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
836 if (MyCGroup.ContextFillArea.Back.IsSpecular == 1)
837 Back.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
838 else
839 Back.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
840
841 R = Standard_Real (MyCGroup.ContextFillArea.Back.ColorSpec.r);
842 G = Standard_Real (MyCGroup.ContextFillArea.Back.ColorSpec.g);
843 B = Standard_Real (MyCGroup.ContextFillArea.Back.ColorSpec.b);
844 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
845 Back.SetSpecularColor (AColor);
846
847 R = Standard_Real (MyCGroup.ContextFillArea.Back.ColorAmb.r);
848 G = Standard_Real (MyCGroup.ContextFillArea.Back.ColorAmb.g);
849 B = Standard_Real (MyCGroup.ContextFillArea.Back.ColorAmb.b);
850 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
851 Back.SetAmbientColor (AColor);
852
853 R = Standard_Real (MyCGroup.ContextFillArea.Back.ColorDif.r);
854 G = Standard_Real (MyCGroup.ContextFillArea.Back.ColorDif.g);
855 B = Standard_Real (MyCGroup.ContextFillArea.Back.ColorDif.b);
856 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
857 Back.SetDiffuseColor (AColor);
858
859 R = Standard_Real (MyCGroup.ContextFillArea.Back.ColorEms.r);
860 G = Standard_Real (MyCGroup.ContextFillArea.Back.ColorEms.g);
861 B = Standard_Real (MyCGroup.ContextFillArea.Back.ColorEms.b);
862 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
863 Back.SetEmissiveColor (AColor);
864
865 Back.SetEnvReflexion (MyCGroup.ContextFillArea.Back.EnvReflexion);
866 // Front Material
867 Front.SetShininess (
868 Standard_Real (MyCGroup.ContextFillArea.Front.Shininess));
869 Front.SetAmbient (
870 Standard_Real (MyCGroup.ContextFillArea.Front.Ambient));
871 Front.SetDiffuse (
872 Standard_Real (MyCGroup.ContextFillArea.Front.Diffuse));
873 Front.SetSpecular (
874 Standard_Real (MyCGroup.ContextFillArea.Front.Specular));
875 Front.SetTransparency (
876 Standard_Real (MyCGroup.ContextFillArea.Front.Transparency));
877 Front.SetEmissive (
878 Standard_Real (MyCGroup.ContextFillArea.Back.Emission));
879 if (MyCGroup.ContextFillArea.Front.IsAmbient == 1)
880 Front.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
881 else
882 Front.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
883 if (MyCGroup.ContextFillArea.Front.IsDiffuse == 1)
884 Front.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
885 else
886 Front.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
887 if (MyCGroup.ContextFillArea.Front.IsSpecular == 1)
888 Front.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
889 else
890 Front.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
891
892 R = Standard_Real (MyCGroup.ContextFillArea.Front.ColorSpec.r);
893 G = Standard_Real (MyCGroup.ContextFillArea.Front.ColorSpec.g);
894 B = Standard_Real (MyCGroup.ContextFillArea.Front.ColorSpec.b);
895 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
896 Front.SetSpecularColor (AColor);
897
898 R = Standard_Real (MyCGroup.ContextFillArea.Front.ColorAmb.r);
899 G = Standard_Real (MyCGroup.ContextFillArea.Front.ColorAmb.g);
900 B = Standard_Real (MyCGroup.ContextFillArea.Front.ColorAmb.b);
901 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
902 Front.SetAmbientColor (AColor);
903
904 R = Standard_Real (MyCGroup.ContextFillArea.Front.ColorDif.r);
905 G = Standard_Real (MyCGroup.ContextFillArea.Front.ColorDif.g);
906 B = Standard_Real (MyCGroup.ContextFillArea.Front.ColorDif.b);
907 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
908 Front.SetDiffuseColor (AColor);
909
910 R = Standard_Real (MyCGroup.ContextFillArea.Front.ColorEms.r);
911 G = Standard_Real (MyCGroup.ContextFillArea.Front.ColorEms.g);
912 B = Standard_Real (MyCGroup.ContextFillArea.Front.ColorEms.b);
913 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
914 Front.SetEmissiveColor (AColor);
915
916 Front.SetEnvReflexion (MyCGroup.ContextFillArea.Front.EnvReflexion);
917
918 // Edges
919 if (EdgeOn)
920 CTXF->SetEdgeOn ();
921 else
922 CTXF->SetEdgeOff ();
923 // Hatch
924 CTXF->SetHatchStyle(Aspect_HatchStyle (MyCGroup.ContextFillArea.Hatch));
925 // Materials
926 // Front and Back face
927 if (MyCGroup.ContextFillArea.Distinguish == 1)
928 CTXF->SetDistinguishOn ();
929 else
930 CTXF->SetDistinguishOff ();
931 if (MyCGroup.ContextFillArea.BackFace == 1)
932 CTXF->SuppressBackFace ();
933 else
934 CTXF->AllowBackFace ();
935 // Texture
bf75be98 936 CTXF->SetTextureMap (MyCGroup.ContextFillArea.Texture.TextureMap);
7fd59977 937 if (MyCGroup.ContextFillArea.Texture.doTextureMap == 1)
bf75be98 938 {
939 CTXF->SetTextureMapOn();
940 }
7fd59977 941 else
bf75be98 942 {
943 CTXF->SetTextureMapOff();
944 }
7fd59977 945
bf75be98 946 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
947 CTXF->SetPolygonOffsets(MyCGroup.ContextFillArea.PolygonOffsetMode,
7fd59977 948 MyCGroup.ContextFillArea.PolygonOffsetFactor,
949 MyCGroup.ContextFillArea.PolygonOffsetUnits);
bf75be98 950 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
7fd59977 951 }
952 else {
953 // Interior
954 AStyle = Aspect_InteriorStyle (MyCGroup.Struct->ContextFillArea.Style);
955 R = Standard_Real (MyCGroup.Struct->ContextFillArea.IntColor.r);
956 G = Standard_Real (MyCGroup.Struct->ContextFillArea.IntColor.g);
957 B = Standard_Real (MyCGroup.Struct->ContextFillArea.IntColor.b);
958 AnIntColor.SetValues (R, G, B, Quantity_TOC_RGB);
959 // Edges
960 if (MyCGroup.Struct->ContextFillArea.Edge == 1) EdgeOn = Standard_True;
961 R = Standard_Real (MyCGroup.Struct->ContextFillArea.EdgeColor.r);
962 G = Standard_Real (MyCGroup.Struct->ContextFillArea.EdgeColor.g);
963 B = Standard_Real (MyCGroup.Struct->ContextFillArea.EdgeColor.b);
964 AnEdgeColor.SetValues (R, G, B, Quantity_TOC_RGB);
965 ALType = Aspect_TypeOfLine (MyCGroup.Struct->ContextFillArea.LineType);
966 AWidth = Standard_Real (MyCGroup.Struct->ContextFillArea.Width);
967 // Back Material
968 Back.SetShininess (
969 Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Shininess));
970 Back.SetAmbient (
971 Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Ambient));
972 Back.SetDiffuse (
973 Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Diffuse));
974 Back.SetSpecular (
975 Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Specular));
976 Back.SetTransparency (
977 Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Transparency));
978 Back.SetEmissive (
979 Standard_Real (MyCGroup.Struct->ContextFillArea.Back.Emission));
980 if (MyCGroup.Struct->ContextFillArea.Back.IsAmbient == 1)
981 Back.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
982 else
983 Back.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
984 if (MyCGroup.Struct->ContextFillArea.Back.IsDiffuse == 1)
985 Back.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
986 else
987 Back.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
988 if (MyCGroup.Struct->ContextFillArea.Back.IsSpecular == 1)
989 Back.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
990 else
991 Back.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
992
993 R = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorSpec.r);
994 G = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorSpec.g);
995 B = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorSpec.b);
996 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
997 Back.SetSpecularColor (AColor);
998
999 R = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorAmb.r);
1000 G = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorAmb.g);
1001 B = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorAmb.b);
1002 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1003 Back.SetAmbientColor (AColor);
1004
1005 R = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorDif.r);
1006 G = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorDif.g);
1007 B = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorDif.b);
1008 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1009 Back.SetDiffuseColor (AColor);
1010
1011 R = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorEms.r);
1012 G = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorEms.g);
1013 B = Standard_Real (MyCGroup.Struct->ContextFillArea.Back.ColorEms.b);
1014 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1015 Back.SetEmissiveColor (AColor);
1016
1017 Back.SetEnvReflexion (MyCGroup.Struct->ContextFillArea.Back.EnvReflexion);
1018 // Front Material
1019 Front.SetShininess (
1020 Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Shininess));
1021 Front.SetAmbient (
1022 Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Ambient));
1023 Front.SetDiffuse (
1024 Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Diffuse));
1025 Front.SetSpecular (
1026 Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Specular));
1027 Front.SetTransparency (
1028 Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Transparency));
1029 Front.SetEmissive (
1030 Standard_Real (MyCGroup.Struct->ContextFillArea.Front.Emission));
1031 if (MyCGroup.Struct->ContextFillArea.Front.IsAmbient == 1)
1032 Front.SetReflectionModeOn (Graphic3d_TOR_AMBIENT);
1033 else
1034 Front.SetReflectionModeOff (Graphic3d_TOR_AMBIENT);
1035 if (MyCGroup.Struct->ContextFillArea.Front.IsDiffuse == 1)
1036 Front.SetReflectionModeOn (Graphic3d_TOR_DIFFUSE);
1037 else
1038 Front.SetReflectionModeOff (Graphic3d_TOR_DIFFUSE);
1039 if (MyCGroup.Struct->ContextFillArea.Front.IsSpecular == 1)
1040 Front.SetReflectionModeOn (Graphic3d_TOR_SPECULAR);
1041 else
1042 Front.SetReflectionModeOff (Graphic3d_TOR_SPECULAR);
1043
1044 R = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorSpec.r);
1045 G = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorSpec.g);
1046 B = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorSpec.b);
1047 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1048 Front.SetSpecularColor (AColor);
1049
1050 R = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorAmb.r);
1051 G = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorAmb.g);
1052 B = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorAmb.b);
1053 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1054 Front.SetAmbientColor (AColor);
1055
1056 R = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorDif.r);
1057 G = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorDif.g);
1058 B = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorDif.b);
1059 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1060 Front.SetDiffuseColor (AColor);
1061
1062 R = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorEms.r);
1063 G = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorEms.g);
1064 B = Standard_Real (MyCGroup.Struct->ContextFillArea.Front.ColorEms.b);
1065 AColor.SetValues (R, G, B, Quantity_TOC_RGB);
1066 Front.SetEmissiveColor (AColor);
1067
1068 Front.SetEnvReflexion (MyCGroup.Struct->ContextFillArea.Front.EnvReflexion);
1069
1070 // Edges
1071 if (EdgeOn)
1072 CTXF->SetEdgeOn ();
1073 else
1074 CTXF->SetEdgeOff ();
1075 // Hatch
1076 CTXF->SetHatchStyle(Aspect_HatchStyle (MyCGroup.Struct->ContextFillArea.Hatch));
1077 // Materials
1078 // Front and Back face
1079 if (MyCGroup.Struct->ContextFillArea.Distinguish == 1)
1080 CTXF->SetDistinguishOn ();
1081 else
1082 CTXF->SetDistinguishOff ();
1083 if (MyCGroup.Struct->ContextFillArea.BackFace == 1)
1084 CTXF->SuppressBackFace ();
1085 else
1086 CTXF->AllowBackFace ();
1087 // Texture
bf75be98 1088 CTXF->SetTextureMap (MyCGroup.Struct->ContextFillArea.Texture.TextureMap);
7fd59977 1089 if (MyCGroup.Struct->ContextFillArea.Texture.doTextureMap == 1)
bf75be98 1090 {
1091 CTXF->SetTextureMapOn();
1092 }
7fd59977 1093 else
bf75be98 1094 {
1095 CTXF->SetTextureMapOff();
1096 }
7fd59977 1097
bf75be98 1098 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
1099 CTXF->SetPolygonOffsets(MyCGroup.Struct->ContextFillArea.PolygonOffsetMode,
7fd59977 1100 MyCGroup.Struct->ContextFillArea.PolygonOffsetFactor,
1101 MyCGroup.Struct->ContextFillArea.PolygonOffsetUnits);
bf75be98 1102 // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
7fd59977 1103 }
1104 CTXF->SetInteriorStyle (AStyle);
1105 CTXF->SetInteriorColor (AnIntColor);
1106 CTXF->SetEdgeColor (AnEdgeColor);
1107 CTXF->SetEdgeLineType (ALType);
1108 CTXF->SetEdgeWidth (AWidth);
1109 CTXF->SetBackMaterial (Back);
1110 CTXF->SetFrontMaterial (Front);
1111}
1112
b8ddfc2f 1113void Graphic3d_Group::PrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTXL, const Handle(Graphic3d_AspectText3d)& CTXT, const Handle(Graphic3d_AspectMarker3d)& CTXM, const Handle(Graphic3d_AspectFillArea3d)& CTXF) const
1114{
1115 GroupPrimitivesAspect (CTXL, CTXT, CTXM, CTXF);
7fd59977 1116}