0022819: Redesign of OpenGl driver
[occt.git] / src / QADBMReflex / QADBMReflex.cxx
1 // File:        QADBMReflex.cxx
2 // Created:     Mon Oct  7 14:56:07 2002
3 // Author:      QA Admin
4 //              <qa@russox>
5
6
7 #include <QADBMReflex.ixx>
8
9 #include <Draw_Interpretor.hxx>
10 #include <DBRep.hxx>
11 #include <DrawTrSurf.hxx>
12 #include <AIS_InteractiveContext.hxx>
13 #include <ViewerTest.hxx>
14 #include <AIS_Shape.hxx>
15 #include <TopoDS_Shape.hxx>
16
17
18 //=======================================================================
19 //function : GetMaterialFromName
20 //purpose  : get the Graphic3d_NameOfMaterial from a string
21 //=======================================================================
22
23 #define DEFAULT_MATERIAL Graphic3d_NOM_BRASS
24 static Graphic3d_NameOfMaterial GetMaterialFromName( const char *name, Draw_Interpretor& di ) 
25
26   Graphic3d_NameOfMaterial mat = DEFAULT_MATERIAL;
27   
28   if      ( !strcasecmp(name,"BRASS" ) )         mat = Graphic3d_NOM_BRASS;
29   else if ( !strcasecmp(name,"BRONZE" ) )        mat = Graphic3d_NOM_BRONZE;
30   else if ( !strcasecmp(name,"COPPER" ) )        mat = Graphic3d_NOM_COPPER;
31   else if ( !strcasecmp(name,"GOLD" ) )          mat = Graphic3d_NOM_GOLD;
32   else if ( !strcasecmp(name,"PEWTER" ) )        mat = Graphic3d_NOM_PEWTER;
33   else if ( !strcasecmp(name,"SILVER" ) )        mat = Graphic3d_NOM_SILVER;
34   else if ( !strcasecmp(name,"STEEL" ) )         mat = Graphic3d_NOM_STEEL;
35   else if ( !strcasecmp(name,"METALIZED" ) )     mat = Graphic3d_NOM_METALIZED;
36   else if ( !strcasecmp(name,"STONE" ) )         mat = Graphic3d_NOM_STONE;
37   else if ( !strcasecmp(name,"CHROME" ) )        mat = Graphic3d_NOM_CHROME;
38   else if ( !strcasecmp(name,"ALUMINIUM" ) )     mat = Graphic3d_NOM_ALUMINIUM;
39   else if ( !strcasecmp(name,"NEON_PHC" ) )      mat = Graphic3d_NOM_NEON_PHC;
40   else if ( !strcasecmp(name,"NEON_GNC" ) )      mat = Graphic3d_NOM_NEON_GNC;
41   else if ( !strcasecmp(name,"PLASTER" ) )       mat = Graphic3d_NOM_PLASTER;
42   else if ( !strcasecmp(name,"SHINY_PLASTIC" ) ) mat = Graphic3d_NOM_SHINY_PLASTIC;
43   else if ( !strcasecmp(name,"SATIN" ) )         mat = Graphic3d_NOM_SATIN;
44   else if ( !strcasecmp(name,"PLASTIC" ) )       mat = Graphic3d_NOM_PLASTIC;
45   else if ( !strcasecmp(name,"OBSIDIAN" ) )      mat = Graphic3d_NOM_OBSIDIAN;
46   else if ( !strcasecmp(name,"JADE" ) )          mat = Graphic3d_NOM_JADE;
47
48 #ifdef DEB
49   di << " materiau" << name <<" "<<Standard_Integer(mat) << "\n";
50 #endif
51   return mat;
52 }
53
54 #include <QADBMReflex_OCC749PrsUseVertex.hxx>
55 #include <QADBMReflex_OCC749PrsUseVertexC.hxx>
56 static Standard_Integer OCC749 (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
57 {
58
59   Handle(AIS_InteractiveContext) myAISContext = ViewerTest::GetAISContext();
60   if(myAISContext.IsNull()) {
61     di << "use 'vinit' command before " << argv[0];
62     return 1;
63   }
64
65   //if(!(argc == 14 || argc == 17)) {
66   //  cerr << "Usage : " << argv[0] << " Reflection(=0/1) UseVertexC(=0/1) Timer(=0/1) XCount YCount BoxSize R1 G1 B1 R2 G2 B2 NameOfMaterial [R3 G3 B3]" << endl;
67   if(!(argc == 14)) {
68     di << "Usage : " << argv[0] << " Reflection(=0/1) UseVertexC(=0/1) Timer(=0/1) XCount YCount BoxSize R1 G1 B1 R2 G2 B2 NameOfMaterial" << "\n";
69     return -1;
70   }
71
72   Standard_Integer IntegerReflection = atoi(argv[1]);
73   Standard_Boolean Reflection;
74   if (IntegerReflection == 0) {
75     Reflection = Standard_False;
76   } else {
77     Reflection = Standard_True;
78   }
79
80   Standard_Integer IntegerUseVertexC = atoi(argv[2]);
81   Standard_Boolean UseVertexC;
82   if (IntegerUseVertexC == 0) {
83     UseVertexC = Standard_False;
84   } else {
85     UseVertexC = Standard_True;
86   }
87
88   Standard_Integer IntegerTimer = atoi(argv[3]);
89   Standard_Boolean Timer;
90   if (IntegerTimer == 0) {
91     Timer = Standard_False;
92   } else {
93     Timer = Standard_True;
94   }
95
96   Standard_Integer XCount = atoi(argv[4]);
97   Standard_Integer YCount = atoi(argv[5]);
98   Standard_Integer BoxSize = atoi(argv[6]);
99
100   Quantity_Parameter R1,G1,B1,R2,G2,B2;
101   Quantity_Parameter R3,G3,B3;
102   Graphic3d_MaterialAspect MaterialAspect;
103   Standard_Boolean Material;
104
105   Standard_Integer R1_Integer = atoi(argv[7]);
106   Standard_Integer G1_Integer = atoi(argv[8]);
107   Standard_Integer B1_Integer = atoi(argv[9]);
108   Standard_Integer R2_Integer = atoi(argv[10]);
109   Standard_Integer G2_Integer = atoi(argv[11]);
110   Standard_Integer B2_Integer = atoi(argv[12]);
111   R1 = R1_Integer / 255.;
112   G1 = G1_Integer / 255.;
113   B1 = B1_Integer / 255.;
114   R2 = R2_Integer / 255.;
115   G2 = G2_Integer / 255.;
116   B2 = B2_Integer / 255.;
117   di << "RED1 : " << R1  << " GREEN1 : " << G1  << " BLUE1 : " << B1 <<"\n";
118   di << "RED2 : " << R2  << " GREEN2 : " << G2  << " BLUE2 : " << B2 <<"\n";
119
120   MaterialAspect = GetMaterialFromName(argv[13],di);
121   Material = Standard_True;
122
123   Quantity_Parameter MaterialR,MaterialG,MaterialB;
124   MaterialR = MaterialAspect.Color().Red();
125   MaterialG = MaterialAspect.Color().Green();
126   MaterialB = MaterialAspect.Color().Blue();
127   di << "MaterialRED : " << MaterialR  << " MaterialGREEN : " << MaterialG  << " MaterialBLUE : " << MaterialB <<"\n";
128
129   Standard_Integer R3_Integer,G3_Integer,B3_Integer;
130   if(argc == 17) {
131     R3_Integer = atoi(argv[14]);
132     G3_Integer = atoi(argv[15]);
133     B3_Integer = atoi(argv[16]);
134   } else {
135     R3_Integer = R2_Integer;
136     G3_Integer = G2_Integer;
137     B3_Integer = B2_Integer;
138   }
139   R3 = R3_Integer / 255.;
140   G3 = G3_Integer / 255.;
141   B3 = B3_Integer / 255.;
142   if(argc == 17) {
143     di << "RED3 : " << R3  << " GREEN3 : " << G3  << " BLUE3 : " << B3 <<"\n";
144   }
145
146   myAISContext->EraseAll(Standard_False);
147   if (UseVertexC) {
148     Handle(QADBMReflex_OCC749PrsUseVertexC) anIntearactiveObject;
149     anIntearactiveObject = new QADBMReflex_OCC749PrsUseVertexC(Reflection,
150                                                                Quantity_Color(R1, G1, B1, Quantity_TOC_RGB),
151                                                                Quantity_Color(R2, G2, B2, Quantity_TOC_RGB),
152                                                                Quantity_Color(R3, G3, B3, Quantity_TOC_RGB),
153                                                                XCount,
154                                                                YCount,
155                                                                BoxSize,
156                                                                MaterialAspect,
157                                                                Material,
158                                                                Timer);
159     myAISContext->Display(anIntearactiveObject);
160   } else {
161     Handle(QADBMReflex_OCC749PrsUseVertex) anIntearactiveObject;
162     anIntearactiveObject = new QADBMReflex_OCC749PrsUseVertex(Reflection,
163                                                               Quantity_Color(R1, G1, B1, Quantity_TOC_RGB),
164                                                               Quantity_Color(R2, G2, B2, Quantity_TOC_RGB),
165                                                               Quantity_Color(R3, G3, B3, Quantity_TOC_RGB),
166                                                               XCount,
167                                                               YCount,
168                                                               BoxSize,
169                                                               MaterialAspect,
170                                                               Material,
171                                                               Timer);
172     myAISContext->Display(anIntearactiveObject);
173   }
174   return 0;
175 }
176
177 #include <QADBMReflex_OCC749PrsUseVertexABV.hxx>
178 #include <QADBMReflex_OCC749PrsUseVertexCABV.hxx>
179 static Standard_Integer OCC749_abv (Draw_Interpretor& di, Standard_Integer argc, const char ** argv)
180 {
181
182   Handle(AIS_InteractiveContext) myAISContext = ViewerTest::GetAISContext();
183   if(myAISContext.IsNull()) {
184     di << "use 'vinit' command before " << argv[0];
185     return 1;
186   }
187
188   if(!(argc == 13)) {
189     di << "Usage : " << argv[0] << " Reflection(=0/1) UseVertexC(=0/1) Timer(=0/1) XCount YCount R1 G1 B1 R2 G2 B2 NameOfMaterial" << "\n";
190     return -1;
191   }
192
193   Standard_Integer IntegerReflection = atoi(argv[1]);
194   Standard_Boolean Reflection;
195   if (IntegerReflection == 0) {
196     Reflection = Standard_False;
197   } else {
198     Reflection = Standard_True;
199   }
200
201   Standard_Integer IntegerUseVertexC = atoi(argv[2]);
202   Standard_Boolean UseVertexC;
203   if (IntegerUseVertexC == 0) {
204     UseVertexC = Standard_False;
205   } else {
206     UseVertexC = Standard_True;
207   }
208
209   Standard_Integer IntegerTimer = atoi(argv[3]);
210   Standard_Boolean Timer;
211   if (IntegerTimer == 0) {
212     Timer = Standard_False;
213   } else {
214     Timer = Standard_True;
215   }
216
217   Standard_Integer XCount = atoi(argv[4]);
218   Standard_Integer YCount = atoi(argv[5]);
219   //Standard_Integer BoxSize = atoi(argv[6]);
220   Standard_Integer BoxSize = 1;
221
222   Quantity_Parameter R1,G1,B1,R2,G2,B2;
223   Quantity_Parameter R3,G3,B3;
224   Graphic3d_MaterialAspect MaterialAspect;
225   Standard_Boolean Material;
226
227   //Standard_Integer R1_Integer = atoi(argv[7]);
228   //Standard_Integer G1_Integer = atoi(argv[8]);
229   //Standard_Integer B1_Integer = atoi(argv[9]);
230   //Standard_Integer R2_Integer = atoi(argv[10]);
231   //Standard_Integer G2_Integer = atoi(argv[11]);
232   //Standard_Integer B2_Integer = atoi(argv[12]);
233   Standard_Integer R1_Integer = atoi(argv[6]);
234   Standard_Integer G1_Integer = atoi(argv[7]);
235   Standard_Integer B1_Integer = atoi(argv[8]);
236   Standard_Integer R2_Integer = atoi(argv[9]);
237   Standard_Integer G2_Integer = atoi(argv[10]);
238   Standard_Integer B2_Integer = atoi(argv[11]);
239   R1 = R1_Integer / 255.;
240   G1 = G1_Integer / 255.;
241   B1 = B1_Integer / 255.;
242   R2 = R2_Integer / 255.;
243   G2 = G2_Integer / 255.;
244   B2 = B2_Integer / 255.;
245   di << "RED1 : " << R1  << " GREEN1 : " << G1  << " BLUE1 : " << B1 <<"\n";
246   di << "RED2 : " << R2  << " GREEN2 : " << G2  << " BLUE2 : " << B2 <<"\n";
247
248   //MaterialAspect = GetMaterialFromName(argv[13]);
249   MaterialAspect = GetMaterialFromName(argv[12],di);
250   Material = Standard_True;
251
252   Quantity_Parameter MaterialR,MaterialG,MaterialB;
253   MaterialR = MaterialAspect.Color().Red();
254   MaterialG = MaterialAspect.Color().Green();
255   MaterialB = MaterialAspect.Color().Blue();
256   di << "MaterialRED : " << MaterialR  << " MaterialGREEN : " << MaterialG  << " MaterialBLUE : " << MaterialB <<"\n";
257
258   Standard_Integer R3_Integer,G3_Integer,B3_Integer;
259   if(argc == 17) {
260     R3_Integer = atoi(argv[14]);
261     G3_Integer = atoi(argv[15]);
262     B3_Integer = atoi(argv[16]);
263   } else {
264     R3_Integer = R2_Integer;
265     G3_Integer = G2_Integer;
266     B3_Integer = B2_Integer;
267   }
268   R3 = R3_Integer / 255.;
269   G3 = G3_Integer / 255.;
270   B3 = B3_Integer / 255.;
271   if(argc == 17) {
272     di << "RED3 : " << R3  << " GREEN3 : " << G3  << " BLUE3 : " << B3 <<"\n";
273   }
274
275   myAISContext->EraseAll(Standard_False);
276   if (UseVertexC) {
277     Handle(QADBMReflex_OCC749PrsUseVertexCABV) anIntearactiveObject;
278     anIntearactiveObject = new QADBMReflex_OCC749PrsUseVertexCABV(Reflection,
279                                                                   Quantity_Color(R1, G1, B1, Quantity_TOC_RGB),
280                                                                   Quantity_Color(R2, G2, B2, Quantity_TOC_RGB),
281                                                                   Quantity_Color(R3, G3, B3, Quantity_TOC_RGB),
282                                                                   XCount,
283                                                                   YCount,
284                                                                   BoxSize,
285                                                                   MaterialAspect,
286                                                                   Material,
287                                                                   Timer);
288     myAISContext->Display(anIntearactiveObject);
289   } else {
290     Handle(QADBMReflex_OCC749PrsUseVertexABV) anIntearactiveObject;
291     anIntearactiveObject = new QADBMReflex_OCC749PrsUseVertexABV(Reflection,
292                                                                  Quantity_Color(R1, G1, B1, Quantity_TOC_RGB),
293                                                                  Quantity_Color(R2, G2, B2, Quantity_TOC_RGB),
294                                                                  Quantity_Color(R3, G3, B3, Quantity_TOC_RGB),
295                                                                  XCount,
296                                                                  YCount,
297                                                                  BoxSize,
298                                                                  MaterialAspect,
299                                                                  Material,
300                                                                  Timer);
301     myAISContext->Display(anIntearactiveObject);
302   }
303   return 0;
304 }
305
306 void QADBMReflex::Commands(Draw_Interpretor& theCommands) {
307   char *group = "QADBMReflex";
308
309   //theCommands.Add("OCC749", "OCC749 Reflection(=0/1) UseVertexC(=0/1) Timer(=0/1) XCount YCount BoxSize R1 G1 B1 R2 G2 B2 NameOfMaterial [R3 G3 B3]", __FILE__, OCC749, group);
310   theCommands.Add("OCC749", "OCC749 Reflection(=0/1) UseVertexC(=0/1) Timer(=0/1) XCount YCount BoxSize R1 G1 B1 R2 G2 B2 NameOfMaterial", __FILE__, OCC749, group);
311   theCommands.Add("OCC749_abv", "OCC749_abv Reflection(=0/1) UseVertexC(=0/1) Timer(=0/1) XCount YCount R1 G1 B1 R2 G2 B2 NameOfMaterial", __FILE__, OCC749_abv, group);
312   return;
313 }