0023580: [Regression] BRepMesh 6.5.4 produces visually incorrect view
[occt.git] / tests / bugs / mesh / end
1 # Get name of shape
2
3 if { [string compare ${TheFileName} ""] != 0 } {
4     set is_brep [regexp "\.brep" $TheFileName]
5     if {$is_brep == 0} {
6         set is_brep [regexp "\.rle" $TheFileName]
7     }
8     if {$is_brep == 1} {
9         puts [brestore [locate_data_file $TheFileName] res]
10     } else {
11         if { [array get Draw_Groups "DE: STEP"] == "" } {
12             pload XDE
13         }
14         
15         stepread [locate_data_file ${TheFileName}] a *
16         tpcompound res
17     }
18 }
19
20 puts [checkshape res]
21
22 tclean res
23
24 if { [string compare $command "shading"] == 0 } {
25     vinit
26     vdisplay res
27     vsetdispmode res 1
28     if { [info exists view_mode] } {
29         pload QAcommands
30         QASetViewCharac ${scale} ${center_X} ${center_Y} ${proj_X} ${proj_Y} ${proj_Z} ${up_X} ${up_Y} ${up_Z} ${at_X} ${at_Y} ${at_Z}
31     }
32     vfit
33 }
34
35 if { [string compare $command "incmesh"] == 0 } {
36     set os "ALL"
37     if {[array get env os_type] != ""} {
38         set os $env(os_type)
39     }
40     if { $parallel != 1 || [info exists count_parallel] == 0 } {
41        set count_parallel 1
42     }
43     for {set i 1} {$i <= $count_parallel} {incr i} {
44         tclean res
45         puts "i = $i"
46         incmesh res ${Deflection} ${parallel}
47     }
48 }
49
50 if { [string compare $command "mesh"] == 0 } {
51     set ResultList [mesh res_mesh res ${Deflection}]
52 }
53
54 # Collect TODO for area
55 if { [string compare $bug_area ""] != 0 } {
56 # The difference between square of geometry surface and square of mesh triangles should be less rel_tol value.
57 # If rel_tol is 100 we suppose the mesh con not be created.
58     if { $rel_tol == 100 } {
59         puts "TODO $bug_area All:^\\s*Error  : Meshing algo cannot create mesh.\\s*$"
60     } else {
61         puts "TODO $bug_area All:^\\s*Error   : area by triangles differs from true area by \[-.0-9\]+ %\\s*$"
62     }
63 }
64
65 # Collect TODO for number of triangles without mesh
66 if { [string compare $bug_withouttri ""] != 0 } {
67 # It may be different for different OS
68     foreach os_withouttri [array names nbwithouttri] {
69         if { $nbwithouttri($os_withouttri) != 0 } { 
70             puts "TODO $bug_withouttri $os_withouttri:^\\s*Error: Faces without triangulation: $nbwithouttri($os_withouttri)\\b\\s*"
71         }
72     }
73 }
74
75 # Collect TODO for number of free links
76 if { [string compare $bug_freelinks ""] != 0 } {
77 # It may be different for different OS
78     foreach os_freelinks [array names nbfree] {
79         if { $nbfree($os_freelinks) != 0 } { 
80             puts "TODO $bug_freelinks $os_freelinks:^\\s*Error: Free links: $nbfree($os_freelinks)\\b\\s*"
81         }
82     }
83 }
84
85 # Collect TODO for number of cross faces
86 if { [string compare $bug_cross ""] != 0 } {
87 # It may be different for different OS
88     foreach os_cross [array names nbcross] {
89         if { $nbcross($os_cross) != 0 } { 
90             puts "TODO $bug_cross $os_cross:^\\s*Error: Cross face errors: $nbcross($os_cross)\\b\\s*"
91         }
92     }
93 }
94
95 # Collect TODO for number of async edges
96 if { [string compare $bug_async ""] != 0 } {
97 # It may be different for different OS
98     foreach os_async [array names nbasync] {
99         if { $nbasync($os_async) != 0 } { 
100             puts "TODO $bug_async $os_async:^\\s*Error: Async edges: $nbasync($os_async)\\b\\s*"
101         }
102     }
103 }
104
105 # Collect TODO for number of free nodes
106 if { [string compare $bug_freenodes ""] != 0 } {
107 # It may be different for different OS
108     foreach os_freenodes [array names nbfreenodes] {
109         if { $nbfreenodes($os_freenodes) != 0 } { 
110             puts "TODO $bug_freenodes $os_freenodes:^\\s*Error: Free nodes: $nbfreenodes($os_freenodes)\\b\\s*"
111         }
112     }
113 }
114
115 # Number of triangles
116 set tri 0
117 # Number of nodes
118 set nod 0
119 # Deflection
120 set def 0
121
122 # Collect number of triangles, number ofof nodes and deflection.
123 if { [string compare $command "mesh"] != 0 } {
124     set full [trinfo res]
125     regexp "(\[0-9\]+) +triangles.*\[^0-9]\(\[0-9\]+) +nodes.*deflection +(\[0-9\]|\.+)" $full reg_out tri nod def
126 } else {
127     set full [split $ResultList "()"]
128     set tri [lindex [lindex $full 2] 0]
129     set lin [lindex [lindex $full 4] 0]
130     set nod [lindex [lindex $full 6] 0]
131 }
132
133 if { $tri == 0 || $nod == 0 } {                                                                     
134     puts " "
135     puts "Error  : Meshing algo cannot create mesh."    
136 }             
137
138 puts " "
139 puts "XML property: triangles $tri"
140 puts "XML property: nodes $nod"
141 puts " "
142
143 # Check if area of triangles is valid
144 proc CheckTriArea {shape {eps 0}} {
145   upvar #0 $shape a
146   set area [triarea a $eps]
147   set t_area [lindex $area 0]
148   set g_area [expr abs([lindex $area 1])]
149   puts "area by triangles: $t_area"
150   puts "area by geometry:  $g_area"
151   expr ($t_area - $g_area) / $g_area * 100
152 }
153
154 puts "\nChecking triangulation area (triarea command)..."
155 set rel_err [expr abs([CheckTriArea res $area_eps])]
156 if { $rel_err > $rel_tol } {
157     puts "Error   : area by triangles differs from true area by $rel_err %"
158 } else {
159     if { $rel_tol > 1 && $rel_tol < 100 } {
160         puts "Error: Improvement: The current area difference is $rel_err instead of $rel_tol"
161     }
162 }
163
164 # Check if topology of mesh is valid
165 puts "\nChecking mesh topology (tricheck command)..."
166 set l [tricheck res]
167 if {$l != ""} {
168     puts $l
169     set withouttri [regsub -all "face \[0-9\]+ has no triangulation" $l "FOUND" ll]
170     if { $withouttri != 0 } {
171         puts "Error: Faces without triangulation: $withouttri"
172     }
173     if { [regexp "Free_links +(\[0-9\]+) +Cross_face_errors +(\[0-9\]+) +Async_edges +(\[0-9\]+) +Free_nodes +(\[0-9\]+)" $l full freelinks crossfaces asyncedges freenodes] } {
174         if { $freelinks != 0 } {
175             puts "Error: Free links: $freelinks"
176         }
177         if { $crossfaces != 0 } {
178             puts "Error: Cross face errors: $crossfaces"
179         }
180         if { $asyncedges != 0 } {
181             puts "Error: Async edges: $asyncedges"
182         }
183         if { $freenodes != 0 } {
184             puts "Error: Free nodes: $freenodes"
185         }
186     }
187 }
188
189 if { [info exists imagedir] == 0 } {
190    set imagedir .
191 }
192 if { [info exists test_image ] == 0 } {
193    set test_image photo
194 }
195
196 if { [string compare $command "shading"] == 0 } {
197     vdump $imagedir/${test_image}.png
198 } else {
199     isos 0
200     smallview
201     donly res
202     fit
203     triangles res
204     xwd $imagedir/${test_image}.png
205 }
206
207 puts ""
208 puts "TEST COMPLETED" 
209 puts ""