0027316: Draw Harness - access violation on passing non-existing shape to XAddShape
[occt.git] / tests / bugs / step / bug27316
1 puts "TODO OCC27316 Windows: OSD_Exception_ACCESS_VIOLATION"
2 puts "TODO OCC27316 Linux: segmentation violation"
3 puts "TODO OCC27316 ALL:TEST INCOMPLETE"
4
5 puts "========"
6 puts "OCC27316"
7 puts "========"
8 puts ""
9 ##########################
10 # exception when XAddShape
11 ##########################
12
13 # model of rib for Buran wing. Drawing taken from www.buran.ru 
14 # Create parameters
15 set B1  140.    ;# half chord 1
16 set B2 60.    ;#  half chord 2
17 set B3 50.    ;#  breadth of upper part 
18 set L 1000.;   # wing length
19 set L_edge [expr "sqrt($L*$L+($B1-$B2)*($B1-$B2))"]     ;# wing edge length
20 set step 135.     ;# stiffener step
21 set step1 95.     ;# 1 stiffener step
22 set B_st 30.     ;# stiffener flange breadth
23 set B_st1 50.     ;# stiffener flange  breadth with inclined part
24 set H_st 30.     ;# stiffener flange height
25 set t_st 1.5     ;# stiffener flange web thickness
26 set offset_fl 10.0     ;# stiffener side flange 1 offset
27 set t_fl 2.0     ;# stiffener side flange 1 thickness
28 set B_fl1 20.0     ;# stiffener side flange 1 width
29 set B_fl2 16.0     ;# stiffener side flange 2 width
30 set angle_cos [expr "$L/$L_edge"] ;# cos of angle between axis x and wing edge
31 set angle_sin [expr "($B1-$B2)/$L_edge"] ;# sin of angle between axis x and wing edge
32 set rad_rivet 1.;# radius of rivet
33 set step_rivet 20.;# step between  rivets
34 set offset_rivet 5.;# offset between  rivets and stringer
35 set rad_cut 45. ; # radius of big cut in middle plate
36 set rad_cut1 35. ; # radius of middle cut in middle plate
37 set rad_cut2 25. ; # radius of small cut in middle plate
38 set t_ang 1.;  # angle bracket thickness
39 set h_ang 18.;  # angle bracket length
40
41
42 # Create  edge of upper stiffener flange
43 vertex r_1 0. $B1 0.;
44 set i 1; 
45 set NN 8
46 while {$i < $NN} { 
47   vertex r_[expr "($i-1)*4+2"] [expr "(($i-1)*$step+$step1-$B_st1/2)*$angle_cos"] [expr "$B1-(($i-1)*$step+$step1-$B_st1/2)*$angle_sin"]  0.;
48   vertex r_[expr "($i-1)*4+3"] [expr "(($i-1)*$step+$step1-$B_st/2)*$angle_cos+$H_st*$angle_sin"] [expr "$B1-(($i-1)*$step+$step1-$B_st/2)*$angle_sin-$H_st*$angle_cos"] 0.;
49   vertex r_[expr "($i-1)*4+4"] [expr "(($i-1)*$step+$step1+$B_st/2)*$angle_cos+$H_st*$angle_sin"] [expr "$B1-(($i-1)*$step+$step1+$B_st/2)*$angle_sin-$H_st*$angle_cos"] 0.;
50   vertex r_[expr "($i-1)*4+5"] [expr "(($i-1)*$step+$step1+$B_st1/2)*$angle_cos"] [expr "$B1-(($i-1)*$step+$step1+$B_st1/2)*$angle_sin"] 0.;
51   vertex r_[expr "($i-1)*4+6"] [expr "($i*$step+$step1+$B_st1/2)*$angle_cos"] [expr "$B1-($i*$step+$step1+$B_st1/2)*$angle_sin"]  0.;
52   edge e_[expr "($i-1)*4+1"] r_[expr "($i-1)*4+1"] r_[expr "($i-1)*4+2"];
53   edge e_[expr "($i-1)*4+2"] r_[expr "($i-1)*4+2"] r_[expr "($i-1)*4+3"];
54   edge e_[expr "($i-1)*4+3"] r_[expr "($i-1)*4+3"] r_[expr "($i-1)*4+4"];
55   fillet2d fil1_$i e_[expr "($i-1)*4+2"] e_[expr "($i-1)*4+3"] 3.
56   edge e_[expr "($i-1)*4+4"] r_[expr "($i-1)*4+4"] r_[expr "($i-1)*4+5"];
57   fillet2d fil2_$i e_[expr "($i-1)*4+3"] e_[expr "($i-1)*4+4"] 3.
58   wire w_$i e_[expr "($i-1)*4+1"] e_[expr "($i-1)*4+2"] fil1_$i e_[expr "($i-1)*4+3"] fil2_$i e_[expr "($i-1)*4+4"];   
59   incr i;
60 }
61 vertex r_last $L $B2 0.;
62 edge e_last r_[expr "($i-2)*4+5"] r_last;
63 vertex vu_1 0. [expr "$B1-$B3"]  0.;
64 vertex vu_2 $L [expr "$B2-$B3"]  0.;
65 edge e_v1 vu_1 r_1 ;
66 edge e_v2 r_last vu_2;
67 edge e_v3 vu_2 vu_1;
68 wire w_upper  e_v1 w_1 w_2 w_3 w_4 w_5 w_6 w_7 e_last e_v2 e_v3;
69
70 mkplane f_upper w_upper;
71 #Create holes for rivets
72 circle c1 $offset_rivet [expr "$B1-$B3+$offset_rivet"]  0. $rad_rivet;
73 mkedge e_hole1 c1;
74 wire w_hole1 e_hole1;
75 mkplane f_hole1 w_hole1;
76 compound f_hole1 holes_upper;
77 set i 1; 
78 set NNN [expr "int($L_edge/$step_rivet)"]
79 while {$i < $NNN} {   
80   copy f_hole1 f_hole_$i
81   ttranslate f_hole_$i [expr "$i*$step_rivet*$angle_cos"] [expr "-($i*$step_rivet*$angle_sin)"]   0. ;
82   add f_hole_$i holes_upper;
83   incr i;
84 }
85 bcut f_upper_holes_1 f_upper holes_upper;
86 prism fwall_upper f_upper_holes_1 0 0 $t_st;
87
88 #Create low side flange 1
89 #Create wire and face for side flange
90 vertex vf_1 0. [expr "$B1-$B3+$offset_fl"]  0.;
91 vertex vf_2 0. [expr "$B1-$B3+$offset_fl+$t_fl"] 0. ;
92 vertex vf_3 0. [expr "$B1-$B3+$offset_fl"]  $t_st;
93 vertex vf_4 0. [expr "$B1-$B3+$offset_fl+$t_fl"]  $t_st;
94 vertex vf_5 0. [expr "$B1-$B3+$offset_fl"]  $B_fl1;
95 vertex vf_6 0. [expr "$B1-$B3+$offset_fl+$t_fl"]  $B_fl1;
96 vertex vf_7 0. [expr "$B1-$B3+$offset_fl-$t_st"]  $t_st;
97 vertex vf_8 0. [expr "$B1-$B3+$offset_fl+$t_fl+$t_st"] $t_st; 
98 edge side_fl_1 vf_1 vf_2;
99 edge side_fl_2 vf_2 vf_8;
100 edge side_fl_3 vf_8 vf_4;
101 edge side_fl_4 vf_4 vf_6;
102 edge side_fl_5 vf_6 vf_5;
103 edge side_fl_6 vf_5 vf_3;
104 edge side_fl_7 vf_3 vf_7;
105 edge side_fl_8 vf_7 vf_1;
106 fillet2d side_f1 side_fl_3 side_fl_4 1.5;
107 fillet2d side_f2 side_fl_6 side_fl_7 1.5;
108 wire w_side_fl side_fl_1 side_fl_2 side_fl_3 side_f1 side_fl_4 side_fl_5 side_fl_6 side_f2 side_fl_7 side_fl_8;
109 mkplane f_side_fl w_side_fl;
110 prism  v_side_fl f_side_fl [expr "$L_edge*$angle_cos"] [expr "-$L_edge*$angle_sin"] 0. ;
111 bfuse f_upper  v_side_fl fwall_upper
112
113 #Create upper side flange 2
114 #Create wire and face for side flange 2
115 vertex vfs_1  0. [expr "$B1+$t_st"] [expr "$B_fl2-$t_st/2."];
116 vertex vfs_2  0. [expr "$B1+$t_st"] [expr "-$B_fl2+$t_st/2."];
117 vertex vfs_3  0. $B1 [expr "$B_fl2-$t_st/2."];
118 vertex vfs_4  0. $B1 [expr "-$B_fl2+$t_st/2."];
119 vertex vfs_5  0. [expr "$B1-3.*$t_st"] 0.;
120 vertex vfs_6  0. [expr "$B1-3.*$t_st"] $t_st;
121 vertex vfs_7  0. $B1 $t_st;
122 edge side_fl2_1 vfs_1 vfs_2;
123 edge side_fl2_2 vfs_2 vfs_4;
124 edge side_fl2_3 vfs_4 r_1;
125 edge side_fl2_4 r_1 vfs_5 ;
126 #fillet2d side_f12_1 side_fl2_3 side_fl2_4 1.5;
127 edge side_fl2_5 vfs_5 vfs_6;
128 edge side_fl2_6 vfs_6 vfs_7;
129 edge side_fl2_7 vfs_7 vfs_3;
130 #fillet2d side_f12_2 side_fl2_6 side_fl2_7 1.5;
131 edge side_fl2_8 vfs_3 vfs_1;
132 #wire w_side_fl2 side_fl2_1 side_fl2_2 side_fl2_3 side_f12_1 side_fl2_4 side_fl2_5 side_fl2_6 side_f12_2 side_fl2_7 side_fl2_8;
133 wire w_side_fl2 side_fl2_1 side_fl2_2 side_fl2_3  side_fl2_4 side_fl2_5 side_fl2_6 side_fl2_7 side_fl2_8;
134 mkplane f_side_fl2 w_side_fl2;
135
136 #Create first side flange 2
137 prism  v_side_fl2 f_side_fl2 [expr "($step1-$B_st1/2)*$angle_cos"] [expr "-($step1-$B_st1/2)*$angle_sin"]   0. ;
138 bfuse f_upper_1  v_side_fl2 f_upper;
139
140 #Create next side flange 2
141 prism  v_side_fl3 f_side_fl2 [expr "($step-$B_st1)*$angle_cos"] [expr "-($step-$B_st1)*$angle_sin"]   0. ;
142 set i 1; 
143 set NN 7
144 while {$i < $NN} {   
145   copy v_side_fl3 v_side_fl_$i
146   ttranslate v_side_fl_$i [expr "(($i-1)*$step+$step1+$B_st1/2)*$angle_cos"] [expr "-(($i-1)*$step+$step1+$B_st1/2)*$angle_sin"]   0. ;
147   bfuse f_upper_[expr "$i+1"]  v_side_fl_$i f_upper_[expr "$i"] ;  
148   incr i;
149 }
150
151 #Create last side flange 2
152 prism  v_side_fl4 f_side_fl2 [expr "($L_edge-6*$step-$step1-$B_st1/2)*$angle_cos"] [expr "-($L_edge-6*$step-$step-$B_st1/2)*$angle_sin"]   0. ;
153 ttranslate v_side_fl4 [expr "(6*$step+$step1+$B_st1/2)*$angle_cos"] [expr "-(6*$step+$step1+$B_st1/2)*$angle_sin"]   0. ;
154 bfuse f_uppern f_upper_7 v_side_fl4 ; 
155 unifysamedom f_upper1 f_uppern;
156
157 restore [locate_data_file bug27316_edges_fillet.brep] edges_fillet
158
159 bclearobjects; 
160 bcleartools;
161 baddobjects f_upper1 edges_fillet;
162 bfillds;
163 bbuild rgf;
164 explode rgf so;
165 copy rgf_1 v_upper
166
167 set edges [explode edges_fillet e];
168 set nbe [llength $edges]
169
170 savehistory gf_hist
171 for {set i 1} {$i <= $nbe} {incr i} {
172   modified em gf_hist edges_fillet_$i;
173   blend v_upper v_upper 1.5 em;
174 }
175
176 #vdisplay v_upper;
177 #Create  symmetrical part
178 copy v_upper v_lower;
179 tmirror v_lower 0. 0. 0. 0. 1. 0.;
180
181 #Create middle plate
182 #Create wire and face for middle plate
183 vertex vfl_1 0. [expr "-($B1-$B3+$offset_fl)"]  0.;
184 vertex vfl_2 $L [expr "($B2-$B3+$offset_fl)"]  0.;
185 vertex vfl_3 $L [expr "-($B2-$B3+$offset_fl)"]  0.;
186 edge pl_1 vf_1 vfl_1;
187 edge pl_2 vfl_1 vfl_3;
188 edge pl_3 vfl_3 vfl_2;
189 edge pl_4 vfl_2 vf_1;
190 wire w_plate pl_1 pl_2 pl_3 pl_4;
191 mkplane f_plate w_plate;
192
193 #Cut holes
194 #Create upper row of holes
195 bcut f_plate_holes f_plate holes_upper;
196
197 #Create lower row of holes
198 copy holes_upper holes_lower;
199 tmirror holes_lower 0. 0. 0. 0. 1. 0.
200 bcut plate_holes_ul f_plate_holes holes_lower;
201 #Create 1 row of holes
202 compound  holes_1;
203 set i 1; 
204 set NN1 [expr "int(2*($B1-$B3+$offset_rivet)/$step_rivet)"]
205 while {$i < $NN1} {   
206   copy f_hole1 f_hole1_$i
207   ttranslate f_hole1_$i 0. [expr "-($i*$step_rivet)"]   0. ;
208   add f_hole1_$i holes_1;
209   incr i;
210 }
211 bcut  plate_holes_1 plate_holes_ul holes_1;
212
213 #Create next rows of holes
214 set Nrow 6; #number of vertical rows
215 set j 1; 
216 while {$j < $Nrow} {
217    copy f_hole1 f_hole_$j;
218    ttranslate f_hole_$j [expr "7*$step_rivet*$j*$angle_cos"] [expr "-(7*$step_rivet*$j)*$angle_sin-$step_rivet"]  0. ;
219    compound f_hole_$j holes_$j;
220    set i 1; 
221    set NN2 [expr "$NN1-$j-1"];
222    while {$i < $NN2} {   
223       copy f_hole_$j f_holev_$i
224       ttranslate f_holev_$i 0. [expr "-($i*$step_rivet)"] 0. ;
225       add f_holev_$i holes_$j;
226       incr i;
227       }
228    bcut  plate_holes_[expr "$j+1"] plate_holes_$j holes_$j;
229    incr j;
230 }
231
232 #Create holes for cuts
233 #Create cut1
234 circle c2 [expr "$offset_rivet+3.5*$step_rivet*$angle_cos"] 0.  0. $rad_cut;
235 mkedge e_hole2 c2;
236 wire w_hole2 e_hole2;
237 mkplane f_big_hole w_hole2;
238 bcut  plate_holes_pl1 plate_holes_6 f_big_hole;
239
240 #Create cut2
241 copy f_big_hole f_big_hole1
242 ttranslate f_big_hole1 [expr "7.*$step_rivet*$angle_cos"] 0. 0.;
243 bcut  plate_holes_pl2 plate_holes_pl1 f_big_hole1;
244
245 #Create cut3
246 copy f_big_hole1 f_big_hole2
247 ttranslate f_big_hole2 [expr "7.*$step_rivet*$angle_cos"] 0. 0.;
248 bcut  plate_holes_pl3 plate_holes_pl2 f_big_hole2;
249
250 #Create cut4
251 circle c3 [expr "$offset_rivet+24.5*$step_rivet*$angle_cos"] 0.  0. $rad_cut1;
252 mkedge e_hole3 c3;
253 wire w_hole3 e_hole3;
254 mkplane f_big_hole3 w_hole3;
255 bcut  plate_holes_pl4 plate_holes_pl3 f_big_hole3;
256
257 #Create cut5
258 circle c4 [expr "$offset_rivet+31.5*$step_rivet*$angle_cos"] 0.  0. $rad_cut2;
259 mkedge e_hole4 c4;
260 wire w_hole4 e_hole4;
261 mkplane f_big_hole4 w_hole4;
262 bcut  plate_holes_pl5 plate_holes_pl4 f_big_hole4;
263 prism  v_plate  plate_holes_pl5  0. 0. [expr "-$t_st"];
264
265 #Create reinforcement of cut1
266 circle c5 [expr "$offset_rivet+3.5*$step_rivet*$angle_cos+$rad_cut"] 0. [expr "3*$t_st"]  0. 1. 0. 3*$t_st;
267 mkedge en5 c5 [expr "3.141"] [expr "5*3.141/4"];
268 circle c6 [expr "$offset_rivet+3.5*$step_rivet*$angle_cos+$rad_cut"] 0. [expr "3*$t_st"]  0. 1. 0. 4*$t_st;
269 mkedge en6 c6 [expr "3.141"] [expr "5*3.141/4"];
270 explode en5 v;
271 explode en6 v;
272 vertex p1 [expr "$offset_rivet+3.5*$step_rivet*$angle_cos+$rad_cut+$t_st"] 0.  0. ;
273 vertex p2 [expr "$offset_rivet+3.5*$step_rivet*$angle_cos+$rad_cut+$t_st"] 0.  [expr "-$t_st"] ;
274 edge en1 en6_2 en5_2;
275 edge en2 en5_1 p1;
276 edge en3  p1 p2;
277 edge en4  p2 en6_1;
278 wire w_en en1 en5 en2 en3 en4 en6;
279 mkplane f_en w_en;
280 revol rev_en1 f_en [expr "$offset_rivet+3.5*$step_rivet*$angle_cos"] 0.  0. 0.  0. 1. 360.
281 bfuse v_plate1 v_plate rev_en1;
282
283 #Create reinforcement of cut2
284 copy rev_en1 rev_en2;
285 ttranslate rev_en2 [expr "7.*$step_rivet*$angle_cos"] 0. 0.;
286 bfuse v_plate2 v_plate1 rev_en2;
287
288 #Create reinforcement of cut3
289 copy rev_en2 rev_en3;
290 ttranslate rev_en3 [expr "7.*$step_rivet*$angle_cos"] 0. 0.;
291 bfuse v_plate3 v_plate2 rev_en3;
292
293 #Create reinforcement of cut4
294 circle c7 [expr "$offset_rivet+24.5*$step_rivet*$angle_cos+$rad_cut1"] 0. [expr "3*$t_st"]  0. 1. 0. 3*$t_st;
295 mkedge en7 c7 [expr "3.141"] [expr "5*3.141/4"];
296 circle c8 [expr "$offset_rivet+24.5*$step_rivet*$angle_cos+$rad_cut1"] 0. [expr "3*$t_st"]  0. 1. 0. 4*$t_st;
297 mkedge en8 c8 [expr "3.141"] [expr "5*3.141/4"];
298 explode en7 v;
299 explode en8 v;
300 vertex p3 [expr "$offset_rivet+24.5*$step_rivet*$angle_cos+$rad_cut1+$t_st"] 0.  0. ;
301 vertex p4 [expr "$offset_rivet+24.5*$step_rivet*$angle_cos+$rad_cut1+$t_st"] 0.  [expr "-$t_st"] ;
302 edge en9 en8_2 en7_2;
303 edge en10 en7_1 p3;
304 edge en11  p3 p4;
305 edge en12  p4 en8_1;
306 wire w_en1 en7 en10 en11 en12 en8 en9  ;
307 mkplane f_en1 w_en1;
308 revol rev_en4 f_en1 [expr "$offset_rivet+24.5*$step_rivet*$angle_cos"] 0.  0. 0.  0. 1. 360.
309 bfuse v_plate4 v_plate3 rev_en4;
310
311 #Create reinforcement of cut5
312 circle c9 [expr "$offset_rivet+31.5*$step_rivet*$angle_cos+$rad_cut2"] 0. [expr "3*$t_st"]  0. 1. 0. 3*$t_st;
313 mkedge en13 c9 [expr "3.141"] [expr "5*3.141/4"];
314 circle c10 [expr "$offset_rivet+31.5*$step_rivet*$angle_cos+$rad_cut2"] 0. [expr "3*$t_st"]  0. 1. 0. 4*$t_st;
315 mkedge en14 c10 [expr "3.141"] [expr "5*3.141/4"];
316 explode en13 v;
317 explode en14 v;
318 vertex p5 [expr "$offset_rivet+31.5*$step_rivet*$angle_cos+$rad_cut2+$t_st"] 0.  0. ;
319 vertex p6 [expr "$offset_rivet+31.5*$step_rivet*$angle_cos+$rad_cut2+$t_st"] 0.  [expr "-$t_st"] ;
320 edge en15 en14_2 en13_2;
321 edge en16 en13_1 p5;
322 edge en17  p5 p6;
323 edge en18  p6 en14_1;
324 wire w_en2 en13 en16 en17 en18 en14 en15  ;
325 mkplane f_en2 w_en2;
326 revol rev_en5 f_en2 [expr "$offset_rivet+31.5*$step_rivet*$angle_cos"] 0.  0. 0.  0. 1. 360.
327 bfuse v_plate5 v_plate4 rev_en5;
328
329 #Create pattern rivet 1 for 2 plates
330 circle c11 $offset_rivet [expr "$B1-$B3+$offset_rivet"]  [expr " 0.3*$t_st"]  1. 0. 0. [expr "2.5* $rad_rivet"];
331 mkedge e_riv c11 [expr "-acos(0.7*$t_st/2.5*$rad_rivet)"] 0;
332 explode e_riv v;
333 copy e_riv e_riv1;
334 tmirror e_riv1  0. 0. 0. 0. 0. 1.;
335 reverse e_riv1;
336 explode e_riv1 v;
337 vertex riv1 $offset_rivet [expr "$B1-$B3+$offset_rivet+$rad_rivet"] $t_st;
338 vertex riv2 $offset_rivet [expr "$B1-$B3+$offset_rivet+$rad_rivet"] [expr " -$t_st"];
339 edge riv_e1 riv2 riv1;
340 edge riv_e2 e_riv_2 e_riv1_2;
341 edge riv_e3 e_riv1_1 riv2 ;
342 edge riv_e4 riv1 e_riv_1 ;
343 #fillet2d riv_fil1 riv_e1 riv_e3 0.25;
344 #fillet2d riv_fil2 riv_e2 riv_e1 0.25;
345 wire w_riv e_riv riv_e2 e_riv1 riv_e3 riv_e1 riv_e4;
346 mkplane f_riv w_riv;
347 revol rev_riv f_riv $offset_rivet [expr "$B1-$B3+$offset_rivet"] 0. 0.  0. 1. 360.;
348
349 #Create pattern rivet 2 for 2 plates
350 copy e_riv e_riv3;
351 ttranslate e_riv3 0. 0. [expr " -$t_st"]; 
352 explode e_riv3 v;
353 copy e_riv1 e_riv2;
354 ttranslate e_riv2 0. 0. [expr " -$t_ang"]; 
355 explode e_riv2 v;
356 vertex riv3 $offset_rivet [expr "$B1-$B3+$offset_rivet+$rad_rivet"] 0;
357 vertex riv4 $offset_rivet [expr "$B1-$B3+$offset_rivet+$rad_rivet"] [expr " -$t_ang-$t_st"];
358
359 edge riv_e5 riv4 riv3;
360 edge riv_e6 riv3 e_riv3_1;
361 edge riv_e7 e_riv3_2 e_riv2_2;
362 edge riv_e8 e_riv2_1 riv4;
363 wire w_rivl e_riv3 riv_e7 e_riv2 riv_e8 riv_e5 riv_e6;
364 mkplane f_rivl w_rivl;
365 revol rev_rivl f_rivl $offset_rivet [expr "$B1-$B3+$offset_rivet"] 0. 0.  0. 1. 360.;
366
367 #Create pattern rivet 3 for 3 plates
368 edge riv_e9 e_riv_2 e_riv2_2;
369 edge riv_e10  riv1 riv4;
370 wire w_riv3pl e_riv2 riv_e8 riv_e10 riv_e4  e_riv riv_e9 ;
371 mkplane f_riv3pl w_riv3pl;
372 revol rev_riv3pl f_riv3pl $offset_rivet [expr "$B1-$B3+$offset_rivet"] 0. 0.  0. 1. 360.;
373
374
375 #Create rivets upper row
376 compound rev_riv rivets_upper;
377 set i 1; 
378 set NNN [expr "int($L_edge/$step_rivet)"]
379 while {$i < $NNN} {   
380   if {fmod ($i,7) != 0 } { 
381       copy rev_riv rev_riv_$i
382       ttranslate rev_riv_$i [expr "$i*$step_rivet*$angle_cos"] [expr "-($i*$step_rivet*$angle_sin)"]   0. ;  
383       add rev_riv_$i rivets_upper;
384   }   else {      
385       copy rev_riv3pl rev_riv_$i
386       ttranslate rev_riv_$i [expr "$i*$step_rivet*$angle_cos"] [expr "-($i*$step_rivet*$angle_sin)"]   0. ;  
387       add rev_riv_$i rivets_upper;
388   } 
389   incr i;
390 }
391
392 #Create rivets lower row
393 copy rivets_upper rivets_lower;
394 tmirror rivets_lower 0. 0. 0. 0. 1. 0.;
395
396 #Create 1 row of rivets 
397
398 compound rivets_1;
399 set i 1; 
400 set NN1 [expr "int(2*($B1-$B3+$offset_rivet)/$step_rivet)"]
401 while {$i < $NN1} {   
402   copy rev_rivl rev_$i
403   ttranslate rev_$i 0. [expr "-($i*$step_rivet)"]   0. ;
404   add rev_$i rivets_1;
405   incr i;
406 }
407
408
409 #Create next rows of rivets 
410 set Nrow 6; #number of vertical rows
411 set j 1; 
412 while {$j < $Nrow} {
413    copy rev_rivl rev_riv1e_$j;
414    ttranslate rev_riv1e_$j [expr "7*$step_rivet*$j*$angle_cos"] [expr "-(7*$step_rivet*$j)*$angle_sin-$step_rivet"]  0. ;
415    compound rev_riv1e_$j rivets_$j;
416    set i 1; 
417    set NN2 [expr "$NN1-$j-1"];
418    while {$i < $NN2} {   
419       copy rev_riv1e_$j rev_riv1v_$i
420       ttranslate rev_riv1v_$i 0. [expr "-($i*$step_rivet)"] 0. ;
421       add rev_riv1v_$i rivets_$j;
422       incr i;
423       }   
424    incr j;
425 }
426 #Create profile for bracket
427 set ang_x1 [expr "($offset_rivet+7*$step_rivet-$h_ang/2)*$angle_cos"];
428 set ang_y1 [expr "$B1-$B3+$offset_fl-($offset_rivet+7*$step_rivet-$h_ang/2)*$angle_sin"];
429 vertex ang_1 $ang_x1 $ang_y1 [expr " -$t_st"]; 
430 set ang_x2 [expr "($offset_rivet+7*$step_rivet+$h_ang/2)*$angle_cos"];
431 set ang_y2 [expr "$B1-$B3+$offset_fl-($offset_rivet+7*$step_rivet+$h_ang/2)*$angle_sin"];
432 vertex ang_2 $ang_x2 $ang_y2 [expr " -$t_st"]; 
433 set ang_y3 [expr "$B1-$B3+$offset_fl-($offset_rivet+7*$step_rivet-$h_ang/2)*$angle_sin"];
434 vertex ang_3 $ang_x1 $ang_y3 [expr " -$t_st-$t_ang"];
435 set ang_y4 [expr "$B1-$B3+$offset_fl-($offset_rivet+7*$step_rivet+$h_ang/2)*$angle_sin"];
436 vertex ang_4 $ang_x2 $ang_y4 [expr " -$t_st-$h_ang"];
437 set ang_x5 [expr "($offset_rivet+7*$step_rivet+$h_ang/2-$t_ang)*$angle_cos"];
438 set ang_y5 [expr "$B1-$B3+$offset_fl-($offset_rivet+7*$step_rivet+$h_ang/2-$t_ang)*$angle_sin"];
439 vertex ang_5 $ang_x5 $ang_y5 [expr " -$t_st-$h_ang"]; 
440 set ang_y6 [expr "$B1-$B3+$offset_fl-($offset_rivet+7*$step_rivet+$h_ang/2-$t_ang)*$angle_sin"];
441 vertex ang_6 $ang_x5 $ang_y6 [expr " -$t_st-$t_ang"];
442 edge ang_e1 ang_1 ang_2;
443 edge ang_e2 ang_2 ang_4;
444 edge ang_e3 ang_4 ang_5;
445 edge ang_e4 ang_5 ang_6;
446 edge ang_e5 ang_6 ang_3;
447 edge ang_e6 ang_3 ang_1;
448 fillet2d ang_f1 ang_e4 ang_e5 2.;
449 fillet2d ang_f2 ang_e5 ang_e6 0.4;
450 fillet2d ang_f3 ang_e3 ang_e4 0.4;
451 wire w_ang ang_e1 ang_e2 ang_e3 ang_f3 ang_e4 ang_f1 ang_e5 ang_f2 ang_e6;
452 mkplane f_ang w_ang;
453 prism v_ang f_ang 0. [expr "-2. *$B1"] 0.;
454
455
456 #Create prisms to cut profile
457 #prism v_pr1
458 #vertex p1_1 0. [expr "-($B1-$B3+$offset_fl)-$B1"]  0.;
459 #vertex p1_2 $L [expr "-($B2-$B3+$offset_fl)-$B1"]  0.;
460 vertex p1_1 0. [expr "-($B1-$B3+$offset_fl)-3.*$B1"]  0.;
461 vertex p1_2 $L [expr "-($B2-$B3+$offset_fl)-3.*$B1"]  0.;
462 edge ep1_1 vfl_3 p1_2;
463 edge ep1_2 p1_2 p1_1;
464 edge ep1_3 p1_1 vfl_1;
465 wire w_pr1 ep1_1 pl_2 ep1_2 ep1_3;
466 mkplane f_pr1 w_pr1;
467 prism v_pr1 f_pr1 0. 0. [expr "-4.*$h_ang"];
468
469 #prism v_pr2
470 vertex p2_1 $ang_x5 [expr "$ang_y5-10."] [expr " -$t_st-$h_ang"]; 
471 vertex p2_2 $ang_x5 $ang_y5 [expr " -$t_st-$h_ang+10."]; 
472 edge ep2_1 p2_1 p2_2;
473 edge ep2_2 p2_2 ang_5;
474 edge ep2_3 ang_5 p2_1;
475 wire w_pr2 ep2_1 ep2_2 ep2_3;
476 mkplane f_pr2 w_pr2;
477 prism v_pr2 f_pr2 [expr "$L*$angle_cos"] [expr "-$L*$angle_sin"] 0.;
478
479 #prism v_pr3
480 copy v_pr2 v_pr3;
481 tmirror v_pr3 0. 0. 0. 0. 1. 0.;
482
483 #prism v_pr4
484 set ang_xpr1 [expr "($offset_rivet+7*$step_rivet-$h_ang/2+5.)*$angle_cos"];
485 set ang_ypr1 [expr "$B1-$B3+$offset_fl-($offset_rivet+7*$step_rivet-$h_ang/2+5.)*$angle_sin"];
486 vertex p4_1 $ang_xpr1 $ang_ypr1 [expr " -$t_st"]; 
487 vertex p4_2 $ang_x1 [expr "$ang_y1-5."] [expr " -$t_st"];
488 edge ep4_1 p4_1 p4_2;
489 edge ep4_2 p4_2 ang_1;
490 edge ep4_3 ang_1 p4_1;
491 wire w_pr4 ep4_1 ep4_2 ep4_3;
492 mkplane f_pr4 w_pr4;
493 prism v_pr4 f_pr4 0. 0. [expr "-$L"];
494
495 #prism v_pr5
496 copy v_pr4 v_pr5;
497 tmirror v_pr5 0. 0. 0. 0. 1. 0.;
498
499 #Create bracket 1
500 prism vholes_1 holes_1 0. 0. [expr "-4.*$h_ang"];
501 bcut v_ang_1a v_ang v_pr1; 
502 bcut v_ang_1b v_ang_1a v_pr2; 
503 bcut v_ang_1c v_ang_1b v_pr3; 
504 bcut v_ang_1d v_ang_1c v_pr4;
505 bcut v_ang_1e v_ang_1d v_pr5;
506 bcut v_ang_1f v_ang_1e vholes_1;
507 compound v_ang_1f brackets;
508
509 set Nrow 6; #number of vertical rows
510 set j 2; 
511 while {$j < $Nrow} {
512         copy v_ang_1e v_ang2;
513         ttranslate v_ang2 [expr "7*($j-1)*$step_rivet*$angle_cos"] [expr "-7*($j-1)*$step_rivet*$angle_sin"] 0.;
514         bcut v_ang3 v_ang2 v_pr1; 
515         bcut v_ang4 v_ang3 v_pr3; 
516         copy v_pr5 v_pr5_$j; 
517         ttranslate v_pr5_$j [expr "7*($j-1)*$step_rivet*$angle_cos"] [expr "7*($j-1)*$step_rivet*$angle_sin"] 0.;
518         bcut v_ang5 v_ang4 v_pr5_$j; 
519         prism vholes_$j holes_$j 0. 0. [expr "-4.*$h_ang"];
520         bcut v_ang1_$j  v_ang5 vholes_$j;
521         add v_ang1_$j brackets;
522         incr j;
523 }
524
525
526 #vdisplay v_plate5 v_upper v_lower rivets_1 rivets_2 rivets_3 rivets_4 rivets_5 rivets_upper rivets_lower brackets
527
528 compound  rivets_1 rivets_2 rivets_3 rivets_4 rivets_5 brackets brackets_with_rivets;
529 compound  rivets_upper v_upper v_upper_rivets;
530 compound  v_lower  rivets_lower v_lower_rivets;
531 compound  v_plate5 v_upper_rivets v_lower_rivets brackets_with_rivets wing_rib;
532
533
534 pload MODELING VISUALIZATION OCAF XDE;
535 NewDocument D;#creates new document with name D;
536
537 #Assign names to shapes
538 XAddShape D wing_rib;
539
540 SetName D 0:1:1:1 wing_rib;
541 SetName D 0:1:1:1:1 v_plate5;
542 SetName D 0:1:1:1:2 v_upper_rivets;
543 SetName D 0:1:1:1:3 v_lower_rivets;
544 SetName D 0:1:1:1:4 brackets_with_rivets;
545 SetName D 0:1:1:2 v_plate5;
546 SetName D 0:1:1:4 v_upper_rivets;
547 SetName D 0:1:1:4:1 rivets_upper;
548 SetName D 0:1:1:4:2 v_upper;
549 SetName D 0:1:1:5 rivets_upper;
550 SetName D 0:1:1:8 v_upper;
551 SetName D 0:1:1:8:1 v_upper;
552 SetName D 0:1:1:9 v_upper;
553 SetName D 0:1:1:10 v_lower_rivets;
554 SetName D 0:1:1:10:1 v_lower;
555 SetName D 0:1:1:10:2 rivets_lower;
556 SetName D 0:1:1:11 v_lower;
557 SetName D 0:1:1:13 rivets_lower;
558
559 set i 1; 
560 set NNN [expr "int($L_edge/$step_rivet)+1"]
561 while {$i < $NNN} {      
562   SetName D 0:1:1:5:$i rev_riv_up_$i;
563   SetName D 0:1:1:13:$i rev_riv_low_$i;
564   set ind [expr "$i+13"]
565   XSetColor D 0:1:1:$ind 0.576 0.576 0.432;
566   incr i;
567 }
568
569 XSetColor D 0:1:1:$ind 0.576 0.576 0.432;
570 puts $ind
571 SetName D 0:1:1:64 brackets_with_rivets;
572 SetName D 0:1:1:64:1 rivets_on_bracket_1;
573 SetName D 0:1:1:65 rivets_on_bracket_1;
574 SetName D 0:1:1:64:2 rivets_on_bracket_2;
575 SetName D 0:1:1:67 rivets_on_bracket_2;
576 SetName D 0:1:1:64:3 rivets_on_bracket_3;
577 SetName D 0:1:1:68 rivets_on_bracket_3;
578 SetName D 0:1:1:64:4 rivets_on_bracket_4;
579 SetName D 0:1:1:69 rivets_on_bracket_4;
580 SetName D 0:1:1:64:5 rivets_on_bracket_5;
581 SetName D 0:1:1:70 rivets_on_bracket_5;
582 SetName D 0:1:1:64:6 brackets;
583 SetName D 0:1:1:71 brackets;
584 SetName D 0:1:1:71:1 bracket_1;
585 SetName D 0:1:1:72 bracket_1;
586 SetName D 0:1:1:71:2 bracket_2;
587 SetName D 0:1:1:74 bracket_2;
588 SetName D 0:1:1:71:3 bracket_3;
589 SetName D 0:1:1:76 bracket_3;
590 SetName D 0:1:1:71:4 bracket_4;
591 SetName D 0:1:1:78 bracket_4;
592 SetName D 0:1:1:71:5 bracket_5;
593 SetName D 0:1:1:80 bracket_5;
594
595 SetName D 0:1:1:3 plate5;
596 XSetColor D 0:1:1:3 0.58 0.57 0.57;
597 XSetColor D 0:1:1:6 0.576 0.576 0.432;
598 XSetColor D 0:1:1:7 0.576 0.576 0.432;
599 XSetColor D 0:1:1:66 0.576 0.576 0.432;
600 XSetColor D 0:1:1:75 0.58 0.57 0.57;
601 XSetColor D 0:1:1:77 0.58 0.57 0.57;
602 XSetColor D 0:1:1:79 0.58 0.57 0.57;
603 XSetColor D 0:1:1:81 0.58 0.57 0.57;
604
605
606 #All attributes (colors, dimensions can be exported only on basic solids without locations noty compounds
607 XGetShape v1 D 0:1:1:9;
608 explode v1 e;
609 #Set rivet diameter
610 XAddDimension D v1_388; #0:1:4:1
611 XSetDimensionType D  0:1:4:1 15;
612
613 XSetDimensionValue D 0:1:4:1 2.;
614 #Set length
615 XAddDimension D v1_296; #0:1:4:2
616 XSetDimensionType D  0:1:4:2 2;
617
618 XSetDimensionValue D 0:1:4:2 100.;
619
620 XGetShape v2 D 0:1:1:3;
621 explode v2 f
622
623 #Set cut diameter
624 XAddDimension D v2_24; #0:1:4:3
625 XSetDimensionType D  0:1:4:3 15;
626
627 XSetDimensionValue D 0:1:4:3 35.;
628
629 #Set  tolerance
630 XAddGeomTolerance D v2_2; #0:1:4:
631 XSetToleranceValue D 0:1:4:4 0.5
632
633 XSetTypeOfTolerance D 0:1:4:4 2
634
635 XSetTypeOfToleranceValue D 0:1:4:4 1
636
637 #========
638 XAddShape D bracket_5