1#!/usr/bin/perl 2=head1 USAGE 3 4 perl examples/log_unknown_dxf.pl examples/alldwg.inc 5 make -C examples alldxf_0.inc 6 7 Creates the 3 examples/alldxf_*.inc includes from the examples/alldwg.inc 8 parsed from the logs, and mixed with the values from the matching DXF sources. 9 10 In C we cannot statically initialize variable-sized arrays of structs, 11 so we split it up into 3 parts. 12 13e.g. 14 15 { "MATERIAL", "004014080405aa6a9aa404014080405aa6a9aa404000000000000e03f4080405aa6a9aa4054080405aa6a9aa4050201016a9aa6a90150201016a9aa6a900aa4fe41d0801e40130018401e4019401c802aaa1803824882e464030dfbfb8", "11", "Drawing_2007.log", "test/test-data/Drawing_2007.dxf", 0x96, 746 }, 16 17Search 0 MATERIAL + Handle 96 in test/test-data/Drawing_2007.dxf => 18 19 0 20 MATERIAL 21 5 22 96 23- 1 24- ByLayer 25- 94 26- 63 27=> 28 FIELD_T 1 "ByLayer" => dwg.spec: FIELD_T (name, 1); 29 FIELD_BL 94 63 (int32_t) => dwg.spec: FIELD_BL (channel_flags, 94); 30 31calc. number of same-typed: value fields as num. 32 33=cut 34 35use strict; 36use File::Basename qw(dirname); 37 38# DXF types 39use constant UNKNOWN => 0; 40use constant B => 1; 41use constant NUM => 2; #BL, BS, RL, RS or RC 42use constant HDL => 3; 43use constant STR => 4; 44use constant HEXSTR => 5; 45use constant DBL => 6; 46use B (); 47 48#require dirname(__FILE__)."/unstable.pm"; 49my $dir = dirname(__FILE__); 50open my $f0, ">", "$dir/alldxf_0.inc" or die "$!"; 51open my $f1a, ">", "$dir/alldxf_1.inc" or die "$!"; 52open my $f2, ">", "$dir/alldxf_2.inc" or die "$!"; 53my $i = 0; 54my (%skip, %dupl); 55 56if (0) { 57 open my $skip_fh, "<", "examples/alldwg.skip" 58 or warn "examples/alldwg.skip missing"; 59 while (<$skip_fh>) { 60 my @F = split(' '); 61 shift @F; 62 # NAME-HANDLE-BITSIZE 63 $F[2] =~ s/^0x//; 64 $skip{"$F[0]-$F[2]-$F[3]"} = \@F; 65 } 66 close $skip_fh; 67} 68 69my @ASSOCACTION_fields = ( 70 90 => 'class_version', 71 90 => 'geometry_status', 72 330 => 'owningnetwork', 73 360 => 'actionbody', 74 90 => 'action_index', 75 90 => 'max_assoc_dep_index', 76 90 => 'num_deps', 77 360 => 'dep', 78 79 # class_version > 1: 80 90 => '', # 0 81 90 => 'num_owned_params', 82 360 => 'owned_params', 83 90 => '', # 0 84 90 => 'num_owned_value_params', 85 360 => 'owned_value_params', 86); 87 88my @AcDbAssocPathBasedSurfaceActionBody = ( 89 100 => 'AcDbAssocActionBody', 90 90 => 'aab_version', 91 100 => 'AcDbAssocParamBasedActionBody', 92 90 => 'pab_status', 93 90 => 'pab_l2', 94 90 => 'num_deps', 95 360 => 'writedeps', 96 90 => 'pab_l4', 97 90 => 'pab_l5', 98 330 => 'readdeps', 99 1 => 'description', 100 100 => 'AcDbAssocSurfaceActionBody', 101 90 => 'sab_status', 102 290 => 'sab_b1', 103 90 => 'sab_l2', 104 290 => 'sab_b2', 105 70 => 'sab_s1', 106 100 => 'AcDbAssocPathBasedSurfaceActionBody', 107 90 => 'pbsab_status' 108); 109 110my @AcDbAssocAnnotationActionBody = ( 111 100 => 'AcDbAssocActionBody', 112 90 => 'aab_version', 113 100 => 'AcDbAssocParamBasedActionBody', 114 90 => 'pab_status', 115 90 => 'pab_l2', 116 90 => 'num_deps', 117 360 => 'writedeps', 118 90 => 'pab_l4', 119 90 => 'pab_l5', 120 330 => 'readdeps', 121 1 => 'description', 122 100 => 'AcDbAssocSurfaceActionBody', 123 90 => 'sab_status', 124 290 => 'sab_b1', 125 90 => 'sab_l2', 126 290 => 'sab_b2', 127 70 => 'sab_s1', 128 100 => 'AcDbAssocPathBasedSurfaceActionBody', 129 90 => 'pbsab_status' 130); 131 132my @AcDbEvalExpr = ( 133 100 => 'AcDbEvalExpr', 134 90 => 'evalexpr.nodeid', 135 0 => 'evalexpr.parentid', 136 98 => 'evalexpr.major', 137 99 => 'evalexpr.minor', 138 70 => 'evalexpr.value_code', 139 40 => 'evalexpr.value.num40', 140 10 => 'evalexpr.value.pt2d', 141 11 => 'evalexpr.value.pt3d', 142 1 => 'evalexpr.value.text1', 143 90 => 'evalexpr.value.long90', 144 91 => 'evalexpr.value.handle91', 145 70 => 'evalexpr.value.short70' 146); 147 148sub trans { 149 my ($code, $name, $num) = @_; 150 $num = 16 unless $num; 151 my @arr; 152 for (0 .. $num -1 ) { 153 push @arr, ($code, $name. "[$_]"); 154 } 155 return @arr; 156} 157 158my @AcDbShHistoryNode = ( 159 100 => 'AcDbShHistoryNode', 160 90 => 'history_node.major', 161 91 => 'history_node.minor', 162 trans (40, 'history_node.trans'), 163 62 => 'history_node.color', 164 92 => 'history_node.step_id', 165 347 => 'history_node.material' 166 ); 167 168my @DIMASSOC_Ref = ( 169 1 => 'DIMASSOC_Ref.classname', 170 72 => 'DIMASSOC_Ref.osnap_type', 171 331 => 'DIMASSOC_Ref.mainobjs', 172 73 => 'DIMASSOC_Ref.main_subent_type', 173 91 => 'DIMASSOC_Ref.main_gsmarker', 174 301 => 'DIMASSOC_Ref.xrefobj', 175 40 => 'DIMASSOC_Ref.osnap_dist', 176 10 => 'DIMASSOC_Ref.osnap_pt.x', 177 20 => 'DIMASSOC_Ref.osnap_pt.y', 178 30 => 'DIMASSOC_Ref.osnap_pt.z', 179 75 => 'DIMASSOC_Ref.has_lastpt_ref', 180 # rarely: 181 332 => 'DIMASSOC_Ref.intsectobj', 182 74 => 'DIMASSOC_Ref.intsect_subent_type'); 183 184# dxf names, not obj names. 185# The name in the all*.inc files. 186# which comes from the (?:Unhandled|Unstable) Class (object|entity) \d+ (\w+) warning 187# which uses the klass->dxfname. 188my $known = { 189 ACAD_EVALUATION_GRAPH => [ 190 96 => 'has_graph', 191 97 => 'unknown1', 192 91 => 'nodeid', 193 93 => 'edge_flags', 194 95 => 'num_evalexpr', 195 92 => 'node_edge1', 196 92 => 'node_edge2', 197 92 => 'node_edge3', 198 92 => 'node_edge4', 199 360 => 'evalexpr' 200 ], 201 DBCOLOR => [ 202 62 => 'color', 203 420 => 'rgb', 204 430 => 'name', 205 330 => 'ownerhandle', 206 ], 207 MATERIAL => [ 208 330 => 'ownerhandle', 209 1 => 'name', 210 2 => 'description', 211 70 => 'ambient_color.flag', 212 40 => 'ambient_color.factor', 213 90 => 'ambient_color.rgb', 214 71 => 'diffuse_color.flag', 215 41 => 'diffuse_color.factor', 216 92 => 'diffuse_color.rgb', 217 72 => 'diffusemap.source', 218 3 => 'diffusemap.filename', 219 42 => 'diffusemap.blendfactor', 220 73 => 'diffusemap.projection', 221 74 => 'diffusemap.tiling', 222 75 => 'diffusemap.autotransform', 223 trans (43, 'diffusemap.transmatrix'), 224 44 => 'specular_gloss_factor', 225 76 => 'specular_color.flag', 226 45 => 'specular_color.factor', 227 92 => 'specular_color.rbg', 228 77 => 'specularmap.source', 229 4 => 'specularmap.filename', 230 46 => 'specularmap.blendfactor', 231 78 => 'specularmap.projection', 232 74 => 'specularmap.tiling', 233 170 => 'specularmap.autotransform', 234 trans (47, 'specularmap.transmatrix'), 235 171 => 'reflectionmap.source', 236 6 => 'reflectionmap.filename', 237 48 => 'reflectionmap.blendfactor', 238 172 => 'reflectionmap.projection', 239 173 => 'reflectionmap.tiling', 240 174 => 'reflectionmap.autotransform', 241 trans (49, 'reflectionmap.transmatrix'), 242 140 => 'opacity_percent', 243 175 => 'opacitymap.source', 244 7 => 'opacitymap.filename', 245 141 => 'opacitymap.blendfactor', 246 176 => 'opacitymap.projection', 247 177 => 'opacitymap.tiling', 248 178 => 'opacitymap.autotransform', 249 142 => 'opacitymap.transmatrix[0]', 250 142 => 'opacitymap.transmatrix[1]', 251 142 => 'opacitymap.transmatrix[2]', 252 142 => 'opacitymap.transmatrix[3]', 253 142 => 'opacitymap.transmatrix[4]', 254 142 => 'opacitymap.transmatrix[5]', 255 142 => 'opacitymap.transmatrix[6]', 256 142 => 'opacitymap.transmatrix[7]', 257 142 => 'opacitymap.transmatrix[8]', 258 142 => 'opacitymap.transmatrix[9]', 259 142 => 'opacitymap.transmatrix[10]', 260 142 => 'opacitymap.transmatrix[11]', 261 142 => 'opacitymap.transmatrix[12]', 262 142 => 'opacitymap.transmatrix[13]', 263 142 => 'opacitymap.transmatrix[14]', 264 142 => 'opacitymap.transmatrix[15]', 265 179 => 'bumpmap.source', 266 8 => 'bumpmap.filename', 267 143 => 'bumpmap.blendfactor', 268 270 => 'bumpmap.projection', 269 271 => 'bumpmap.tiling', 270 272 => 'bumpmap.autotransform', 271 144 => 'bumpmap.transmatrix[0]', 272 144 => 'bumpmap.transmatrix[1]', 273 144 => 'bumpmap.transmatrix[2]', 274 144 => 'bumpmap.transmatrix[3]', 275 144 => 'bumpmap.transmatrix[4]', 276 144 => 'bumpmap.transmatrix[5]', 277 144 => 'bumpmap.transmatrix[6]', 278 144 => 'bumpmap.transmatrix[7]', 279 144 => 'bumpmap.transmatrix[8]', 280 144 => 'bumpmap.transmatrix[9]', 281 144 => 'bumpmap.transmatrix[10]', 282 144 => 'bumpmap.transmatrix[11]', 283 144 => 'bumpmap.transmatrix[12]', 284 144 => 'bumpmap.transmatrix[13]', 285 144 => 'bumpmap.transmatrix[14]', 286 144 => 'bumpmap.transmatrix[15]', 287 145 => 'refraction_index', 288 273 => 'refractionmap.source', 289 9 => 'refractionmap.filename', 290 146 => 'refractionmap.blendfactor', 291 274 => 'refractionmap.projection', 292 275 => 'refractionmap.tiling', 293 276 => 'refractionmap.autotransform', 294 147 => 'refractionmap.transmatrix[0]', 295 147 => 'refractionmap.transmatrix[1]', 296 147 => 'refractionmap.transmatrix[2]', 297 147 => 'refractionmap.transmatrix[3]', 298 147 => 'refractionmap.transmatrix[4]', 299 147 => 'refractionmap.transmatrix[5]', 300 147 => 'refractionmap.transmatrix[6]', 301 147 => 'refractionmap.transmatrix[7]', 302 147 => 'refractionmap.transmatrix[8]', 303 147 => 'refractionmap.transmatrix[9]', 304 147 => 'refractionmap.transmatrix[10]', 305 147 => 'refractionmap.transmatrix[11]', 306 147 => 'refractionmap.transmatrix[12]', 307 147 => 'refractionmap.transmatrix[13]', 308 147 => 'refractionmap.transmatrix[14]', 309 147 => 'refractionmap.transmatrix[15]', 310 148 => 'translucence', 311 149 => 'self_illumination', 312 468 => 'reflectivity', 313 93 => 'illumination_model', 314 94 => 'channel_flags', 315 282 => 'mode', 316 317 460 => 'color_bleed_scale', 318 461 => 'indirect_bump_scale', 319 462 => 'reflectance_scale', 320 463 => 'transmittance_scale', 321 290 => 'two_sided_material', 322 464 => 'luminance', 323 #270 => 'luminance_mode', 324 #271 => 'normalmap.method', 325 #465 => 'normalmap.strength', 326 #72 => 'normalmap.source', 327 #3 => 'normalmap.filename', 328 #42 => 'normalmap.blendfactor', 329 #73 => 'normalmap.projection', 330 #74 => 'normalmap.tiling', 331 #75 => 'normalmap.autotransform', 332 #43 => 'normalmap.transmatrix[0]', 333 #43 => 'normalmap.transmatrix[1]', 334 #43 => 'normalmap.transmatrix[2]', 335 #43 => 'normalmap.transmatrix[3]', 336 #43 => 'normalmap.transmatrix[4]', 337 #43 => 'normalmap.transmatrix[5]', 338 #43 => 'normalmap.transmatrix[6]', 339 #43 => 'normalmap.transmatrix[7]', 340 #43 => 'normalmap.transmatrix[8]', 341 #43 => 'normalmap.transmatrix[9]', 342 #43 => 'normalmap.transmatrix[10]', 343 #43 => 'normalmap.transmatrix[11]', 344 #43 => 'normalmap.transmatrix[12]', 345 #43 => 'normalmap.transmatrix[13]', 346 #43 => 'normalmap.transmatrix[14]', 347 #43 => 'normalmap.transmatrix[15]', 348 293 => 'is_anonymous', 349 272 => 'global_illumination', 350 273 => 'final_gather', 351 300 => 'genprocname', 352 291 => 'genprocvalbool', 353 271 => 'genprocvalint', 354 469 => 'genprocvalreal', 355 301 => 'genprocvaltext', 356 292 => 'genproctableend', 357 62 => 'genprocvalcolorindex', 358 420 => 'genprocvalcolorrgb', 359 430 => 'genprocvalcolorname', 360 #270 => 'map_utile', 361 148 => 'translucence', 362 90 => 'self_illumination', 363 468 => 'reflectivity', 364 93 => 'illumination_model', 365 94 => 'channel_flags', 366 ], 367 PLOTSETTINGS => [ 368 1 => 'page_setup_name', 369 2 => 'printer_cfg_file', 370 3 => 'paper_size', 371 6 => 'plotview', 372 40 => 'left_margin', 373 41 => 'bottom_margin', 374 42 => 'right_margin', 375 43 => 'top_margin', 376 44 => 'paper_width', 377 45 => 'paper_height', 378 4 => 'canonical_media_name', 379 46 => 'plot_origin', 380 48 => 'plot_window_ll', 381 140 => 'plot_window_ur', 382 142 => 'num_custom_print_scale', 383 143 => 'den_custom_print_scale', 384 70 => 'plot_layout', 385 72 => 'plot_paper_units', 386 73 => 'plot_rotation', 387 74 => 'plot_type', 388 7 => 'stylesheet', 389 75 => 'std_scale_type', 390 147 => 'std_scale_factor', 391 148 => 'paper_image_origin', 392 76 => 'shade_plot_mode', 393 77 => 'shade_plot_res_level', 394 78 => 'shade_plot_custom_dpi', 395 333 => 'shadeplot', 396 ], 397 ACDBASSOCACTION => [ 398 @ASSOCACTION_fields, 399 90 => 'num_deps', 400 90 => 'status', 401 ], 402 ACDBASSOCDEPENDENCY => [ 403 #100 => 'AcDbAssocDependency', 404 90 => 'class_version', 405 90 => 'status', 406 290 => 'isread_dep', 407 290 => 'iswrite_dep', 408 290 => 'isobjectstate_dep', 409 290 => 'unknown_b4', 410 90 => 'order', 411 290 => 'unknown_b5', 412 #330 => 'ownerhandle', 413 330 => 'owner', 414 330 => 'readdep', 415 330 => 'node', 416 360 => 'writedep', 417 90 => 'depbodyid', 418 ], 419 ACDBASSOCALIGNEDDIMACTIONBODY => [ 420 90 => 'aab_version', 421 #100 => 'AcDbAssocParamBasedActionBody', 422 90 => 'pab_status', 423 90 => 'pab_l2', 424 90 => 'num_deps', 425 360 => 'writedep', 426 90 => 'pab_l4', 427 90 => 'pab_l5', 428 330 => 'readdep', 429 #100 => ACDBASSOCALIGNEDDIMACTIONBODY, 430 90 => 'dcm_status', 431 330 => 'd_node', 432 330 => 'r_node', 433 ], 434 ACDBASSOCNETWORK => [ 435 @ASSOCACTION_fields, 436 #100 => 'AcDbAssocNetwork', 437 90 => 'unknown_n1', 438 90 => 'unknown_n2', 439 90 => 'num_actions', 440 330 => 'actions', 441 ], 442 ACDBASSOCBLENDSURFACEACTIONBODY => [ 443 @AcDbAssocPathBasedSurfaceActionBody, 444 100 => 'AcDbAssocBlendSurfaceActionBody', 445 90 => 'class_version', 446 290 => 'b1', 447 291 => 'b2', 448 292 => 'b3', 449 72 => 'blend_options', 450 293 => 'b4', 451 294 => 'b5', 452 73 => 'bs2', 453 ], 454 ACDBASSOCPATCHSURFACEACTIONBODY => [ 455 @AcDbAssocPathBasedSurfaceActionBody, 456 100 => 'AcDbAssocPlaneSurfaceActionBody', 457 90 => 'class_version', 458 ], 459 ACDBASSOCPLANESURFACEACTIONBODY => [ 460 @AcDbAssocPathBasedSurfaceActionBody, 461 100 => 'AcDbAssocPlaneSurfaceActionBody', 462 90 => 'psab_status', 463 ], 464 ACDBASSOCEDGECHAMFERSURFACEACTIONBODY => [ 465 @AcDbAssocPathBasedSurfaceActionBody, 466 100 => 'AcDbAssocEdgeChamferActionBody', 467 ], 468 ACDBASSOCEDGEFILLETSURFACEACTIONBODY => [ 469 @AcDbAssocPathBasedSurfaceActionBody, 470 100 => 'AcDbAssocEdgeFilletActionBody', 471 ], 472 ACDBASSOCEXTRUDEDSURFACEACTIONBODY => [ 473 @AcDbAssocPathBasedSurfaceActionBody, 474 100 => 'AcDbAssocExtrudedSurfaceActionBody', 475 90 => 'esab_status', 476 ], 477 ACDBASSOCFILLETSURFACEACTIONBODY => [ 478 @AcDbAssocPathBasedSurfaceActionBody, 479 100 => 'AcDbAssocFilletSurfaceActionBody', 480 90 => 'class_version', 481 70 => 'status', 482 10 => 'pt1', 483 10 => 'pt2', 484 ], 485 ACDBASSOCLOFTEDSURFACEACTIONBODY => [ 486 @AcDbAssocPathBasedSurfaceActionBody, 487 100 => 'AcDbAssocLoftedSurfaceActionBody', 488 90 => 'lsab_status', 489 ], 490 ACDBASSOCREVOLVEDSURFACEACTIONBODY => [ 491 @AcDbAssocPathBasedSurfaceActionBody, 492 100 => 'AcDbAssocRevolvedSurfaceActionBody', 493 90 => 'rsab_status', 494 ], 495 ACDBASSOCSWEPTSURFACEACTIONBODY => [ 496 @AcDbAssocPathBasedSurfaceActionBody, 497 100 => 'AcDbAssocSweptSurfaceActionBody', 498 90 => 'ssab_status', 499 ], 500 ACDBASSOCTRIMSURFACEACTIONBODY => [ 501 @AcDbAssocPathBasedSurfaceActionBody, 502 100 => 'AcDbAssocBlendSurfaceActionBody', 503 90 => 'class_version', 504 290 => 'b1', 505 290 => 'b2', 506 40 => 'distance', 507 ], 508 ACDBASSOCRESTOREENTITYSTATEACTIONBODY => [ 509 100 => 'AcDbAssocActionBody', 510 90 => 'aap_version', 511 100 => 'AcDbAssocRestoreEntityStateActionBody', 512 90 => 'class_version', 513 5 => 'entity', 514 ], 515 ACDBASSOMLEADERACTIONBODY => [ 516 @AcDbAssocAnnotationActionBody, 517 100 => 'AcDbAssocMLeaderActionBody', 518 90 => 'class_version', 519 90 => 'num_actions', 520 # 90 => 'actions[0].depid', 521 330 => 'actions[0].dep', 522 ], 523 ACDBASSOCALIGNEDDIMACTIONBODY => [ 524 @AcDbAssocAnnotationActionBody, 525 100 => 'AcDbAssocAlignedDimActionBody', 526 90 => 'class_version', 527 330 => 'r_node', 528 330 => 'd_node', 529 ], 530 ACDBASSOC3POINTANGULARDIMACTIONBODY => [ 531 @AcDbAssocAnnotationActionBody, 532 100 => 'Assoc3PointAngularDimActionBody', 533 90 => 'class_version', 534 330 => 'r_node', 535 330 => 'd_node', 536 330 => 'assocdep', 537 ], 538 ACDBASSOCORDINATEDIMACTIONBODY => [ 539 @AcDbAssocAnnotationActionBody, 540 100 => 'AssocOrdinatedDimActionBody', 541 90 => 'class_version', 542 330 => 'r_node', 543 330 => 'd_node', 544 ], 545 ACDBASSOCROTATEDDIMACTIONBODY => [ 546 @AcDbAssocAnnotationActionBody, 547 100 => 'AssocRotatedDimActionBody', 548 90 => 'class_version', 549 330 => 'r_node', 550 330 => 'd_node', 551 ], 552 ACDBPERSSUBENTMANAGER => [ 553 100 => 'AcDbPersSubentManager', 554 90 => 'class_version', 555 90 => 'unknown_bl1', 556 90 => 'unknown_bl2', 557 90 => 'unknown_bl3', 558 90 => 'unknown_bl4', 559 90 => 'unknown_bl5', 560 90 => 'unknown_bl6', 561 ], 562 ACDBASSOCPERSSUBENTMANAGER => [ 563 100 => 'AcDbAssocPersSubentManager', 564 90 => 'class_version', 565 90 => 'unknown_bl1', 566 90 => 'unknown_bl2', 567 90 => 'unknown_bl3', 568 90 => 'unknown_bl4', 569 90 => 'unknown_bl5', 570 90 => 'unknown_bl6', 571 90 => 'unknown_bl6a', 572 90 => 'unknown_bl7a', 573 90 => 'unknown_bl7', 574 90 => 'unknown_bl7', 575 90 => 'unknown_bl8', 576 90 => 'unknown_bl9', 577 90 => 'unknown_bl10', 578 90 => 'unknown_bl11', 579 90 => 'unknown_bl12', 580 90 => 'unknown_bl13', 581 90 => 'unknown_bl14', 582 90 => 'unknown_bl15', 583 90 => 'unknown_bl16', 584 90 => 'unknown_bl17', 585 90 => 'unknown_bl18', 586 90 => 'unknown_bl19', 587 90 => 'unknown_bl20', 588 90 => 'unknown_bl21', 589 90 => 'unknown_bl22', 590 90 => 'unknown_bl23', 591 90 => 'unknown_bl24', 592 90 => 'unknown_bl25', 593 90 => 'unknown_bl26', 594 90 => 'unknown_bl27', 595 90 => 'unknown_bl28', 596 90 => 'unknown_bl29', 597 90 => 'unknown_bl30', 598 90 => 'unknown_bl31', 599 90 => 'unknown_bl32', 600 90 => 'unknown_bl33', 601 90 => 'unknown_bl34', 602 90 => 'unknown_bl35', 603 90 => 'unknown_bl36', 604 290 => 'unknown_b37', 605 ], 606 ACDBASSOC2DCONSTRAINTGROUP => [ 607 @ASSOCACTION_fields, 608 10 => 'workplane', 609 360 => 'h1', 610 90 => 'l6', 611 360 => 'h2', 612 360 => 'h3', 613 90 => 'l7', 614 90 => 'l8', 615 1 => 't1', # AcConstrainedCircle 616 330 => 'h4', 617 90 => 'cl1', 618 70 => 'cs1', 619 90 => 'cl2', 620 90 => 'cl3', 621 330 => 'h5', 622 90 => 'cl4', 623 10 => 'c1', 624 10 => 'c2', 625 10 => 'c3', 626 40 => 'w1', 627 40 => 'w2', 628 40 => 'w3', 629 1 => 't2', # AcConstrainedImplicitPoint 630 ], 631 ACDBASSOCOSNAPPOINTREFACTIONPARAM => [ 632 90 => 'status', 633 90 => 'flags', 634 90 => 'num_actions', 635 360 => 'writedep', 636 330 => 'actions', 637 #40 => 'unknown3', 638 #... 639 ], 640 ACDBASSOCGEOMDEPENDENCY => [ 641 # 100 AcDbAssocDependency 642 90 => 'class_version', 643 90 => 'dependent_on_object_status', 644 290 => 'has_cached_value', 645 290 => 'is_actionevaluation_in_progress', 646 290 => 'is_attached_to_object', 647 290 => 'is_delegating_to_owning_action', 648 90 => 'bs90_2', 649 330 => 'h330_1', 650 290 => 'b290_5', 651 330 => 'h330_2', 652 330 => 'h330_3', 653 360 => 'h360', 654 90 => 'bs90_3', 655 # 100 AcDbAssocGeomDependency 656 90 => 'bs90_4', 657 290 => 'b290_6', 658 1 => 't', # AcDbAssocSingleEdgePersSubentId 659 290 => 'dependent_on_compound_object', 660 ], 661 ACSH_BOX_CLASS => [ 662 @AcDbEvalExpr, 663 @AcDbShHistoryNode, 664 100 => 'AcDbShPrimitive', 665 100 => 'AcDbShBox', 666 90 => 'major', 667 91 => 'minor', 668 40 => 'length', 669 41 => 'width', 670 42 => 'height', 671 ], 672 ACSH_WEDGE_CLASS => [ 673 @AcDbEvalExpr, 674 @AcDbShHistoryNode, 675 100 => 'AcDbShPrimitive', 676 100 => 'AcDbShWedge', 677 90 => 'major', 678 91 => 'minor', 679 40 => 'length', 680 41 => 'width', 681 42 => 'height', 682 ], 683 ACSH_SPHERE_CLASS => [ 684 @AcDbEvalExpr, 685 @AcDbShHistoryNode, 686 100 => 'AcDbShPrimitive', 687 100 => 'AcDbShSphere', 688 90 => 'major', 689 91 => 'minor', 690 40 => 'radius', 691 ], 692 ACSH_CYLINDER_CLASS => [ 693 @AcDbEvalExpr, 694 @AcDbShHistoryNode, 695 100 => 'AcDbShPrimitive', 696 100 => 'AcDbShCylinder', 697 90 => 'major', 698 91 => 'minor', 699 40 => 'height', 700 41 => 'major_radius', 701 42 => 'minor_radius', 702 43 => 'x_radius', 703 ], 704 ACSH_CONE_CLASS => [ 705 @AcDbEvalExpr, 706 @AcDbShHistoryNode, 707 100 => 'AcDbShPrimitive', 708 100 => 'AcDbShCone', 709 90 => 'major', 710 91 => 'minor', 711 40 => 'base_radius', 712 41 => 'top_major_radius', 713 42 => 'top_minor_radius', 714 43 => 'top_x_radius', 715 ], 716 ACSH_PYRAMID_CLASS => [ 717 @AcDbEvalExpr, 718 @AcDbShHistoryNode, 719 100 => 'AcDbShPrimitive', 720 100 => 'AcDbShPyramid', 721 90 => 'major', 722 91 => 'minor', 723 40 => 'height', 724 92 => 'sides', 725 41 => 'radius', 726 42 => 'topradius', 727 ], 728 ACSH_FILLET_CLASS => [ 729 @AcDbEvalExpr, 730 @AcDbShHistoryNode, 731 100 => 'AcDbShPrimitive', 732 100 => 'AcDbShFillet', 733 90 => 'major', 734 91 => 'minor', 735 92 => 'bl92', 736 93 => 'num_edges', 737 94 => 'edges', 738 95 => 'num_radiuses', 739 41 => 'radiuses', 740 96 => 'num_startsetbacks', 741 97 => 'num_endsetbacks', 742 43 => 'endsetbacks', 743 42 => 'startsetbacks', 744 ], 745 ACSH_CHAMFER_CLASS => [ 746 @AcDbEvalExpr, 747 @AcDbShHistoryNode, 748 100 => 'AcDbShPrimitive', 749 100 => 'AcDbShChamfer', 750 90 => 'major', 751 91 => 'minor', 752 92 => 'bl92', 753 41 => 'base_dist', 754 42 => 'other_dist', 755 93 => 'num_edges', 756 94 => 'edges', 757 95 => 'bl95', 758 ], 759 ACSH_TORUS_CLASS => [ 760 @AcDbEvalExpr, 761 @AcDbShHistoryNode, 762 100 => 'AcDbShPrimitive', 763 100 => 'AcDbShTorus', 764 90 => 'major', 765 91 => 'minor', 766 40 => 'major_radius', 767 41 => 'minor_radius', 768 ], 769 ACSH_BREP_CLASS => [ 770 @AcDbEvalExpr, 771 @AcDbShHistoryNode, 772 100 => 'AcDbShPrimitive', 773 100 => 'AcDbShBrep', 774 90 => 'major', 775 91 => 'minor', 776 70 => 'modeler_format_version', 777 ], 778 ACSH_BOOLEAN_CLASS => [ 779 @AcDbEvalExpr, 780 @AcDbShHistoryNode, 781 100 => 'AcDbShPrimitive', 782 100 => 'AcDbShBoolean', 783 90 => 'major', 784 91 => 'minor', 785 280 => 'operation', 786 92 => 'operand1', 787 93 => 'operand2', 788 ], 789 ACSH_SWEEP_CLASS => [ 790 @AcDbEvalExpr, 791 @AcDbShHistoryNode, 792 100 => 'AcDbShPrimitive', 793 # 100 => AcDbShSweepBase 794 90 => 'shsw_bl90', 795 91 => 'shsw_bl91', 796 10 => 'basept', 797 92 => 'shsw_bl92', 798 90 => 'shsw_text_size', 799 310 => 'shsw_text', 800 93 => 'shsw_bl93', 801 90 => 'shsw_text2_size', 802 310 => 'shsw_text2', 803 42 => 'draft_angle', 804 43 => 'start_draft_dist', 805 44 => 'end_draft_dist', 806 45 => 'scale_factor', 807 48 => 'twist_angle', 808 49 => 'align_angle', 809 46 => 'sweepentity_transform', 810 47 => 'pathentity_transform', 811 70 => 'align_option', 812 71 => 'miter_option', 813 290 => 'has_align_start', 814 292 => 'bank', 815 293 => 'check_intersections', 816 294 => 'shsw_b294', 817 295 => 'shsw_b295', 818 296 => 'shsw_b296', 819 11 => 'pt2', 820 ], 821 ACSH_HISTORY_CLASS => [ 822 # 100 => AcDbEvalExpr 823 90 => 'class_version', 824 98 => 'ee_bl98', 825 99 => 'ee_bl99', 826 # 100 => AcDbShHistoryNode 827 90 => 'shhn_bl90', 828 91 => 'shhn_bl91', 829 40 => 'shhn_pts', 830 62 => 'color', 831 92 => 'shhn_b92', 832 347 => 'shhn_bl347', 833 ], 834 ARC_DIMENSION => [ 835 210 => 'extrusion', 836 2 => 'block_name', 837 10 => 'def_pt', 838 11 => 'text_midpt', 839 31 => 'elevation', 840 70 => 'flag', 841 1 => 'user_text', 842 53 => 'text_rotation', 843 51 => 'horiz_dir', 844 40 => 'leader_len', 845 54 => 'ins_rotation', 846 71 => 'attachment', 847 72 => 'lspace_style', 848 41 => 'lspace_factor', 849 42 => 'act_measurement', 850 3 => 'dimstyle', 851 73 => 'unknown', 852 74 => 'flip_arrow1', 853 75 => 'flip_arrow2', 854 12 => 'clone_ins_pt', 855 856 10 => 'def_pt', 857 13 => 'xline1_pt', 858 14 => 'xline2_pt', 859 15 => 'center_pt', 860 16 => 'leader1_pt', 861 17 => 'leader2_pt', 862 40 => 'leader_len', 863 41 => 'arc_start_param', 864 42 => 'arc_end_param', 865 70 => 'is_partial', 866 ], 867 DATALINK => [ 868 70 => 'class_version', 869 1 => 'data_adapter', 870 300 => 'description', 871 301 => 'tooltip', 872 302 => 'connection_string', 873 90 => 'option', 874 91 => 'update_option', 875 92 => 'bl92', 876 170 => 'year', 877 171 => 'month', 878 172 => 'day', 879 173 => 'hour', 880 174 => 'minute', 881 175 => 'seconds', 882 176 => 'msec', 883 177 => 'path_option', 884 93 => 'bl93', 885 304 => 'update_status', 886 94 => 'num_customdata', 887 #305 => '', # CUSTOMDATA 888 #1 => '', # DATAMAP_BEGIN 889 330 => 'customdata.target', 890 304 => 'customdata.text', 891 360 => 'hardowner', 892 #309 => '', # DATAMAP_END 893 ], 894 DIMASSOC => [ 895 330 => 'dimensionobj', 896 90 => 'associativity', 897 70 => 'trans_space_flag', 898 71 => 'rotated_type', 899 @DIMASSOC_Ref, 900 @DIMASSOC_Ref, 901 @DIMASSOC_Ref, 902 @DIMASSOC_Ref, 903 92 => 'intsect_gsmarker', 904 301 => 'xrefobj', 905 302 => 'intsectxrefobj', 906 302 => 'intsectxrefobj', 907 ], 908 LIGHT => [ 909 90 => 'class_version', 910 1 => 'name', 911 70 => 'type', 912 290 => 'status', 913 90 => 'color.rgb', #r2000 only 914 63 => 'color', 915 291 => 'plot_glyph', 916 40 => 'intensity', 917 10 => 'position', 918 11 => 'target', 919 72 => 'attenuation_type', 920 292 => 'use_attenuation_limits', 921 41 => 'attenuation_start_limit', 922 42 => 'attenuation_end_limit', 923 50 => 'hotspot_angle', 924 51 => 'falloff_angle', 925 293 => 'cast_shadows', 926 73 => 'shadow_type', 927 91 => 'shadow_map_size', 928 280 => 'shadow_map_softness', 929 #0 => 'lamp_color_preset', 930 #0 => 'lamp_color_type', 931 #0 => 'physical_intensity_method', 932 #0 => 'drawable_type', 933 #0 => 'glyph_display_type', 934 #0 => 'glyph_display', 935 ], 936 NAVISWORKSMODELDEF => [ 937 #100 => AcDbNavisworksModelDef 938 1 => 'path', 939 290 => 'status', 940 10 => 'min_extent', 941 11 => 'max_extent', 942 290 => 'host_drawing_visibility', 943 ], 944 RENDERENVIRONMENT => [ 945 # 100 => AcDbRenderEnvironment 946 90 => 'class_version', 947 290 => 'fog_enabled', 948 290 => 'fog_background_enabled', 949 280 => 'fog_color', 950 40 => 'fog_density_near', 951 40 => 'fog_density_far', 952 40 => 'fog_distance_near', 953 40 => 'fog_distance_far', 954 290 => 'environ_image_enabled', 955 1 => 'environ_image_filename', 956 ], 957 RENDERSETTINGS => [ 958 # 100 => AcDbRenderSettings 959 90 => 'class_version', 960 1 => 'name', 961 290 => 'fog_enabled', 962 290 => 'fog_background_enabled', 963 290 => 'backfaces_enabled', 964 290 => 'environ_image_enabled', 965 1 => 'environ_image_filename', 966 1 => 'description', 967 90 => 'display_index', 968 290 => 'has_predefined', 969 ], 970 RAPIDRTRENDERSETTINGS => [ 971 # 100 => AcDbRenderSettings 972 90 => 'class_version', 973 1 => 'name', 974 290 => 'fog_enabled', 975 290 => 'fog_background_enabled', 976 290 => 'backfaces_enabled', 977 290 => 'environ_image_enabled', 978 1 => 'environ_image_filename', 979 1 => 'description', 980 90 => 'display_index', 981 290 => 'has_predefined', 982 # 100 => AcDbRapidRTRenderSettings 983 90 => 'rapidrt_version', 984 70 => 'render_target', 985 90 => 'render_level', 986 90 => 'render_time', 987 70 => 'lighting_model', 988 70 => 'filter_type', 989 40 => 'filter_width', 990 40 => 'filter_height', 991 290 => 'has_predefined', 992 ], 993 MENTALRAYRENDERSETTINGS => [ 994 # 100 => AcDbRenderSettings 995 90 => 'class_version', 996 1 => 'name', 997 290 => 'fog_enabled', 998 290 => 'fog_background_enabled', 999 290 => 'backfaces_enabled', 1000 290 => 'environ_image_enabled', 1001 1 => 'environ_image_filename', 1002 1 => 'description', 1003 90 => 'display_index', 1004 290 => 'has_predefined', 1005 # 100 => AcDbMentalRayRenderSettings 1006 90 => 'mr_version', 1007 90 => 'sampling1', 1008 90 => 'sampling2', 1009 70 => 'sampling_mr_filter', 1010 40 => 'sampling_filter1', 1011 40 => 'sampling_filter2', 1012 40 => 'sampling_contrast_color1', 1013 40 => 'sampling_contrast_color2', 1014 40 => 'sampling_contrast_color3', 1015 40 => 'sampling_contrast_color4', 1016 70 => 'shadow_mode', 1017 290 => 'shadow_maps_enabled', 1018 290 => 'ray_tracing_enabled', 1019 90 => 'ray_trace_depth1', 1020 90 => 'ray_trace_depth2', 1021 90 => 'ray_trace_depth3', 1022 290 => 'global_illumination_enabled', 1023 90 => 'gi_sample_count', 1024 290 => 'gi_sample_radius_enabled', 1025 40 => 'gi_sample_radius', 1026 90 => 'gi_photons_per_light', 1027 90 => 'photon_trace_depth1', 1028 90 => 'photon_trace_depth2', 1029 90 => 'photon_trace_depth3', 1030 290 => 'final_gathering_enabled', 1031 90 => 'fg_ray_count', 1032 290 => 'fg_sample_radius_state1', 1033 290 => 'fg_sample_radius_state2', 1034 290 => 'fg_sample_radius_state3', 1035 40 => 'fg_sample_radius1', 1036 40 => 'fg_sample_radius2', 1037 40 => 'light_luminance_scale', 1038 70 => 'diagnostics_mode', 1039 70 => 'diagnostics_grid_mode', 1040 40 => 'diagnostics_grid_float', 1041 70 => 'diagnostics_photon_mode', 1042 70 => 'diagnostics_bsp_mode', 1043 290 => 'export_mi_enabled', 1044 1 => 'mr_description', 1045 90 => 'tile_size', 1046 70 => 'tile_order', 1047 90 => 'memory_limit', 1048 290 => 'diagnostics_samples_mode', 1049 40 => 'energy_multiplier', 1050 ], 1051 RENDERGLOBAL => [ 1052 # 100 => AcDbRenderGlobal 1053 90 => 'class_version', 1054 90 => 'procedure', 1055 90 => 'destination', 1056 290 => 'save_enabled', 1057 1 => 'save_filename', 1058 90 => 'image_width', 1059 90 => 'image_height', 1060 290 => 'predef_presets_first', 1061 290 => 'highlevel_info', 1062 ], 1063 RENDERENTRY => [ 1064 90 => 'class_version', 1065 1 => 'image_file_name', 1066 1 => 'preset_name', 1067 1 => 'view_name', 1068 90 => 'dimension_x', 1069 90 => 'dimension_y', 1070 70 => 'start_year', 1071 70 => 'start_month', 1072 70 => 'start_day', 1073 70 => 'start_minute', 1074 70 => 'start_second', 1075 70 => 'start_msec', 1076 40 => 'render_time', 1077 90 => 'memory_amount', 1078 90 => 'material_count', 1079 90 => 'light_count', 1080 90 => 'triangle_count', 1081 90 => 'display_index', 1082 ], 1083 SUN => [ 1084 90 => 'class_version', 1085 290 => 'is_on', 1086 291 => 'has_shadow', 1087 292 => 'is_dst', 1088 421 => 'unknown', 1089 40 => 'intensity', 1090 291 => 'has_shadow', 1091 91 => 'julian_day', 1092 92 => 'time', 1093 292 => 'is_dst', 1094 #0 => 'altitude', 1095 #0 => 'azimuth', 1096 #0 => 'direction', 1097 70 => 'shadow_type', 1098 280 => 'shadow_softness', 1099 71 => 'shadow_mapsize', 1100 330 => 'ownerhandle', 1101 63 => 'color', 1102 ], 1103 SUNSTUDY => [ 1104 90 => 'class_version', 1105 1 => 'setup_name', 1106 2 => 'description', 1107 70 => 'output_type', 1108 290 => 'use_subset', 1109 3 => 'sheet_set_name', 1110 4 => 'sheet_subset_name', 1111 291 => 'select_dates_from_calendar', 1112 91 => 'num_dates', 1113 90 => 'dates.julian_day', 1114 90 => 'dates.time', 1115 292 => 'select_range_of_dates', 1116 93 => 'start_time', 1117 94 => 'end_time', 1118 95 => 'interval', 1119 91 => 'num_hours', 1120 290 => 'hours', 1121 74 => 'shade_plot_type', 1122 75 => 'numvports', 1123 76 => 'numrows', 1124 77 => 'numcols', 1125 40 => 'spacing', 1126 293 => 'lock_viewports', 1127 294 => 'label_viewports', 1128 330 => 'ownerhandle', 1129 340 => 'page_setup_wizard', 1130 341 => 'view', 1131 342 => 'visual_style', 1132 343 => 'text_style', 1133 ], 1134 ACAD_TABLE => [ 1135 #SUBCLASS (AcDbBlockReference) 1136 10 => 'insertion_point', 1137 41 => 'scale.x', 1138 #0 => 'scale_flag', 1139 42 => 'scale.y', 1140 43 => 'scale.z', 1141 50 => 'rotation', 1142 210 => 'extrusion', 1143 66 => 'has_attribs', 1144 #0 => 'num_owned', 1145 90 => 'flag_for_table_value', 1146 11 => 'horiz_direction', 1147 92 => 'num_cols', 1148 91 => 'num_rows', 1149 142 => 'col_widths', 1150 141 => 'row_heights', 1151 #SUBCLASS (AcDbDataCell) 1152 171 => 'cells.type', 1153 172 => 'cells.flags', 1154 173 => 'cells.merged_value', 1155 174 => 'cells.autofit_flag', 1156 175 => 'cells.merged_width_flag', 1157 176 => 'cells.merged_height_flag', 1158 145 => 'cells.rotation_value', 1159 1 => 'cells.text_value', 1160 144 => 'cells.block_scale', 1161 #0 => 'cells.additional_data_flag', 1162 179 => 'cells.num_attr_defs', 1163 #0 => 'cells.attr_def_index', 1164 300 => 'cells.attr_def_text', 1165 #0 => 'cells.additional_data_flag', 1166 177 => 'cells.cell_flag_override', 1167 178 => 'cells.virtual_edge_flag', 1168 170 => 'cells.cell_alignment', 1169 283 => 'cells.background_fill_none', 1170 63 => 'cells.background_color', 1171 64 => 'cells.content_color', 1172 7 => 'cells.text_style', 1173 140 => 'cells.text_height', 1174 69 => 'cells.top_grid_color', 1175 279 => 'cells.top_grid_linewt', 1176 289 => 'cells.top_visibility', 1177 65 => 'cells.right_grid_color', 1178 275 => 'cells.right_grid_linewt', 1179 285 => 'cells.right_visibility', 1180 66 => 'cells.bottom_grid_color', 1181 276 => 'cells.bottom_grid_linewt', 1182 286 => 'cells.bottom_visibility', 1183 68 => 'cells.left_grid_color', 1184 278 => 'cells.left_grid_linewt', 1185 288 => 'cells.left_visibility', 1186 #0 => 'cells.unknown', 1187 #0 => 'has_table_overrides', 1188 93 => 'table_flag_override', 1189 280 => 'title_suppressed', 1190 281 => 'header_suppressed', 1191 70 => 'flow_direction', 1192 40 => 'horiz_cell_margin', 1193 41 => 'vert_cell_margin', 1194 64 => 'title_row_color', 1195 64 => 'header_row_color', 1196 64 => 'data_row_color', 1197 283 => 'title_row_fill_none', 1198 283 => 'header_row_fill_none', 1199 283 => 'data_row_fill_none', 1200 63 => 'title_row_fill_color', 1201 63 => 'header_row_fill_color', 1202 63 => 'data_row_fill_color', 1203 170 => 'title_row_alignment', 1204 170 => 'header_row_alignment', 1205 170 => 'data_row_alignment', 1206 7 => 'title_text_style', 1207 7 => 'header_text_style', 1208 7 => 'data_text_style', 1209 140 => 'title_row_height', 1210 140 => 'header_row_height', 1211 140 => 'data_row_height', 1212 #0 => 'has_border_color_overrides', 1213 94 => 'border_color_overrides_flag', 1214 64 => 'title_horiz_top_color', 1215 65 => 'title_horiz_ins_color', 1216 66 => 'title_horiz_bottom_color', 1217 63 => 'title_vert_left_color', 1218 68 => 'title_vert_ins_color', 1219 69 => 'title_vert_right_color', 1220 64 => 'header_horiz_top_color', 1221 65 => 'header_horiz_ins_color', 1222 66 => 'header_horiz_bottom_color', 1223 63 => 'header_vert_left_color', 1224 68 => 'header_vert_ins_color', 1225 69 => 'header_vert_right_color', 1226 64 => 'data_horiz_top_color', 1227 65 => 'data_horiz_ins_color', 1228 66 => 'data_horiz_bottom_color', 1229 63 => 'data_vert_left_color', 1230 68 => 'data_vert_ins_color', 1231 69 => 'data_vert_right_color', 1232 #0 => 'has_border_lineweight_overrides', 1233 95 => 'border_lineweight_overrides_flag', 1234 #0 => 'title_horiz_top_linewt', 1235 #0 => 'title_horiz_ins_linewt', 1236 #0 => 'title_horiz_bottom_linewt', 1237 #0 => 'title_vert_left_linewt', 1238 #0 => 'title_vert_ins_linewt', 1239 #0 => 'title_vert_right_linewt', 1240 #0 => 'header_horiz_top_linewt', 1241 #0 => 'header_horiz_ins_linewt', 1242 #0 => 'header_horiz_bottom_linewt', 1243 #0 => 'header_vert_left_linewt', 1244 #0 => 'header_vert_ins_linewt', 1245 #0 => 'header_vert_right_linewt', 1246 #0 => 'data_horiz_top_linewt', 1247 #0 => 'data_horiz_ins_linewt', 1248 #0 => 'data_horiz_bottom_linewt', 1249 #0 => 'data_vert_left_linewt', 1250 #0 => 'data_vert_ins_linewt', 1251 #0 => 'data_vert_right_linewt', 1252 #0 => 'has_border_visibility_overrides', 1253 96 => 'border_visibility_overrides_flag', 1254 0 => 'title_horiz_top_visibility', 1255 0 => 'title_horiz_ins_visibility', 1256 0 => 'title_horiz_bottom_visibility', 1257 0 => 'title_vert_left_visibility', 1258 0 => 'title_vert_ins_visibility', 1259 0 => 'title_vert_right_visibility', 1260 0 => 'header_horiz_top_visibility', 1261 0 => 'header_horiz_ins_visibility', 1262 0 => 'header_horiz_bottom_visibility', 1263 0 => 'header_vert_left_visibility', 1264 0 => 'header_vert_ins_visibility', 1265 0 => 'header_vert_right_visibility', 1266 0 => 'data_horiz_top_visibility', 1267 0 => 'data_horiz_ins_visibility', 1268 0 => 'data_horiz_bottom_visibility', 1269 0 => 'data_vert_left_visibility', 1270 0 => 'data_vert_ins_visibility', 1271 0 => 'data_vert_right_visibility', 1272 2 => 'block_header', 1273 #0 => 'first_attrib', 1274 #0 => 'last_attrib', 1275 #0 => 'seqend', 1276 342 => 'table_style_id', 1277 344 => 'cells.cell_handle', 1278 340 => 'cells.cell_handle', 1279 331 => 'cells.attr_def_id', 1280 7 => 'cells.text_style_override', 1281 7 => 'title_row_style_override', 1282 7 => 'header_row_style_override', 1283 7 => 'data_row_style_override', 1284 0 => 'unknown_bs', 1285 11 => 'hor_dir', 1286 #0 => 'has_break_data', 1287 #0 => 'break_flag', 1288 #0 => 'break_flow_direction', 1289 #0 => 'break_spacing', 1290 #0 => 'break_unknown1', 1291 #0 => 'break_unknown2', 1292 #0 => 'num_break_heights', 1293 #0 => 'break_heights.position', 1294 #0 => 'break_heights.height', 1295 #0 => 'break_heights.flag', 1296 #0 => 'num_break_rows', 1297 #0 => 'break_rows.position', 1298 #0 => 'break_rows.start', 1299 ], 1300 TABLECONTENT => [ 1301 #100 => AcDbDataTableContent 1302 1 => 'ldata.name', 1303 300 => 'ldata.desc', 1304 90 => 'tdata.num_cols', 1305 300 => 'tdata.cols.name', 1306 91 => 'tdata.cols.custom_data', 1307 #Cell_Style_Fields(tdata.cols.cell_style); 1308 90 => 'tdata.num_rows', 1309 90 => 'row.num_cells', 1310 90 => 'cell.flag', 1311 300 => 'cell.tooltip', 1312 91 => 'cell.customdata', 1313 90 => 'cell.num_customdata_items', 1314 300 => 'cell.customdata_items.name', 1315 92 => 'cell.has_linked_data', 1316 340 => 'cell.data_link', 1317 93 => 'cell.num_rows', 1318 94 => 'cell.num_cols', 1319 96 => 'cell.unknown', 1320 95 => 'cell.num_cell_contents', 1321 90 => 'content.type', 1322 # Table_Value(content.value) 1323 340 => 'content.handle', 1324 91 => 'content.num_attrs', 1325 330 => 'attr.attdef', 1326 301 => 'attr.value', 1327 92 => 'attr.index', 1328 # Content_Format(content.content_format); 1329 90 => 'cell.style_id', 1330 91 => 'cell.has_geom_data', 1331 91 => 'cell.geom_data_flag', 1332 40 => 'cell.unknown_d40', 1333 41 => 'cell.unknown_d41', 1334 #0 => 'cell.has_cell_geom', 1335 330 => 'cell.tablegeometry', 1336 94 => 'cell.num_geometry', 1337 10 => 'geom.dist_top_left', 1338 11 => 'geom.dist_center', 1339 43 => 'geom.content_width', 1340 44 => 'geom.content_height', 1341 45 => 'geom.width', 1342 46 => 'geom.height', 1343 95 => 'geom.unknown', 1344 91 => 'row.custom_data', 1345 90 => 'row.num_customdata_items', 1346 300 => 'row.customdata_items.name', 1347 #Table_Value(row.customdata_items[rcount3].value); 1348 #Cell_Style_Fields(row.cell_style); 1349 90 => 'row.style_id', 1350 40 => 'row.height', 1351 #0 => 'tdata.num_field_refs', 1352 #0 => 'tdata.field_refs', 1353 90 => 'fdata.num_merged_cells', 1354 91 => 'merged.top_row', 1355 92 => 'merged.left_col', 1356 93 => 'merged.bottom_row', 1357 94 => 'merged.right_col', 1358 340 => 'table_style, 3', 1359 ], 1360 TABLEGEOMETRY => [ 1361 90 => 'num_rows', 1362 91 => 'num_cols', 1363 92 => 'num_cells', 1364 93 => 'cells.geom_data_flag', 1365 40 => 'cells.width_w_gap', 1366 41 => 'cells.height_w_gap', 1367 330 => 'cells.tablegeometry', 1368 94 => 'cells.num_geometry', 1369 10 => 'cell.geometry.dist_top_left', 1370 11 => 'cell.geometry.dist_center', 1371 43 => 'cell.geometry.content_width', 1372 44 => 'cell.geometry.content_height', 1373 45 => 'cell.geometry.width', 1374 46 => 'cell.geometry.height', 1375 95 => 'cell.geometry.unknown', 1376 ], 1377 TABLESTYLE => [ 1378 100 => 'AcDbTableStyle', 1379 3 => 'name', 1380 70 => 'flow_direction', 1381 71 => 'flags', 1382 40 => 'horiz_cell_margin', 1383 41 => 'vert_cell_margin', 1384 280 => 'title_suppressed', 1385 281 => 'header_suppressed', 1386 7 => 'rowstyles.text_style', 1387 140 => 'rowstyles.text_height', 1388 170 => 'rowstyles.text_alignment', 1389 62 => 'rowstyles.text_color', 1390 63 => 'rowstyles.fill_color', 1391 283 => 'rowstyles.has_bgcolor', 1392 274 => 'rowstyles.borders.linewt', 1393 284 => 'rowstyles.borders.visible', 1394 264 => 'rowstyles.borders.color', 1395 275 => 'rowstyles.borders.linewt', 1396 285 => 'rowstyles.borders.visible', 1397 265 => 'rowstyles.borders.color', 1398 276 => 'rowstyles.borders.linewt', 1399 286 => 'rowstyles.borders.visible', 1400 266 => 'rowstyles.borders.color', 1401 277 => 'rowstyles.borders.linewt', 1402 287 => 'rowstyles.borders.visible', 1403 267 => 'rowstyles.borders.color', 1404 278 => 'rowstyles.borders.linewt', 1405 288 => 'rowstyles.borders.visible', 1406 268 => 'rowstyles.borders.color', 1407 279 => 'rowstyles.borders.linewt', 1408 289 => 'rowstyles.borders.visible', 1409 269 => 'rowstyles.borders.color', 1410 90 => 'rowstyles.data_type', 1411 91 => 'rowstyles.unit_type', 1412 1 => 'rowstyles.format_string', 1413 ], 1414 ACDB_ALDIMOBJECTCONTEXTDATA_CLASS => [ 1415 100 => 'AcDbObjectContextData', 1416 70 => 'class_version', 1417 290 => 'is_default', 1418 100 => 'AcDbAnnotScaleObjectContextData', 1419 340 => 'scale', 1420 100 => 'AcDbDimensionObjectContextData', 1421 2 => 'name', 1422 10 => 'def_pt', 1423 293 => 'b293', 1424 294 => 'b294', 1425 140 => 'bd140', 1426 298 => 'b298', 1427 291 => 'b291', 1428 70 => 'flag', 1429 292 => 'b292', 1430 71 => 'bs71', 1431 280 => 'b280', 1432 295 => 'b295', 1433 296 => 'b296', 1434 297 => 'b297', 1435 100 => 'AcDbAlignedDimensionObjectContextData', 1436 11 => '_11pt', 1437 ], 1438 ACDB_BLKREFOBJECTCONTEXTDATA_CLASS => [ 1439 100 => 'AcDbObjectContextData', 1440 70 => 'class_version', 1441 290 => 'is_default', 1442 100 => 'AcDbAnnotScaleObjectContextData', 1443 340 => 'scale', 1444 ], 1445 ACDB_LEADEROBJECTCONTEXTDATA_CLASS => [ 1446 100 => 'AcDbObjectContextData', 1447 70 => 'class_version', 1448 290 => 'is_default', 1449 100 => 'AcDbAnnotScaleObjectContextData', 1450 340 => 'scale', 1451 70 => 'num_points', 1452 10 => 'points[0]', 1453 10 => 'points[1]', 1454 10 => 'points[2]', 1455 11 => 'x_direction', 1456 290 => 'b290', # arrowhead_on? 1457 12 => 'inspt_offset', 1458 13 => 'endptproj', 1459 ], 1460 ACDB_MLEADEROBJECTCONTEXTDATA_CLASS => [ 1461 100 => 'AcDbObjectContextData', 1462 70 => 'class_version', 1463 290 => 'defaultflag', 1464 100 => 'AcDbAnnotScaleObjectContextData', 1465 340 => 'scale', 1466 ], 1467 ACDB_TEXTOBJECTCONTEXTDATA_CLASS => [ 1468 100 => 'AcDbObjectContextData', 1469 70 => 'class_version', 1470 290 => 'is_default', 1471 100 => 'AcDbAnnotScaleObjectContextData', 1472 340 => 'scale', 1473 70 => 'flag', 1474 50 => 'rotation', 1475 10 => 'ins_pt', 1476 11 => 'alignment_pt', 1477 ], 1478 ACDB_MTEXTATTRIBUTEOBJECTCONTEXTDATA_CLASS => [ 1479 100 => 'AcDbObjectContextData', 1480 70 => 'class_version', 1481 290 => 'in_dwg', 1482 90 => 'is_default', 1483 100 => 'AcDbAnnotScaleObjectContextData', 1484 340 => 'scale', 1485 ], 1486 ACDB_MTEXTOBJECTCONTEXTDATA_CLASS => [ 1487 100 => 'AcDbObjectContextData', 1488 70 => 'class_version', 1489 290 => 'is_default', 1490 100 => 'AcDbAnnotScaleObjectContextData', 1491 340 => 'scale', 1492 70 => 'flag', 1493 11 => 'ins_pt', 1494 10 => 'x_axis_dir', 1495 40 => 'text_height', 1496 41 => 'rect_width', 1497 42 => 'extents_width', 1498 43 => 'extents_height', 1499 71 => 'attachment', 1500 72 => 'drawing_dir', 1501 73 => 'linespace_style', 1502 44 => 'linespace_factor', 1503 45 => 'bd45', 1504 74 => 'bs74', 1505 46 => 'rect_height', 1506 ], 1507 # keep it for dxf_test 1508 MULTILEADER => [ 1509 270 => 'class_version', 1510 70 => 'ctx.class_version', 1511 #0 => 'ctx.has_xdic_file', 1512 290 => 'ctx.is_default', 1513 340 => 'ctx.scale_handle', 1514 302 => 'LEADER{', 1515 #0 => 'ctx.num_leaders', 1516 290 => 'lev1.is_valid', 1517 291 => 'lev1.unknown', 1518 10 => 'lev1.connection', 1519 11 => 'lev1.direction', 1520 #0 => 'lev1.num_breaks', 1521 12 => 'lev1.breaks.start', 1522 13 => 'lev1.breaks.end', 1523 90 => 'lev1.index', 1524 40 => 'lev1.landing_distance', 1525 304 => 'LEADER_LINE{', 1526 #0 => 'lev2.num_points', 1527 10 => 'lev2.points', 1528 #0 => 'lev2.num_breaks', 1529 90 => 'lev2.segment_index', 1530 11 => 'lev2.breaks.start', 1531 12 => 'lev2.breaks.end', 1532 91 => 'lev2.index', 1533 170 => 'lev2.type', 1534 92 => 'lev2.color', 1535 340 => 'lev2.type_handle', 1536 171 => 'lev2.weight', 1537 40 => 'lev2.arrow_size', 1538 341 => 'lev2.arrow_handle', 1539 93 => 'lev2.flags', 1540 305 => '}', 1541 271 => 'lev1.attach_dir', 1542 303 => '}', 1543 40 => 'ctx.scale', 1544 10 => 'ctx.content_base', 1545 41 => 'ctx.text_height', 1546 140 => 'ctx.arrow_size', 1547 145 => 'ctx.landing_gap', 1548 174 => 'ctx.text_left', 1549 175 => 'ctx.text_right', 1550 176 => 'ctx.text_alignment', 1551 177 => 'ctx.attach_type', 1552 290 => 'ctx.has_content_txt', 1553 304 => 'ctx.txt.label', 1554 11 => 'ctx.txt.normal', 1555 340 => 'ctx.txt.style', 1556 12 => 'ctx.txt.location', 1557 13 => 'ctx.txt.direction', 1558 42 => 'ctx.txt.rotation', 1559 43 => 'ctx.txt.width', 1560 44 => 'ctx.txt.height', 1561 45 => 'ctx.txt.line_spacing_factor', 1562 170 => 'ctx.txt.line_spacing_style', 1563 90 => 'ctx.txt.color', 1564 171 => 'ctx.txt.alignment', 1565 172 => 'ctx.txt.flow', 1566 91 => 'ctx.txt.bg_color', 1567 141 => 'ctx.txt.bg_scale', 1568 92 => 'ctx.txt.bg_transparency', 1569 291 => 'ctx.txt.is_bg_fill', 1570 292 => 'ctx.txt.is_bg_mask_fill', 1571 173 => 'ctx.txt.col_type', 1572 293 => 'ctx.txt.is_height_auto', 1573 142 => 'ctx.txt.col_width', 1574 143 => 'ctx.txt.col_gutter', 1575 294 => 'ctx.txt.is_col_flow_reversed', 1576 #0 => 'ctx.txt.num_col_sizes', 1577 144 => 'ctx.txt.col_sizes', 1578 295 => 'ctx.txt.word_break', 1579 #0 => 'ctx.txt.unknown', 1580 296 => 'ctx.has_content_blk', 1581 341 => 'ctx.blk.block_table', 1582 14 => 'ctx.blk.normal', 1583 15 => 'ctx.blk.location', 1584 16 => 'ctx.blk.scale', 1585 46 => 'ctx.blk.rotation', 1586 93 => 'ctx.blk.color', 1587 47 => 'ctx.blk.transform', 1588 110 => 'ctx.base', 1589 111 => 'ctx.base_dir', 1590 112 => 'ctx.base_vert', 1591 297 => 'ctx.is_normal_reversed', 1592 273 => 'ctx.text_top', 1593 272 => 'ctx.text_bottom', 1594 301 => '}', 1595 340 => 'mleaderstyle', 1596 90 => 'flags', 1597 170 => 'type', 1598 91 => 'color', 1599 341 => 'ltype', 1600 171 => 'linewt', 1601 290 => 'landing', 1602 291 => 'dog_leg', 1603 41 => 'landing_dist', 1604 342 => 'arrow_head', 1605 42 => 'arrow_head_size', 1606 172 => 'style_content', 1607 343 => 'text_style', 1608 95 => 'text_left', 1609 95 => 'text_right', 1610 174 => 'text_angletype', 1611 175 => 'attach_type', 1612 92 => 'text_color', 1613 292 => 'text_frame', 1614 344 => 'block_style', 1615 93 => 'block_color', 1616 10 => 'block_scale', 1617 43 => 'block_rotation', 1618 176 => 'style_attachment', 1619 293 => 'is_annotative', 1620 #0 => 'num_arrowheads', 1621 94 => 'arrowheads.is_default', 1622 345 => 'arrowheads.arrowhead', 1623 #0 => 'num_blocklabels', 1624 330 => 'blocklabels.attdef', 1625 302 => 'blocklabels.label_text', 1626 177 => 'blocklabels.ui_index', 1627 44 => 'blocklabels.width', 1628 294 => 'neg_textdir', 1629 178 => 'ipe_alignment', 1630 179 => 'justification', 1631 45 => 'scale_factor', 1632 271 => 'attach_dir', 1633 273 => 'attach_top', 1634 272 => 'attach_bottom', 1635 295 => 'text_extended', 1636 ], 1637 POSITIONMARKER => [ # GEOPOSITIONMARKER 1638 100 => 'AcDbGeoPositionMarker', 1639 90 => 'class_version', 1640 10 => 'position', 1641 40 => 'radius', 1642 1 => 'notes', 1643 40 => 'landing_gap', 1644 290 => 'mtext_visible', 1645 280 => 'text_alignment', 1646 290 => 'enable_frame_text', 1647 101 => 'Embedded Object', 1648 ], 1649 EXTRUDEDSURFACE => [ 1650 #100 => AcDbModelerGeometry, 1651 70 => 'modeler_format_version', 1652 #100 => AcDbSurface, 1653 71 => 'u_isolines', 1654 72 => 'v_isolines', 1655 #100 => AcDbExtrudedSurface 1656 90 => 'class_version', 1657 10 => 'sweep_vector', 1658 40 => 'sweep_transmatrix', #x16 1659 42 => 'draft_angle', 1660 43 => 'draft_start_distance', 1661 44 => 'draft_end_distance', 1662 45 => 'twist_angle', 1663 48 => 'scale_factor', 1664 49 => 'align_angle', 1665 46 => 'sweep_entity_transmatrix', 1666 47 => 'path_entity_transmatrix', 1667 290 => 'solid', 1668 290 => 'sweep_alignment_flags', 1669 292 => 'align_start', 1670 293 => 'bank', 1671 294 => 'base_point_set', 1672 295 => 'sweep_entity_transform_computed', 1673 296 => 'path_entity_transform_computed', 1674 11 => 'reference_vector_for_controlling_twist', 1675 ], 1676 LOFTEDSURFACE => [ 1677 #100 => AcDbModelerGeometry, 1678 70 => 'modeler_format_version', 1679 #100 => AcDbSurface, 1680 71 => 'u_isolines', 1681 72 => 'v_isolines', 1682 #100 => AcDbLoftedSurface 1683 40 => 'loft_entity_transmatrix', #x16 1684 #90 => 'class_version', 1685 70 => 'plane_normal_lofting_type', 1686 41 => 'start_draft_angle', 1687 42 => 'end_draft_angle', 1688 43 => 'start_draft_magnitude', 1689 44 => 'end_draft_magnitude', 1690 290 => 'arc_length_parameterization', 1691 291 => 'no_twist', 1692 292 => 'align_direction', 1693 293 => 'simple_surfaces', 1694 294 => 'closed_surfaces', 1695 295 => 'solid', 1696 296 => 'ruled_surface', 1697 297 => 'virtual_guide', 1698 90 => 'num_cross_sections', 1699 310 => 'cross_sections', 1700 90 => 'num_guide_curves', 1701 310 => 'guide_curves', 1702 5 => 'path_curve', 1703 ], 1704 REVOLVEDSURFACE => [ 1705 #100 => AcDbModelerGeometry, 1706 70 => 'modeler_format_version', 1707 #100 => AcDbSurface, 1708 71 => 'u_isolines', 1709 72 => 'v_isolines', 1710 #100 => AcDbRevolvedSurface 1711 90 => 'class_version', 1712 90 => 'id', 1713 90 => 'num_bindata', 1714 310 => 'bindata', 1715 10 => 'axis_point', 1716 11 => 'axis_vector', 1717 40 => 'revolve_angle', 1718 41 => 'start_angle', 1719 42 => 'revolved_entity_transmatrix', 1720 43 => 'draft_angle', 1721 44 => 'draft_start_distance', 1722 45 => 'draft_end_distance', 1723 46 => 'twist_angle', 1724 290 => 'solid', 1725 291 => 'close_to_axis', 1726 ], 1727 SWEPTSURFACE => [ 1728 #100 => AcDbModelerGeometry, 1729 70 => 'modeler_format_version', 1730 #100 => AcDbSurface, 1731 71 => 'u_isolines', 1732 72 => 'v_isolines', 1733 #100 => AcDbSweptSurface 1734 90 => 'class_version', 1735 90 => 'swept_entity_id', 1736 90 => 'num_sweepdata', 1737 310 => 'sweepdata', 1738 90 => 'path_entity_id', 1739 90 => 'num_pathdata', 1740 310 => 'pathdata', 1741 40 => 'sweep_entity_transmatrix', 1742 41 => 'path_entity_transmatrix', 1743 42 => 'draft_angle', 1744 43 => 'draft_start_distance', 1745 44 => 'draft_end_distance', 1746 45 => 'twist_angle', 1747 48 => 'scale_factor', 1748 290 => 'solid', 1749 70 => 'sweep_alignment', 1750 292 => 'align_start', 1751 293 => 'bank', 1752 294 => 'base_point_set', 1753 295 => 'sweep_entity_transform_computed', 1754 296 => 'path_entity_transform_computed', 1755 11 => 'reference_vector_for_controlling_twist', 1756 ], 1757 NURBSURFACE => [ 1758 100 => 'AcDbModelerGeometry', 1759 70 => 'modeler_format_version', 1760 100 => 'AcDbSurface', 1761 71 => 'u_isolines', 1762 72 => 'v_isolines', 1763 100 => 'AcDbNurbSurface', 1764 170 => 'short170', 1765 290 => 'cv_hull_display', 1766 10 => 'uvec1', 1767 11 => 'vvec1', 1768 12 => 'uvec2', 1769 13 => 'vvec2', 1770 ], 1771 PLANESURFACE => [ 1772 #100 => AcDbModelerGeometry, 1773 70 => 'modeler_format_version', 1774 #100 => AcDbSurface, 1775 71 => 'u_isolines', 1776 72 => 'v_isolines', 1777 100 => 'AcDbPlaneSurface', 1778 90 => 'class_version', 1779 ], 1780 MESH => [ 1781 90 => 'class_version', 1782 # 100 => AcDbSubDMesh 1783 71 => 'dlevel', 1784 72 => 'is_watertight', 1785 91 => 'num_subdiv_vertex', 1786 10 => 'subdiv_vertex', 1787 92 => 'num_vertex', 1788 10 => 'vertex', 1789 93 => 'num_faces', 1790 90 => 'faces', 1791 94 => 'num_edges', 1792 90 => 'edges.from', 1793 90 => 'edges.to', 1794 95 => 'num_crease', 1795 # 90? BD crease 1796 ], 1797 GEOMAPIMAGE => [ 1798 # 100 => AcDbGeomapImage 1799 90 => 'class_version', 1800 10 => 'pt0', 1801 13 => 'size', 1802 70 => 'display_props', 1803 280 => 'clipping', 1804 281 => 'brightness', 1805 282 => 'contrast', 1806 283 => 'fade', 1807 ], 1808 UNDERLAY => [ 1809 10 => 'ins_pt', 1810 41 => 'scale', 1811 50 => 'angle', 1812 210 => 'extrusion', 1813 11 => 'clip_boundary->pt', 1814 280 => 'flag', 1815 281 => 'contrast', 1816 282 => 'fade', 1817 340 => 'definition_id', 1818 ], 1819 UNDERLAYDEFINITION => [ 1820 1 => 'filename', 1821 2 => 'name', 1822 ], 1823 VISUALSTYLE => [ 1824 2 => 'description', 1825 70 => 'style_type', 1826 177 => 'ext_lighting_model', 1827 291 => 'internal_only', 1828 71 => 'face_lighting_model', 1829 72 => 'face_lighting_quality', 1830 73 => 'face_color_mode', 1831 40 => 'face_opacity', 1832 41 => 'face_specular', 1833 90 => 'face_modifier', 1834 62 => 'color', 1835 420 => 'color.rgb', 1836 63 => 'face_mono_color', 1837 421 => 'face_mono_color.rgb', 1838 74 => 'edge_model', 1839 91 => 'edge_style', 1840 64 => 'edge_intersection_color', 1841 65 => 'edge_obscured_color', 1842 75 => 'edge_obscured_ltype', 1843 175 => 'edge_intersection_ltype', 1844 42 => 'edge_crease_angle', 1845 92 => 'edge_modifier', 1846 66 => 'edge_color', 1847 43 => 'edge_opacity', 1848 76 => 'edge_width', 1849 77 => 'edge_overhang', 1850 78 => 'edge_jitter', 1851 67 => 'edge_silhouette_color', 1852 79 => 'edge_silhouette_width', 1853 170 => 'edge_halo_gap', 1854 171 => 'edge_isolines', 1855 290 => 'edge_do_hide_precision', 1856 174 => 'edge_style_apply', 1857 93 => 'display_settings', 1858 44 => 'display_brightness', 1859 173 => 'display_shadow_type', 1860 45 => 'bd2007_45', 1861 ], 1862 HELIX => [ 1863 90 => 'major_version', 1864 91 => 'maint_version', 1865 10 => 'axis_base_pt.x', 1866 20 => 'axis_base_pt.y', 1867 30 => 'axis_base_pt.z', 1868 11 => 'start_pt.x', 1869 21 => 'start_pt.y', 1870 31 => 'start_pt.z', 1871 12 => 'axis_vector.x', 1872 22 => 'axis_vector.y', 1873 32 => 'axis_vector.z', 1874 40 => 'radius', 1875 41 => 'turns', 1876 42 => 'height', 1877 290 => 'handedness', 1878 280 => 'constraint_type', 1879 ], 1880 ACDBDETAILVIEWSTYLE => [ 1881 100 => 'AcDbModelDocViewStyle', 1882 70 => 'class_version', 1883 3 => 'name', 1884 290 => 'is_modified_for_recompute', 1885 100 => 'AcDbDetailViewStyle', 1886 70 => 'identifier_placement', 1887 90 => 'model_edge', 1888 280 => 'show_arrowheads', 1889 71 => 'connection_line_weight', 1890 62 => 'connection_line_color', 1891 62 => 'identifier_color', 1892 62 => 'arrow_symbol_color', 1893 62 => 'boundary_line_color', 1894 62 => 'viewlabel_text_color', 1895 40 => 'identifier_height', 1896 42 => 'identifier_offset', 1897 340 => 'identifier_style', 1898 340 => 'arrow_symbol', 1899 40 => 'arrow_symbol_size', 1900 71 => 'boundary_line_weight', 1901 340 => 'boundary_line_type', 1902 340 => 'viewlabel_text_style', 1903 340 => 'connection_line_type', 1904 40 => 'viewlabel_text_height', 1905 300 => 'viewlabel_field', 1906 42 => 'viewlabel_offset', 1907 70 => 'viewlabel_attachment', 1908 72 => 'viewlabel_alignment', 1909 90 => 'viewlabel_pattern', 1910 280 => 'show_viewlabel', 1911 71 => 'borderline_weight', 1912 62 => 'borderline_color', 1913 340 => 'borderline_type', 1914 ], 1915 ACDBSECTIONVIEWSTYLE => [ 1916 100 => 'AcDbModelDocViewStyle', 1917 70 => 'class_version', 1918 3 => 'name', 1919 290 => 'is_modified_for_recompute', 1920 300 => 'description', 1921 90 => 'identifier_exclude_characters', 1922 100 => 'AcDbSectionViewStyle', 1923 62 => 'identifier_color', 1924 40 => 'identifier_height', 1925 62 => 'plane_line_color', 1926 42 => 'identifier_offset', 1927 300 => 'viewlabel_text', 1928 40 => 'identifier_position', 1929 90 => 'viewlabel_pattern', 1930 62 => 'arrow_symbol_color', 1931 90 => 'hatch_pattern', 1932 62 => 'bend_line_color', 1933 40 => 'arrow_symbol_size', 1934 40 => 'arrow_position', 1935 62 => 'viewlabel_text_color', 1936 40 => 'bend_line_length', 1937 62 => 'hatch_color', 1938 62 => 'hatch_bg_color', 1939 340 => 'identifier_style', 1940 340 => 'arrow_start_symbol', 1941 340 => 'arrow_end_symbol', 1942 40 => 'arrow_symbol_extension_length', 1943 71 => 'plane_line_weight', 1944 340 => 'plane_line_type', 1945 340 => 'bend_line_type', 1946 340 => 'viewlabel_text_style', 1947 0 => 'bend_line_weight', 1948 0 => 'end_line_length', 1949 40 => 'viewlabel_text_height', 1950 300 => 'viewlabel_field', 1951 42 => 'viewlabel_offset', 1952 70 => 'viewlabel_attachment', 1953 72 => 'viewlabel_alignment', 1954 0 => 'hatch_scale', 1955 0 => 'hatch_angles', 1956 0 => 'hatch_transparency', 1957 290 => 'is_continuous_labeling', 1958 290 => 'show_arrowheads', 1959 290 => 'show_viewlabel', 1960 290 => 'show_all_plane_lines', 1961 290 => 'show_all_bend_indentifiers', 1962 290 => 'show_end_and_bend_lines', 1963 ], 1964 SECTIONOBJECT => [ 1965 # AcDbSection 1966 90 => 'state', 1967 91 => 'flags', 1968 1 => 'name', 1969 10 => 'vert_dir', 1970 40 => 'top_height', 1971 41 => 'bottom_height', 1972 70 => 'indicator_alpha', 1973 62 => 'indicator_color', 1974 92 => 'num_verts', 1975 11 => 'verts.x', 1976 21 => 'verts.y', 1977 31 => 'verts.z', 1978 93 => 'num_blverts', 1979 12 => 'blverts.x', 1980 22 => 'blverts.y', 1981 32 => 'blverts.z', 1982 360 => 'section_settings', 1983 ], 1984 LAYERFILTER => [ 1985 2 => 'name', 1986 3 => 'description', 1987 ], 1988 LAYOUTPRINTCONFIG => [ 1989 93 => 'flag', 1990 ], 1991 ATEXT => [ 1992 1 => 'text_value', 1993 2 => 't2', 1994 3 => 't3', 1995 7 => 'style', 1996 10 => 'center', 1997 40 => 'radius', 1998 41 => 'xscale', 1999 42 => 'text_size', 2000 43 => 'char_spacing', 2001 44 => 'offset_from_arc', 2002 45 => 'right_offset', 2003 46 => 'left_offset', 2004 50 => 'start_angle', 2005 51 => 'end_angle', 2006 70 => 'is_reverse', 2007 71 => 'text_direction', 2008 72 => 'alignment', 2009 73 => 'text_position', 2010 74 => 'font_19', 2011 75 => 'bs2', 2012 76 => 'is_underlined', 2013 77 => 'bs1', 2014 78 => 'font', 2015 79 => 'is_shx', 2016 90 => 'color.index', 2017 210 => 'extrusion', 2018 280 => 'wizard_flag', 2019 330 => 'arc_handle', 2020 ], 2021 RTEXT => [ 2022 10 => 'pt', 2023 210 => 'extrusion', 2024 50 => 'rotation', 2025 50 => 'height', 2026 7 => 'style', 2027 70 => 'flags', 2028 1 => 'text_value', 2029 ], 2030 ACDB_BLOCKREPRESENTATION_DATA => [ 2031 70 => 'flag', 2032 340 => 'block', 2033 ], 2034 ACMECOMMANDHISTORY => [ 2035 ], 2036 ACMESCOPE => [ 2037 ], 2038 ACMESTATEMGR => [ 2039 ], 2040}; 2041 2042my $firstline = "/* ex: set ro ft=c: -*- mode: c; buffer-read-only: t -*- */\n" 2043 . "/* generated by make regen-unknown, do not modify */\n\n"; 2044print $f0 $firstline; 2045print $f0 "// name, dxf, handle, bytes, is_entity, num_bits, commonsize, hdloff, ". 2046 "strsize, hdlsize, bitsize, fieldptr\n"; 2047print $f1a $firstline; 2048print $f2 $firstline; 2049my ($f, $f1, $foundobj, $prevdxf, $prevobj, $foundOBJECTS); 2050my $seekfirstobj = 0; 2051 2052LINE: 2053while (<>) { 2054 my @F = split(' '); 2055 2056 my $obj = substr($F[1],1,-2); # "MATERIAL", 2057 my $log = substr($F[2],1,-2); # "xxx.log", 2058 my $dxf = $F[5]; 2059 my $fdxf = substr($dxf, 1, -2); 2060 if ($dxf eq 'NULL,') { 2061 if (-f "$dir/../$fdxf") { 2062 warn "$dxf magically re-appeared\n"; 2063 } else { 2064 if (!exists $skip{$log}) { 2065 warn "skip no dxf for $log\n"; 2066 $skip{$log}++; 2067 } 2068 next LINE; # -n 2069 } 2070 } 2071 if ($dxf !~ /\.dxf",/) { 2072 warn "skip wrong dxf $dxf in $_\n"; 2073 next LINE; # -n 2074 } 2075 if (!-f $fdxf) { 2076 if (!-f "../$fdxf") { 2077 $fdxf = "$dir/../$dxf"; 2078 if (!-f "$fdxf") { 2079 warn "$fdxf not found"; 2080 } 2081 } else { 2082 $fdxf = "../$fdxf"; 2083 } 2084 } 2085 #next LINE if $F[0] =~ m|//{|; # skip duplicates 2086 $dxf = substr($dxf, 1, -2); 2087 my $hdl = "".substr($F[3],2,-1); # 0xXXX, 2088 my $hexhdl = hex($hdl); 2089 my $bytes = substr($F[4],1,-2); 2090 my $is_entity = substr($F[6],0,-1); 2091 my $num_bits = substr($F[7],0,-1); 2092 my $commonsize = substr($F[8],0,-1); 2093 my $hdloff = substr($F[9],0,-1); 2094 my $strsize = substr($F[10],0,-1); 2095 my $hdlsize = substr($F[11],0,-1); 2096 my $bitsize = substr($F[12],0,-1); 2097 if ($skip{"$obj-$hdl-$num_bits"}) { # skip empty unknowns 2098 warn "skip empty $obj-$hdl-$num_bits $dxf\n"; 2099 next LINE; 2100 } 2101 # picat runs out of memory there 2102 if ($num_bits > 50000) { 2103 warn "skip overlarge $obj-$hdl-$num_bits $dxf\n"; 2104 next LINE; 2105 } 2106 2107 my $unknown = pack ("H*", $bytes); 2108 $unknown = join("", map { sprintf("\\%03o", $_) } unpack("C*", $unknown)); 2109 $unknown = substr($unknown, 0, $num_bits); 2110 2111 if (exists $dupl{"$obj-$unknown"}) { 2112 warn "skip duplicate $obj-$hdl-$num_bits $dxf\n"; 2113 next LINE; 2114 } else { 2115 $dupl{"$obj-$unknown"}++; 2116 } 2117 #warn "$dxf: $obj HANDLE($hdl)\n"; 2118 # 9080187 5160203 9080187 201AA 51E0204 90C0202 35200204 20640A8 2D22020C 90A01D1 2119 #if ($hdl =~ /^([0-9A-F]){1,4}0([0-9A-F]+)$/) { 2120 # $hdl = $2; 2121 # #warn "=> try HANDLE($hdl)\n"; 2122 #} 2123 2124 # linear search in dxf file for this obj-handle 2125 2126 my ($foundhdl, @FIELD, $in_entity); 2127 my ($react, $xdict, $seen100, @avail, @availcopy); 2128 2129 if (!$f or $fdxf ne $prevdxf) { 2130 close $f if $f; 2131 $foundOBJECTS = $seekfirstobj ? 1 : 0; 2132 $seekfirstobj = 0; 2133 open $f, "$fdxf" or next LINE; 2134 $prevdxf = $fdxf; 2135 } 2136 if ($obj ne $prevobj) { 2137 # FIXME: Only needed when ENTITIES changes to OBJECTS. Within a SECTION 2138 # the handles strictly rise. 2139 seek $f, $seekfirstobj, 0; 2140 # also enforce a new dxffile, as the prev obj might have been be after the current one 2141 # and we cannot walk back. 2142 $prevobj = $obj; 2143 print $f1a "#include \"alldxf_$obj.inc\"\n"; 2144 close $f1 if $f1; 2145 # objects ARE sorted 2146 open $f1, ">", "$dir/alldxf_$obj.inc" or next LINE; 2147 print $f1 $firstline; 2148 print $f1 "// code, value, bits, pre_bits, num_bits, type, name, num, pos[]\n"; 2149 2150# } else { 2151# open $f1, ">>", "$dir/alldxf_$obj.inc" or next LINE; 2152 } 2153 2154 if ($obj =~ /^(?:PDF|DWF|DGN)UNDERLAY/) { 2155 @avail = @{$known->{UNDERLAY}}; 2156 } 2157 elsif ($obj =~ /^(?:PDF|DWF|DGN)DEFINITION/) { 2158 @avail = @{$known->{UNDERLAYDEFINITION}}; 2159 } 2160 @avail = @{$known->{$obj}} if exists $known->{$obj}; 2161 @availcopy = @avail; 2162 2163 # cannot walk back 2164 while (my $code = <$f>) { 2165 $code =~ s/\cM\cJ//; 2166 my $v = <$f>; 2167 my $name = ""; 2168 $v =~ s/\cM\cJ//; 2169 $v =~ s/^\s*//; 2170 $foundOBJECTS = ($code == ' 2' && $v =~ /^(ENTITIES|OBJECTS)$/) ? 1 : 0; 2171 if ($code eq ' 0') { # next obj 2172 $foundobj = $v eq $obj; 2173 if ($foundhdl) { 2174 $foundhdl = 0; 2175 # search FIELD for duplicates 2176 my %sorted = (); 2177 for (@FIELD) { 2178 my $t = dxf_type($_->[0]); 2179 $sorted{"$t:$_->[1]"}++; 2180 } 2181 for (@FIELD) { 2182 my $t = dxf_type($_->[0]); 2183 my $count = $sorted{"$t:$_->[1]"}; 2184 emit_field($f1, $obj, $count, @$_); 2185 } 2186 @FIELD = (); 2187 print $f1 " { 0, NULL, NULL, 0, BITS_UNKNOWN, NULL, 0, {-1,-1,-1,-1,-1}}\n};\n"; 2188 last; 2189 } 2190 } 2191 elsif ($code eq ' 5') { 2192 $seekfirstobj = tell $f if !$seekfirstobj && $foundOBJECTS; 2193 if ($foundobj) { 2194 $name = "handle"; 2195 $foundhdl = $v eq $hdl; 2196 if ($foundhdl) { 2197 warn "found $obj $hdl in $dxf\n"; 2198 print $f0 " { \"$obj\", \"$dxf\", 0x$hdl, /* $i */\n"; 2199 printf $f0 " \"%s\", %d, %d, %d, %d, %d, %d, %d, NULL },\n", 2200 $unknown, $is_entity, $num_bits, $commonsize, $hdloff, $strsize, 2201 $hdlsize, $bitsize; 2202 2203 print $f1 "/* $obj $hdl in $dxf */\n"; 2204 print $f1 "static struct _unknown_field unknown_dxf_${obj}_${i}\[\] = {\n"; 2205 print $f2 "unknown_dxf\[$i\].fields = unknown_dxf_${obj}_${i};\n"; 2206 @FIELD = (); 2207 @avail = @availcopy; 2208 $i++; 2209 } 2210 } 2211 elsif ($foundOBJECTS && hex($v) > $hexhdl) { 2212 warn "not found $obj $hdl in $dxf\n"; 2213 last; 2214 } 2215 } 2216 if ($foundhdl) { 2217 my $x; 2218 $code =~ s/\s//g; 2219 # fill-in the field name, from heuristics and some already known classes 2220 if ($code == 5) { 2221 $name = "handle"; 2222 } elsif ($code == 330) { 2223 if ($react) { 2224 $react--; 2225 $name = "reactors[$react]"; 2226 $react++; $react++; 2227 } elsif (!$seen100) { 2228 $name = "ownerhandle"; 2229 } 2230 } elsif ($code == 360 and $xdict) { 2231 $name = "xdicobjhandle"; 2232 } elsif ($code == 100) { 2233 if ($v eq 'AcDbEntity') { $in_entity++ } 2234 else { $in_entity = 0 } 2235 $seen100++; 2236 if ($v eq 'AcDbModelerGeometry') { 2237 push @FIELD, [$code, $v, $name]; 2238 push @FIELD, [1, "ACIS BinaryFile", "bin_sat_data"]; 2239 next; 2240 } 2241 } elsif ($code == 102) { 2242 if ($v eq '{ACAD_REACTORS') { 2243 $react = 1; 2244 } elsif ($v eq '{ACAD_XDICTIONARY') { 2245 $xdict = 1; 2246 } elsif ($v eq '}') { 2247 $xdict = 0; $react = 0; 2248 } 2249 } elsif ($code == 430 && $obj eq 'DBCOLOR' && 2250 $v =~ /DIC COLOR GUIDE\(R\)\$DIC (\d+)/) 2251 { 2252 push @FIELD, [430, "DIC $1", "name"]; 2253 $v = "DIC COLOR GUIDE(R)"; 2254 $name = "catalog"; 2255 } elsif ($x = find_name($code, $obj, \@avail, \@FIELD)) { 2256 $name = $x; 2257 @avail = @availcopy unless @avail; # if exhausted via loop, restart 2258 } elsif ($code == 8) { 2259 $name = "layer"; 2260 } elsif ($code >= 60 && $code <= 65) { 2261 $name = "color"; 2262 } elsif ($code == 7) { 2263 $name = "ltype"; 2264 } 2265 if ($in_entity && is_common_entity($code, $v, $name)) { 2266 push @FIELD, [$code, $v, $name, 1]; 2267 } elsif ($code >= 1000) { # no EED 2268 push @FIELD, [$code, $v, $name, 1]; 2269 } elsif ($code == 5 && !$seen100) { 2270 push @FIELD, [$code, $v, $name, 1]; 2271 } else { 2272 push @FIELD, [$code, $v, $name]; 2273 } 2274 } 2275 } 2276 # stay in there. only close on new obj or changed dxf 2277 #close $f; 2278} 2279close $f; close $f0; close $f1; close $f1a; close $f2; 2280 2281sub is_common_entity { 2282 my ($code, $v, $name) = @_; 2283 return 1 if $code == 8 or $code == 6 or $code == 7 or $code == 62 or 2284 $code == 92 or $code == 160 or 2285 $code == 310 or $code == 420 or $code == 440; 2286} 2287 2288sub dxf_type { 2289 my $code = shift; 2290 if ($code < 5) { 2291 return STR; 2292 } elsif ($code == 5) { 2293 return HDL; 2294 } elsif ($code < 10) { 2295 return STR; 2296 } elsif ($code < 60) { 2297 return DBL; 2298 } elsif ($code < 100) { 2299 return NUM; 2300 } elsif ($code == 102) { 2301 return STR; 2302 } elsif ($code == 105) { 2303 return HDL; 2304 } elsif ($code < 110) { 2305 return STR; 2306 } elsif ($code < 160) { 2307 return DBL; 2308 } elsif ($code < 210) { 2309 return NUM; 2310 } elsif ($code < 240) { 2311 return DBL; 2312 } elsif ($code < 289) { 2313 return NUM; 2314 } elsif ($code < 299) { 2315 return B; 2316 } elsif ($code < 320) { 2317 return STR; 2318 } elsif ($code < 370) { 2319 return HDL; 2320 } elsif ($code < 390) { 2321 return NUM; 2322 } elsif ($code < 400) { 2323 return HDL; 2324 } elsif ($code < 410) { 2325 return NUM; 2326 } elsif ($code < 420) { 2327 return STR; 2328 } elsif ($code < 430) { 2329 return NUM; 2330 } elsif ($code < 440) { 2331 return STR; 2332 } elsif ($code < 460) { 2333 return NUM; 2334 } elsif ($code < 470) { 2335 return DBL; 2336 } elsif ($code < 480) { 2337 return STR; 2338 } elsif ($code < 481) { 2339 return HDL; 2340 } elsif ($code < 1010) { # eed fields: 2341 return STR; 2342 } elsif ($code < 1060) { 2343 return DBL; 2344 } elsif ($code <= 1071) { 2345 return NUM; 2346 } 2347 warn "unknown DXF code $code\n"; 2348 return UNKNOWN; 2349} 2350 2351sub find_name { 2352 my ($code, $obj, $avail, $fieldsref) = @_; 2353 my @f = @$avail; 2354 return undef if !@f; 2355 my $len = scalar @f; 2356 for my $j (0..(2*$len)-1) { 2357 my $c = $f[$j]; 2358 if ($c == $code) { 2359 # delete ($c,$n) from $avail 2360 splice @$avail, $j, 2; 2361 my $n = $f[$j+1]; 2362 return $n; 2363 } 2364 } 2365 return undef; 2366} 2367 2368sub emit_field { 2369 my ($f, $obj, $count, $code, $v, $name, $hidden) = @_; 2370 #warn "$code: $v\n"; 2371 #return if $code == 100; 2372 $v =~ s/\\/\\\\/g; 2373 $v =~ s/"/\\"/g; 2374 # encode $v via cquote 2375 my $vq = B::cstring ($v); 2376 $count = 0 unless $count; 2377 # code, value, bytes, bitsize, type, name, num, pos[] 2378 if ($hidden) { 2379 print $f " //"; 2380 } else { 2381 print $f " "; 2382 } 2383 my $bits = 0; 2384 my $type = "BITS_UNKNOWN"; 2385 # need stronger hints for some fields 2386 if ($obj eq 'DIMASSOC') { 2387 if ($name =~ /(osnap_type|trans_space_flag)$/) { 2388 $type = "BITS_RC"; 2389 $bits = 8; 2390 } 2391 elsif ($name =~ /has_lastpt_ref/) { # weird dxf code 2392 $type = "BITS_B"; 2393 $bits = 1; 2394 } 2395 elsif ($name =~ /\.osnap_/) { 2396 $type = "BITS_BD"; 2397 } 2398 } 2399 print $f "{ $code, $vq, NULL, $bits, $type, \"$name\", $count, {-1,-1,-1,-1,-1} },\n"; 2400} 2401