0031918: Application Framework - New binary format for fast reading part of OCAF...
[occt.git] / tests / bugs / caf / bug31918_2
1 puts "==========="
2 puts "0031918: Application Framework - New binary format for fast reading part of OCAF document"
3 puts "==========="
4
5 pload XDE
6
7 NewDocument D0 BinOcaf
8
9 # creates part-shape by the given sizes
10 proc store_part {nx ny dx dy dz entry} {
11   global D0
12   box b1 0 0 0 [expr $nx + .5] [expr $ny + .5] 1
13   box b2 0.5 0.5 0 [expr $nx - .5] [expr $nx - .5] 0.4
14   cut base b1 b2
15
16   set command "compound"
17   for {set x 0} {$x < $nx} {incr x} {
18     for {set y 0} {$y < $ny} {incr y} {
19       pcylinder c${x}_$y 0.25 1.01
20       ttranslate c${x}_$y [expr $x+.75] [expr $y+.75] 0.39
21       set command "$command c${x}_$y"
22     }
23   }
24   eval "$command cc"
25   bop base cc
26   bopfuse part
27   ttranslate part $dx $dy $dz
28   Label D0 $entry
29   SetShape D0 $entry part
30 }
31
32 store_part 16 16 0 0 0 0:1:1
33
34 for {set n 1} {$n < 5} {incr n} {
35   store_part 4 4 $n $n $n 0:2:$n
36   store_part 4 4 [expr 16-4-$n] $n $n 0:2:[expr $n+4]
37   store_part 4 4 $n [expr 16-4-$n] $n 0:2:[expr $n+8]
38   store_part 4 4 [expr 16-4-$n] [expr 16-4-$n] $n 0:2:[expr $n+12]
39 }
40 store_part 6 6 5 5 5 0:3:1
41 store_part 4 4 6 6 6 0:3:2
42 GetShape D0 0:3:2 top2
43
44 set docname ${imagedir}/doc_${casename}.cbf
45 set save_time [lindex [time {
46   SaveAs D0 ${docname}
47 }] 0]
48 puts "Save time $save_time mcs"
49
50 Close D0
51
52 set whole_time [lindex [time {
53   Open ${docname} D1
54   Close D1
55 } 20] 0]
56 puts "Whole document open time $whole_time mcs"
57
58 set half_time1 [lindex [time {
59   Open ${docname} D2 -read0:1 -read0:3
60   Close D2
61 } 20] 0]
62 puts "First half of document open time $half_time1 mcs"
63
64 set half_time2 [lindex [time {
65   Open ${docname} D3 -read0:2
66   Close D3
67 } 20] 0]
68 puts "Second half of document open time $half_time2 mcs"
69
70 # Check that open of two halfs of the document separately is not too much slower than open of the whole
71 if { [expr ($half_time1 + $half_time2) * 0.9] > $whole_time } {
72   puts "Error : loading of half of the document content is too slow relatively to the whole document load"
73 }
74
75 Open ${docname} D4 -read0:3:2
76 GetShape D4 0:3:2 opened_top2
77 checkshape opened_top2
78
79 # check shapes are the same before open and after
80 if {[string first [whatis top2] [whatis opened_top2]] != 7} {
81   puts "Error : saved and opened shapes are different"
82 }
83 Open ${docname} D4 -append -read0:1 -read0:2
84 GetShape D4 0:1:1 s
85 checkshape s
86 for {set n 1} {$n < 16} {incr n} {
87   GetShape D4 0:2:$n s
88   checkshape s
89 }
90 Close D4
91
92 set no_shapes_time [lindex [time {
93   Open ${docname} D5 -skipTNaming_NamedShape
94   Close D5
95 } 20] 0]
96 puts "Document without shapes open time $no_shapes_time mcs"
97
98 # Check that open of the document without shapes is much faster than open of the whole
99 if { [expr $no_shapes_time * 20] > $whole_time } {
100   puts "Error : loading of the document without shapes is too slow relatively to the whole document load"
101 }
102
103 # check shapes storage with triangulations
104 set length_wo_tirangulation [string length [dump s]]
105 vinit
106 vdisplay top2 -displaymode 1
107 NewDocument D6 BinOcaf
108 UndoLimit D6 10
109 SetShape D6 0:1 top2
110 StoreTriangulation 1
111 SaveAs D6 ${docname}
112 Close D6
113
114 Open ${docname} D7
115 GetShape D7 0:1 top3
116 Close D7
117
118 checkshape top3
119
120 set length_with_tirangulation [string length [dump top3]]
121 if { [expr $length_with_tirangulation / 7] < $length_wo_tirangulation } {
122   puts "Error : looks like shape stored with triangulation loaded without trianulation"
123 }