1puts "===========" 2puts "0027241: Create a complete test case to verify reading of all attribute types from MDTV-Standard document" 3puts "===========" 4puts "" 5 6# Set Create_Doc to 1 to generate the document (using OCCT 6.9.1 or earlier) 7set Create_Doc 0 8 9set test_file_name bug27241_ocaf_all_attributes.std 10 11set test_name "OCC26961" 12set test_int 123 13set test_real 123.456e-7 14set test_int_arr {10 20} 15set test_real_arr {1.1 3.14 5.4e18} 16set test_extstr_arr {"sample string 1" "string 2"} 17set test_bool_arr {0 1} 18set test_ref_arr {"0:1:2:3:2" "0:1:2:3:1"} 19set test_byte_arr {15 25} 20set test_map {1 5 2 10} 21set test_map_sorted {1 2 5 10} 22set test_named_ints {i1 1 i2 2} 23set test_named_reals {r1 1.1 r2 2.2} 24set test_named_strings {s1 string1 s2 string2} 25set test_named_bytes {b1 65 b2 66} 26set test_ref "0:1:1" 27set test_guid "00000000-0000-0000-2222-000000000000" 28set test_comment "Sample document containing various attributes" 29set test_string "Sample string" 30set test_expr "2*pi*r" 31set test_var1 "0:1:2:3:2" 32set test_var2 "0:1:2:3:1" 33set test_point "111 222 333" 34set test_axisPos "10 10 30" 35set test_axisDir "11 22 33" 36set test_plane "15 25 35" 37set test_boxXYZ "10 20 30" 38set test_boxDX 100 39set test_boxDY 200 40set test_boxDZ 300 41set test_geom_t "cir" 42set test_failure 1 43set test_driver "G" 44set test_driver_id "2a96b604-ec8b-11d0-bee7-080009dc3333" 45set test_transp 0.5 46set test_color AQUAMARINE4 47set test_material 22 48set test_positionX 100 49set test_positionY 200 50set test_positionZ 300 51 52proc checkarray {name array expected} { 53 set exp_len [llength $expected] 54 if {$exp_len != [llength $array]} {puts "Error: invalid $name"; return} 55 for {set i 0} {$i < $exp_len} {incr i} { 56 if {[lindex $array $i] != [lindex $expected $i]} {puts "Error: invalid $name"} 57 } 58} 59 60pload TOPTEST VISUALIZATION 61 62Close D -silent 63 64# Normal test execution 65if !$Create_Doc { 66 67 # Load document 68 Open [locate_data_file $test_file_name] D 69 70 71 # Simple values 72 if [catch {GetInteger D 0:1:1 i}] {puts "Error: Integer not found" 73 } elseif {[dval i] != $test_int} {puts "Error: invalid Integer"} 74 75 if [catch {GetReal D 0:1:1 r}] {puts "Error: Real not found" 76 } elseif {[dval r] != $test_real} {puts "Error: invalid Real"} 77 78 if [catch {set name [GetName D 0:1:1]}] {puts "Error: Name not found" 79 } elseif {$name != $test_name} {puts "Error: invalid Name"} 80 81 if [catch {set comment [GetComment D 0:1:1]}] {puts "Error: Comment not found" 82 } elseif {$comment != $test_comment} {puts "Error: invalid Comment"} 83 84 if [catch {set string [GetAsciiString D 0:1:1]}] {puts "Error: AsciiString not found"} 85 86 87 # TagSource 88 if [catch {NewTag D 0:1:2}] {puts "Error: TagSource not found"} 89 90 91 # Reference 92 if [catch {set ref [GetReference D 0:1:3]}] {puts "Error: Reference not found" 93 } elseif {[string compare $ref $test_ref] != 0} {puts "Error: invalid Reference"} 94 95 96 # Directory 97 if [catch {AddDirectory D 0:1:2:1}] {puts "Error: Directory not found"} 98 99 100 # UAttribute 101 if [catch {set guid [GetUAttribute D 0:1:2:2 $test_guid]}] {puts "Error: no label for UAttribute" 102 } elseif {$guid == "No UAttribute Attribute on label"} {puts "Error: $guid" 103 } elseif {$guid != $test_guid} {puts "Error: invalid UAttribute"} 104 105 106 # Variable 107 if [regexp "no such attribute" [GetVariable D $test_var2 is_const units]] {puts "Error: Variable not found" 108 } elseif {$is_const != 0 || $units != "mm"} {puts "Error: invalid Variable"} 109 110 111 # Relation 112 if [catch {set rel_dump [DumpRelation D 0:1:2:3]}] {puts "Error: Relation not found" 113 } elseif ![regexp "$test_expr.*$test_var1 $test_var2" $rel_dump] { 114 puts "Error: invalid Relation"} 115 116 117 # TreeNode 118 if [catch {set root_node [RootNode D 0:1:2:4]}] {puts "Error: TreeNode not found" 119 } elseif {$root_node != "0:1:2:4"} {puts "Error: invalid TreeNode"} 120 121 122 # Arrays 123 if [catch {set iarr [GetIntArray D 0:1:1]}] {puts "Error: IntegerArray not found" 124 } else { checkarray "IntegerArray" $iarr $test_int_arr } 125 126 if [catch {set rarr [GetRealArray D 0:1:1]}] {puts "Error: RealArray not found" 127 } else { checkarray "RealArray" $rarr $test_real_arr } 128 129 if [catch {set esarr [GetExtStringArray D 0:1:1]}] {puts "Error: ExtStringArray not found" 130 } else { checkarray "ExtStringArray" $esarr [join $test_extstr_arr " "]} 131 132 if [catch {set boolarr [GetBooleanArray D 0:1:1]}] {puts "Error: BooleanArray not found" 133 } else { checkarray "BooleanArray" $boolarr $test_bool_arr } 134 135 if [catch {set refarr [GetRefArray D 0:1:1]}] {puts "Error: ReferenceArray not found" 136 } else { checkarray "ReferenceArray" $refarr $test_ref_arr } 137 138 if [catch {set bytearr [GetByteArray D 0:1:1]}] {puts "Error: ByteArray not found" 139 } else { checkarray "ByteArray" $bytearr $test_byte_arr } 140 141 142 # Lists 143 if [catch {set ilst [GetIntegerList D 0:1:1]}] {puts "Error: IntegerList not found" 144 } else { checkarray "IntegerList" $ilst $test_int_arr } 145 146 if [catch {set rlst [GetRealList D 0:1:1]}] {puts "Error: RealList not found" 147 } else { checkarray "RealList" $rlst $test_real_arr } 148 149 if [catch {set eslst [GetExtStringList D 0:1:1]}] {puts "Error: ExtStringList not found" 150 } else { checkarray "ExtStringList" $eslst [join $test_extstr_arr " "]} 151 152 if [catch {set blst [GetBooleanList D 0:1:1]}] {puts "Error: BooleanList not found" 153 } else { checkarray "BooleanList" $blst $test_bool_arr } 154 155 if [catch {set reflst [GetReferenceList D 0:1:1]}] {puts "Error: ReferenceList not found" 156 } else { checkarray "ReferenceList" $reflst $test_ref_arr } 157 158 159 # IntPackedMap 160 if [catch {set map [GetIntPackedMap D 0:1:1]}] {puts "Error: IntPackedMap not found" 161 } else { checkarray "IntPackedMap" $map $test_map_sorted } 162 163 164 # NamedData 165 if [catch {GetNDIntegers D 0:1:4}] {puts "Error: NamedData not found"} 166 if [catch {GetNDReals D 0:1:4}] {puts "Error: NamedData not found"} 167 if [catch {GetNDStrings D 0:1:4}] {puts "Error: NamedData not found"} 168 if [catch {GetNDBytes D 0:1:4}] {puts "Error: NamedData not found"} 169 if [catch {GetNDIntArrays D 0:1:4}] {puts "Error: NamedData not found"} 170 if [catch {GetNDRealArrays D 0:1:4}] {puts "Error: NamedData not found"} 171 172 173 # NamedShape 174 eval box Box $test_boxXYZ $test_boxDX $test_boxDY $test_boxDZ 175 if [catch {GetShape D 0:1:6 b}] {puts "Error: NamedShape not found" 176 } elseif {[bounding b -dump] != [bounding Box -dump]} {puts "Error: invalid NamedShape" 177 } else { 178 checkshape b 179 checkprops b -l [expr $test_boxDX * 8 + $test_boxDY * 8 + $test_boxDZ * 8] 180 checkprops b -s [expr $test_boxDX * $test_boxDY * 2 + $test_boxDY * $test_boxDZ * 2 + $test_boxDX * $test_boxDZ * 2] 181 checkprops b -v [expr $test_boxDX * $test_boxDY * $test_boxDZ] 182 } 183 184 185 # Point, Axis, Plane 186 if [catch {GetPoint D 0:1:5:1 pnt}] {puts "Error: Point not found"} 187 if [catch {GetAxis D 0:1:5:2 axs}] {puts "Error: Axis not found"} 188 if [catch {GetPlane D 0:1:5:3 pln}] {puts "Error: Plane not found"} 189 190 191 # Geometry 192 if [catch {set geom_t [GetGeometryType D 0:1:6]}] {puts "Error: Geometry not found" 193 } elseif {$geom_t != $test_geom_t} { puts "Error: invalid Geometry" } 194 195 196 # Constraint 197 if [catch {set constraint [GetConstraint D 0:1:1]}] {puts "Error: Constraint not found" 198 } elseif {$constraint != "0:1:1 COINCIDENT G_1 (0:1:6) "} { puts "Error: invalid Constraint" } 199 200 201 # PatternStd 202 if [catch {set pattern [DumpPattern D 0:1:1]}] {puts "Error: PatternStd not found" 203 } elseif {$pattern != "0:1:1 signature = 5 Mirror (0:1:6)"} { puts "Error: invalid PatternStd" } 204 205 206 # Function 207 if [catch {GetFunction D 0:1:1 fguid failureNb}] {puts "Error: Function not found" 208 } elseif {$fguid != $test_guid || $failureNb != $test_failure} { puts "Error: invalid Function" } 209 210 211 # AISPresentation 212 AISInitViewer D 213 if [catch {set driver [AISDriver D 0:1:1]}] {puts "Error: AISPresentation not found" 214 } elseif [catch {set transp [AISTransparency D 0:1:1]}] {puts "Error: AISPresentation not found" 215 } elseif [catch {set color [AISColor D 0:1:1]}] {puts "Error: AISPresentation not found" 216 } elseif [catch {set material [AISMaterial D 0:1:1]}] {puts "Error: AISPresentation not found" 217 } elseif {$driver != $test_driver_id} { puts "Error: invalid AISPresentation" 218 } elseif {[lindex [split $transp "\n"] 1] != $test_transp} { puts "Error: invalid AISPresentation" 219 } elseif {[lindex [split $color "\n"] 1] != $test_color} { puts "Error: invalid AISPresentation" 220 } elseif {[lindex [split $material "\n"] 1] != $test_material} { puts "Error: invalid AISPresentation" } 221 222 223 # Position 224 if [catch {GetPosition D 0:1:1 posX posY posZ}] {puts "Error: Position not found" 225 } elseif {$posX != $test_positionX} { puts "Error: invalid Position" 226 } elseif {$posY != $test_positionY} { puts "Error: invalid Position" 227 } elseif {$posZ != $test_positionZ} { puts "Error: invalid Position" } 228 229} else { 230 231 # Creation of the document to be used in normal execution. 232 # Note! This will work only on OCCT versions older than 7.0, 233 # as since 7.0 there is no more storage driver for old persistence. 234 235 puts "Creating document" 236 NewDocument D MDTV-Standard 237 238 # Simple values 239 SetInteger D 0:1:1 $test_int 240 SetReal D 0:1:1 $test_real 241 SetName D 0:1:1 $test_name 242 SetComment D 0:1:1 $test_comment 243 SetAsciiString D 0:1:1 $test_string 244 245 # TagSource 246 SetTagger D 0:1:2 247 248 # Reference 249 SetReference D 0:1:3 $test_ref 250 251 # Directory 252 NewDirectory D 0:1:2:1 253 254 # UAttribute 255 SetUAttribute D 0:1:2:2 $test_guid 256 257 # Variable 258 SetVariable D $test_var2 0 mm 259 SetVariable D $test_var1 1 "" 260 261 # Relation 262 SetRelation D 0:1:2:3 "2*pi*r" $test_var1 $test_var2 263 264 # TreeNode 265 SetNode D 0:1:2:4 266 267 # Arrays 268 eval SetIntArray D 0:1:1 1 1 2 $test_int_arr 269 eval SetRealArray D 0:1:1 1 1 3 $test_real_arr 270 eval SetExtStringArray D 0:1:1 1 1 2 $test_extstr_arr 271 eval SetBooleanArray D 0:1:1 1 1 2 $test_bool_arr 272 eval SetRefArray D 0:1:1 1 2 $test_ref_arr 273 eval SetByteArray D 0:1:1 1 1 2 $test_byte_arr 274 275 # Lists 276 eval SetIntegerList D 0:1:1 $test_int_arr 277 eval SetRealList D 0:1:1 $test_real_arr 278 eval SetExtStringList D 0:1:1 $test_extstr_arr 279 eval SetBooleanList D 0:1:1 $test_bool_arr 280 eval SetReferenceList D 0:1:1 $test_ref_arr 281 282 # IntPackedMap 283 eval SetIntPackedMap D 0:1:1 1 $test_map 284 285 # NamedData 286 eval SetNDataIntegers D 0:1:4 2 $test_named_ints 287 eval SetNDataReals D 0:1:4 2 $test_named_reals 288 eval SetNDataStrings D 0:1:4 2 $test_named_strings 289 eval SetNDataBytes D 0:1:4 2 $test_named_bytes 290 eval SetNDataIntArrays D 0:1:4 ia 2 $test_int_arr 291 eval SetNDataRealArrays D 0:1:4 ra 3 $test_real_arr 292 293 # NamedShape 294 eval box Box $test_boxXYZ $test_boxDX $test_boxDY $test_boxDZ 295 SetShape D 0:1:6 Box 296 297 # Point 298 eval point Point $test_point 299 SetPoint D 0:1:5:1 Point 300 301 # Axis 302 eval line Axis $test_axisPos $test_axisDir 303 SetAxis D 0:1:5:2 Axis 304 305 # Plane 306 eval plane Plane $test_plane 307 SetPlane D 0:1:5:3 Plane 308 309 # Geometry 310 SetGeometry D 0:1:6 $test_geom_t 311 312 # Constraint 313 SetConstraint D 0:1:1 equal 0:1:6 314 315 # PatternStd 316 SetPattern D 0:1:1 5 0:1:6 317 318 # Function 319 SetFunction D 0:1:1 $test_guid $test_failure 320 321 # AISPresentation 322 AISInitViewer D 323 AISSet D 0:1:1 $test_driver 324 AISTransparency D 0:1:1 $test_transp 325 AISColor D 0:1:1 $test_color 326 AISMaterial D 0:1:1 $test_material 327 328 # Position 329 SetPosition D 0:1:1 $test_positionX $test_positionY $test_positionZ 330 331 SaveAs D $imagedir/ocaf_all_attributes.std 332 puts "Document saved to $imagedir/$test_file_name" 333} 334