Adding test cases from chl grid
[occt.git] / tests / bugs / vis / bug23226
1 puts "TODO OCC12345 ALL: Tcl Exception:"
2 puts "TODO OCC12345 ALL: TEST INCOMPLETE"
3 puts "============"
4 puts "OCC23226"
5 puts "============"
6 puts ""
7 #######################################################################
8 # Extend OpenGl_Context to store map of shared GPU resources
9 #######################################################################
10
11 set BugNumber OCC23226
12
13 #
14 # This test is modified test cdl/934/C2
15 #
16
17 # this test performs automatical test of primitives array objects by pixel checking
18 # this test ALSO DUMPS two result images (the primitives on the images should have
19 # same contours, WIREFRAME OBJECTS ARE IN YELLOW-RED COLORS, SHADED OBJECTS ARE
20 # BLUE-GREEN COLORS)
21
22 set BUGNUMBER OCC22583
23 set status 0
24 set ImageName1 "occ22583-image1.png"
25 set ImageName2 "occ22583-image2.png"
26
27 # set window width and height, this values should correspond to a 
28 # view window sizes to pass the test
29 set view_width  405
30 set view_height 405
31
32 # colors used for tests
33 # yellow
34 set colorY_R 1
35 set colorY_G 1
36 set colorY_B 0
37
38 # red
39 set colorR_R 1
40 set colorR_G 0
41 set colorR_B 0
42
43 # blue
44 set colorB_R 0
45 set colorB_G 1
46 set colorB_B 1
47
48 # green
49 set colorG_R 0
50 set colorG_G 1
51 set colorG_B 0
52
53 # limit of range where the pixels are tested (sets number of iterations)
54 # 30 pixels in width and in height will be enough to test all primitives
55 set limit_x 3
56 set limit_y 3
57
58 # this procedure is internal and will be removed at the end of the script
59 # generate points for primitive
60 proc generate_points {x y z r g b} {
61         # define top plane points
62         global pts01 pts02 pts03 pts04 pts05 pts06
63         set pts01 "v [expr "$x-5"] [expr "$y+5"] [expr "$z"]  n 0 0 -1 c $r $g $b"
64         set pts02 "v [expr "$x  "] [expr "$y+5"] [expr "$z"]  n 0 0 -1 c $r $g $b"
65         set pts03 "v [expr "$x  "] [expr "$y "] [expr "$z"]  n 0 0 -1 c $r $g $b"
66         set pts04 "v [expr "$x+5"] [expr "$y "] [expr "$z"]  n 0 0 -1 c $r $g $b"
67         set pts05 "v [expr "$x-5"] [expr "$y-5"] [expr "$z"]  n 0 0 -1 c $r $g $b"
68         set pts06 "v [expr "$x  "] [expr "$y-5"] [expr "$z"]  n 0 0 -1 c $r $g $b"
69 }
70
71 # this procedure is internal and will be removed at the end of the script
72 # check pixels of primitive
73 proc check_primitive {name1 r g b args} {
74         global limit_x limit_y view_width view_height
75         # show only primitive that we interested in to test
76         vdonly $name1 $args
77         vtop
78         vfit
79         
80         # move cursor not to select shape
81         vmoveto 0 0
82         vmoveto 0 0
83         
84         # test pixels in a top left corner
85         set TestPassed 0
86         set HasPixel 0
87         for {set i 0} {$i < $limit_x} {incr i} {
88                 for {set j 0} {$j < $limit_y} {incr j} {
89                         set QATestVar [ catch { QAGetPixelColor $i $j $r $g $b } ]
90                         if { $QATestVar == 0 } {
91                                 set HasPixel 1
92                         }
93                 }
94         }
95         if { $HasPixel == 1 } { 
96                 set TestPassed [expr $TestPassed + 1]
97         } else {
98                 set TestPassed 0
99         }
100
101         # test pixels in bottom left corner
102         set HasPixel 1
103         for {set i 0} {$i < $limit_x} {incr i} {
104                 for {set j 0} {$j < $limit_y} {incr j} {
105                         set QATestVar [ catch { QAGetPixelColor $i [expr $view_height-$j] $r $g $b  } ]
106                         if { $QATestVar == 0 } {
107                                 set HasPixel 1
108                         }
109                 }
110         }
111         if { $HasPixel == 1 } { 
112                 set TestPassed [expr $TestPassed + 1]
113         } else {
114                 set TestPassed 0
115         }
116         
117         # test pixels in center right corner
118         set HasPixel 1
119         for {set i 0} {$i < $limit_x} {incr i} {
120                 for {set j 0} {$j < $limit_y} {incr j} {
121                         set QATestVar [ catch { QAGetPixelColor [expr ($view_width-$limit_y) + $i] [expr ($view_height-$limit_y)/2 + $j] $r $g $b  } ]
122                         if { $QATestVar == 0 } {
123                                 set HasPixel 1
124                         }
125                 }
126         }
127         if { $HasPixel == 1 } { 
128                 set TestPassed [expr $TestPassed + 1]
129         } else {
130                 set TestPassed 0
131         }
132         
133         # test pixels in center left corner (shouldn't be anything)
134         set HasPixel 0
135         for {set i 0} {$i < $limit_x} {incr i} {
136                 for {set j 0} {$j < $limit_y} {incr j} {
137                         set QATestVar [ catch { QAGetPixelColor [expr $view_width/4 + $i] [expr ($view_height-$limit_y)/2 + $j] $r $g $b  } ]
138                         if { $QATestVar == 0 } {
139                                 set HasPixel 1
140                         }
141                 }
142         }
143         if { $HasPixel == 1 } { 
144                 set TestPassed 0
145         } else {
146                 set TestPassed [expr $TestPassed + 1]
147         }
148
149         # show all primitives
150         vdisplayall
151         vtop
152         vfit
153         
154         # return a result
155         if { ${TestPassed} == 4 } {
156       return 1
157         } else {
158       return 0
159         }
160 }
161
162 # ### THIS IS THE HEAD LOOP OF THE TEST ####################
163 # During this test primitives are created and displayed
164 # with commands vdrawparray, and verified for consistency
165 # with check_primitive procedure. In spite of the fact that there
166 # a lot of code below, it's similar and divided on the similar
167 # blocks of code.
168 # The iteration loop is intended to check primitives with
169 # "vertex buffer objects" turned off (vbo_enable = 0) and
170 # turned on (vbo_enable = 1)
171
172 for {set vbo_enable 0} {$vbo_enable < 2} {incr vbo_enable} {
173
174         if { $vbo_enable == 0 } { 
175             vvbo 0
176             puts "TEST WITH VBO is OFF"
177         }
178         if { $vbo_enable == 1 } {
179             vvbo 1
180             puts "TEST WITH VBO is ON"
181         }
182         
183         vinit
184         veraseall
185         vclear
186
187         # this points are only to simplify visiual check of dumped image
188         vpoint point1   65 0 0
189         vpoint point2 -145 0 0
190
191         # ****************************** Graphic3d_ArrayOfPoints ****************************** #
192         set IntermediateResult 1
193         puts "Graphic3d_ArrayOfPoints: TEST"
194         # 
195         # 1: verticies
196         #
197         generate_points 60 0 0   $colorY_R $colorY_G $colorY_B
198         eval vdrawparray pt01 points $vbo_enable $pts01 $pts02 $pts03 $pts04 $pts05 $pts06
199         #
200         # Final result
201         #
202         if { [ check_primitive pt01 $colorY_R $colorY_G $colorY_B ] == 0 } {
203                 puts "WARNING! definition by verticies failed"
204                 puts "WARNING! Graphic3d_ArrayOfPoints: FAILED"
205                 set status 1
206         } else {
207                 puts "Graphic3d_ArrayOfPoints: PASSED"
208         }
209
210
211         # ****************************** Graphic3d_ArrayOfSegments ****************************** #
212         set IntermediateResult 1
213         puts "Graphic3d_ArrayOfSegments: TEST"
214         #
215         # 1: verticies
216         #
217         generate_points 50 0 0   $colorY_R $colorY_G $colorY_B
218         eval vdrawparray seg01 segments $vbo_enable $pts02 $pts01 $pts01 $pts03 $pts03 $pts05 $pts05 $pts06 $pts06 $pts04 $pts04 $pts02
219         if { [ check_primitive seg01 $colorY_R $colorY_G $colorY_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies failed" }
220         #
221         # 2: edges
222         #
223         generate_points 40 0 0   $colorR_R $colorR_G $colorR_B
224         eval vdrawparray seg02 segments $vbo_enable $pts01 $pts02 $pts03 $pts04 $pts05 $pts06 e 1 e 2 e 2 e 4 e 4 e 6 e 6 e 5 e 5 e 3 e 3 e 1
225         if { [ check_primitive seg02 $colorR_R $colorR_G $colorR_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and edges failed" }
226         #
227         # Final result
228         #
229         if { $IntermediateResult == 0 } {
230                 puts "WARNING! Graphic3d_ArrayOfSegments: FAILED"
231                 set status 1
232         } else {
233                 puts "Graphic3d_ArrayOfSegments: PASSED"
234         }
235
236
237         # ****************************** Graphic3d_ArrayOfPolylines ****************************** #
238         set IntermediateResult 1
239         puts "Graphic3d_ArrayOfPolylines: TEST"
240         #
241         # 1: verticies
242         #
243         generate_points 30 0 0   $colorY_R $colorY_G $colorY_B
244         eval vdrawparray pline01 polylines $vbo_enable $pts02 $pts01 $pts03 $pts05 $pts06 $pts04 $pts02
245         if { [ check_primitive pline01 $colorY_R $colorY_G $colorY_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies failed" }
246         #
247         # 2: edges
248         #
249         generate_points 20 0 0   $colorR_R $colorR_G $colorR_B
250         eval vdrawparray pline02 polylines $vbo_enable $pts01 $pts02 $pts03 $pts04 $pts05 $pts06 e 2 e 4 e 6 e 5 e 3 e 1 e 2
251         if { [ check_primitive pline02 $colorR_R $colorR_G $colorR_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and edges failed" }
252         #
253         # 3: bounds
254         #
255         generate_points 10 0 0   $colorY_R $colorY_G $colorY_B
256         eval vdrawparray pline03 polylines $vbo_enable ( b 3 ( $pts02 $pts01 $pts03 )), ( b 4 ( $pts03 $pts05 $pts06 $pts04 )), ( b 2 ( $pts04 $pts02 ))
257         if { [ check_primitive pline03 $colorY_R $colorY_G $colorY_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and bounds failed" }
258         #
259         # 4: verticies, bounds and edges
260         #
261         generate_points 0 0 0   $colorR_R $colorR_G $colorR_B
262         eval vdrawparray pline04 polylines $vbo_enable $pts01 $pts02 $pts03 $pts04 $pts05 $pts06 ( b 4 ( e 2 e 1 e 3 e 5 )), ( b 4 ( e 5 e 6 e 4 e 2 ))
263         if { [ check_primitive pline04 $colorR_R $colorR_G $colorR_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies, bounds and edges failed" }
264         #
265         # Final result
266         #
267         if { $IntermediateResult == 0 } {
268                 puts "WARNING! Graphic3d_ArrayOfPolylines: FAILED"
269                 set status 1
270         } else {
271                 puts "Graphic3d_ArrayOfPolylines: PASSED"
272         }
273
274
275         # ****************************** Graphic3d_ArrayOfTriangles ****************************** #
276         set IntermediateResult 1
277         puts "Graphic3d_ArrayOfTriangles: TEST"
278         #
279         # 1: verticies 
280         #
281         generate_points   -10 0 0   $colorB_R $colorB_G $colorB_B
282         eval vdrawparray t01 triangles $vbo_enable ( $pts03 $pts02 $pts01 ) , ( $pts03 $pts04 $pts02 ) , ( $pts04 $pts03 $pts06 ) , ( $pts06 $pts03 $pts05 )
283         if { [ check_primitive t01 $colorB_R $colorB_G $colorB_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies failed" }
284         #
285         # 2: by edges
286         #
287         generate_points -20 0 0   $colorG_R $colorG_G $colorG_B
288         eval vdrawparray t02 triangles $vbo_enable $pts01 $pts02 $pts03 $pts04 $pts05 $pts06 e 6 e 3 e 5 e 6 e 4 e 3 e 1 e 3 e 2 e 2 e 3 e 4
289         if { [ check_primitive t02 $colorG_R $colorG_G $colorG_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and egdes failed" }
290         #
291         # Final result
292         #
293         if { $IntermediateResult == 0 } {
294                 puts "WARNING! Graphic3d_ArrayOfTriangles: FAILED"
295                 set status 1
296         } else {
297                 puts "Graphic3d_ArrayOfTriangles: PASSED"
298         }
299
300
301         # ****************************** Graphic3d_ArrayOfTriangleFans ****************************** #
302         set IntermediateResult 1
303         puts "Graphic3d_ArrayOfTriangleFans: TEST"
304         #
305         # 1: verticies
306         #
307         generate_points -30 0 0    $colorB_R $colorB_G $colorB_B
308         eval vdrawparray tfan01 trianglefans $vbo_enable ( $pts02 $pts01 $pts03 $pts04 )
309         eval vdrawparray tfan02 trianglefans $vbo_enable ( $pts03 $pts05 $pts06 $pts04 )
310         if { [ check_primitive tfan01 $colorB_R $colorB_G $colorB_B tfan02 ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies failed" }
311         #
312         # 2: bounds and verticies
313         #
314         generate_points -40 0 0   $colorG_R $colorG_G $colorG_B
315         eval vdrawparray tfan03 trianglefans $vbo_enable ( b 4 ( $pts02 $pts01 $pts03 $pts04 )), ( b 4 ( $pts03 $pts05 $pts06 $pts04 ))
316         if { [ check_primitive tfan03 $colorG_R $colorG_G $colorG_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and bounds failed" }
317         #
318         # Final result
319         #
320         if { $IntermediateResult == 0 } {
321                 puts "WARNING! Graphic3d_ArrayOfTriangleFans: FAILED"
322                 set status 1
323         } else {
324                 puts "Graphic3d_ArrayOfTriangleFans: PASSED"
325         }
326
327
328         # ****************************** Graphic3d_ArrayOfTriangleStrips ****************************** #
329         set IntermediateResult 1
330         puts "Graphic3d_ArrayOfTriangleStrips: TEST"
331         #
332         # 1: verticies
333         #
334         generate_points -50 0 0    $colorB_R $colorB_G $colorB_B
335         eval vdrawparray tstrip01 trianglestrips $vbo_enable ( $pts06 $pts04 $pts03 $pts02 $pts01 )
336         eval vdrawparray tstrip02 trianglestrips $vbo_enable ( $pts03 $pts05 $pts06 )
337         if { [ check_primitive tstrip01 $colorB_R $colorB_G $colorB_B tstrip02 ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies failed" }
338         #
339         # 2: bounds and verticies
340         #
341         generate_points -60 0 0    $colorG_R $colorG_G $colorG_B
342         eval vdrawparray tstrip03 trianglestrips $vbo_enable ( b 5 ( $pts06 $pts04 $pts03 $pts02 $pts01 )) , ( b 3 ( $pts03 $pts05 $pts06 ))
343         if { [ check_primitive tstrip03 $colorG_R $colorG_G $colorG_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and bounds failed" }
344         #
345         # Final result
346         #
347         if { $IntermediateResult == 0 } {
348                 puts "WARNING! Graphic3d_ArrayOfTriangleStrips: FAILED"
349                 set status 1
350         } else {
351                 puts "Graphic3d_ArrayOfTriangleStrips: PASSED"
352         }
353
354
355         # ****************************** Graphic3d_ArrayOfQuadrangles ****************************** #
356         set IntermediateResult 1
357         puts "Graphic3d_ArrayOfQuadrangles: TEST"
358         #
359         # 1: verticies
360         #
361         generate_points -70 0 0    $colorB_R $colorB_G $colorB_B
362         eval vdrawparray q01 quads $vbo_enable ( $pts01 $pts03 $pts04 $pts02 )
363         eval vdrawparray q02 quads $vbo_enable ( $pts03 $pts05 $pts06 $pts04 )
364         if { [ check_primitive q01 $colorB_R $colorB_G $colorB_B q02 ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies failed" }
365         #
366         # 2: verticies and edges
367         #
368         generate_points -80 0 0    $colorG_R $colorG_G $colorG_B
369         eval vdrawparray q03 quads $vbo_enable $pts01 $pts02 $pts03 $pts04 $pts05 $pts06 e 1 e 3 e 4 e 2 e 3 e 5 e 6 e 4
370         if { [ check_primitive q03 $colorG_R $colorG_G $colorG_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and edges failed" }
371         #
372         # Final result
373         #
374         if { $IntermediateResult == 0 } {
375                 puts "WARNING! Graphic3d_ArrayOfQuadrangles: FAILED"
376                 set status 1
377         } else {
378                 puts "Graphic3d_ArrayOfQuadrangles: PASSED"
379         }
380
381
382         # ****************************** Graphic3d_ArrayOfQuadrangleStrips ****************************** #
383         set IntermediateResult 1
384         puts "Graphic3d_ArrayOfQuadrangleStrips: TEST"
385         #
386         # 1: verticies
387         #
388         generate_points -90 0 0    $colorB_R $colorB_G $colorB_B
389         eval vdrawparray qstrips01 quadstrips $vbo_enable ( $pts02 $pts01 $pts04 $pts03 $pts06 $pts05 )
390         if { [ check_primitive qstrips01 $colorB_R $colorB_G $colorB_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies failed" }
391         #
392         # 2: verticies and edges
393         #
394         generate_points -100 0 0    $colorG_R $colorG_G $colorG_B
395         eval vdrawparray qstrips02 quadstrips $vbo_enable ( b 4 ( $pts02 $pts01 $pts04 $pts03 )) , ( b 4 ( $pts04 $pts03 $pts06 $pts05 ))
396         if { [ check_primitive qstrips02 $colorG_R $colorG_G $colorG_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and edges failed" }
397         #
398         # Final result
399         #
400         if { $IntermediateResult == 0 } {
401                 puts "WARNING! Graphic3d_ArrayOfQuadrangleStrips: FAILED"
402                 set status 1
403         } else {
404                 puts "Graphic3d_ArrayOfQuadrangleStrips: PASSED"
405         }
406
407
408         # ****************************** Graphic3d_ArrayOfPolygons ****************************** #
409         set IntermediateResult 1
410         puts "Graphic3d_ArrayOfPolygons: TEST"
411         #
412         # 1: verticies
413         #
414         generate_points -110 0 0    $colorB_R $colorB_G $colorB_B
415         eval vdrawparray poly01 polygons $vbo_enable ( $pts04 $pts02 $pts01 $pts03 $pts05 $pts06 )
416         if { [ check_primitive poly01 $colorB_R $colorB_G $colorB_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies failed" }
417         #
418         # 2: verticies and bounds
419         #
420         generate_points -120 0 0   $colorG_R $colorG_G $colorG_B
421         eval vdrawparray poly02 polygons $vbo_enable ( b 5 ( $pts04 $pts02 $pts01 $pts03 $pts06 )) , ( b 3 ( $pts06 $pts03 $pts05 ))
422         if { [ check_primitive poly02 $colorG_R $colorG_G $colorG_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and bounds failed" }
423         #
424         # 3: verticies and edges
425         #
426         generate_points -130 0 0   $colorB_R $colorB_G $colorB_B
427         eval vdrawparray poly03 polygons $vbo_enable $pts01 $pts02 $pts03 $pts04 $pts05 $pts06 e 4 e 2 e 1 e 3 e 5 e 6
428         if { [ check_primitive poly03 $colorB_R $colorB_G $colorB_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies and edges failed" }
429         #
430         # 4: vertices, bounds and edges
431         #
432         generate_points -140 0 0   $colorG_R $colorG_G $colorG_B
433         eval vdrawparray poly04 polygons $vbo_enable $pts01 $pts02 $pts03 $pts04 $pts05 $pts06 ( b 5 ( e 4 e 2 e 1 e 3 e 6 )), ( b 3 ( e 6 e 3 e 5 ))
434         if { [ check_primitive poly04 $colorG_R $colorG_G $colorG_B ] == 0 } { set IntermediateResult 0; puts "WARNING! definition by verticies, bounds and edges failed" }
435         #
436         # Final result
437         #
438         if { $IntermediateResult == 0 } {
439                 puts "WARNING! Graphic3d_ArrayOfPolygons: FAILED"
440                 set status 1
441         } else {
442                 puts "Graphic3d_ArrayOfPolygons: PASSED"
443         }
444         
445         vtop
446         vfit
447         
448         # dump resulted image
449         if { $vbo_enable == 0 } { vfeedback; vdump $ImageName1 }
450         if { $vbo_enable == 1 } { vfeedback; vdump $ImageName2 }
451
452 }
453
454 # delete internal procedures
455 rename generate_points ""
456 rename check_primitive ""
457
458 if { ${status} == 0 } {
459         puts "BUG OK ${BUGNUMBER}"
460 } else {
461         puts "BUG FAULTY ${BUGNUMBER}"
462 }
463
464 set only_screen 1
465