dwg file format(AutoCAD DWG Îļþ¸ñʽ˵Ã÷)
layers :=
( [size](
byte : flag,
char[32] : name,
word : used,
word : color,
word : style,
check_2
)
)[nr] : layer_info,
check_32. the style table styles :=
( [size](
byte : flag,
char[32] : name,
word, double[3], byte, double, char[128],
check_2
)
)[nr] : style_info,
check_32. the line-type table ltypes :=
( [size](
byte : flag,
char[32] : name,
word, char[48], byte,
byte, double[13],
check_2
)
)[nr] : ltype_info,
check_32 . the application identifier table appids :=
( [size](
byte : flag,
char[32] : name,
word,
check_2
)
)[nr] : appid_info,
check_32 . the other tables table :=
( [size](
byte : flag,
[size - 3]byte*,
check_2
)
)[nr],
check_32 . the entities (experimental) entities :=
( byte : kind,
byte : flag,
word : length,
[length - 4](
word : layer,
word : opts,
if (flag & 1) then byte : color else color = 0 fi,
if (flag & 0x40) then byte : extra else extra = 0 fi,
if (extra & 2) then xdata fi,
if (flag & 2) then word : type fi,
if (flag & 4 && kind > 2 && kind != 22) then double : z fi,
if (flag & 8) then double : th fi,
if (flag & 0x20) then handle fi,
if (extra & 4) then word : paper fi,
switch (kind)
case 1: /* line */
point(!(flag & 4)) : l10,
point(!(flag & 4)) : l11,
if (opts & 1) then point(true) : l210 fi,
if (opts & 2) then double : l38 fi,
case 2: /* point */
point(!(flag & 4)) : l10,
if (opts & 1) then point(true) : l210 fi,
if (opts & 2) then double : l38 fi,
case 3: /* circle */
point(false) : l10,
double : l40,
if (opts & 1) then point(true) : l210 fi,
if (opts & 2) then double : l38 fi,
case 4: /* shape */
point(false) : l10,
word : l2,
if (opts & 1) then point(true) : l210 fi,
if (opts & 2) then double : l38 fi,
case 7: /* text */
point(false) : l10,
double : l40,
string : l1,
if (opts & 1) then double : l50 fi,
if (opts & 2) then double : l41 fi,
if (opts & 4) then double : l51 fi, /*?*/
if (opts & 8) then byte : l7 fi,
if (opts & 0x10) then byte : l71 fi,
if (opts & 0x20) then byte : l72 fi,
if (opts & 0x40) then point(false) : l11 fi,
if (opts & 0x100) then byte : l73 fi,
case 8: /* arc */
point(false) : l10,
double : l40,
double : l50,
double : l51,
if (opts & 1) then point(true) : l210 fi,
if (opts & 2) then double : l38 fi,
case 9: /* trace */
point(false) : l10,
point(false) : l11,
point(false) : l12,
point(false) : l13,
if (opts & 1) then point(true) : l210 fi,
if (opts & 2) then double : l38 fi,
case 11: /* solid */
point(false) : l11,
point(false) : l12,
point(false) : l13,
point(false) : l14,
if (opts & 1) then point(true) : l210 fi,
if (opts & 2) then double : l38 fi
case 12: /* block */
point(false) : l10, /*?*/
string : l1, /* if (opts & 1) then ? */
if (opts & 2) then string : l3 fi
case 13: /* endblk */
case 14: /* insert */
word : l1,
point(false) : l10,
if (opts & 1) then double : l41 fi,
if (opts & 2) then double : l42 fi,
if (opts & 4) then double : l43 fi,
if (opts & 8) then double : l50 fi,
if (opts & 0x10) then byte : l70 fi, /*?*/
if (opts & 0x20) then byte : l71 fi, /*?*/
if (opts & 0x40) then double : l44 fi, /*?*/
if (opts & 0x80) then double : l45 fi /*?*/
case 15: /* attdef */
point(false) : l10,
double : l40,
string : l1,
string : l3,
string : l2,
byte : l70,
if (opts & 1) then byte : l73 fi, /*?*/
if (opts & 2) then double : l50 fi, /*?*/
if (opts & 4) then double : l41 fi,
if (opts & 8) then double : l42 fi,
if (opts & 0x10) then byte : l7 fi,
if (opts & 0x20) then byte : l71 fi,
if (opts & 0x40) then byte : l72 fi,
if (opts & 0x80) then point(false) : l11 fi, /*?*/
if (opts & 0x100) then point(true) : l210 fi,
if (opts & 0x200) then double : l38 fi /*?*/
case 16: /* attrib */
point(false) : l10,
double : l40,
string : l1,
string : l2,
byte : l70,
if (opts & 1) then byte : l73 fi, /*?*/
if (opts & 2) then double : l50 fi, /*?*/
if (opts & 4) then double : l41 fi,
if (opts & 8) then double : l42 fi,
if (opts & 0x10) then byte : l7 fi,
if (opts & 0x20) then byte : l71 fi,
if (opts & 0x40) then byte : l72 fi,
if (opts & 0x80) then point(false) : l11 fi, /*?*/
if (opts & 0x100) then point(true) : l210 fi,
if (opts & 0x200) then double : l38 fi /*?*/
case 17: /* s/bend */
long
case 19: /* pline */
if (opts & 1) then byte : l70 fi,
if (opts & 2) then double : l40 fi, /*?*/
if (opts & 4) then byte : l71 fi, /*?*/
if (opts & 8) then byte : l72 fi, /*?*/
if (opts & 0x10) then byte : l73 fi, /*?*/
if (opts & 0x20) then byte : l74 fi, /*?*/
if (opts & 0x40) then byte : l75 fi /*?*/
case 20: /* vertex */
point(false) : l10,
if (opts & 1) then double : l40 fi, /*?*/
if (opts & 2) then double : l41 fi, /*?*/
if (opts & 4) then byte : l70 fi, /*?*/
if (opts & 8) then double : l50 fi /*?*/
case 22: /* 3dface */
point(!(flag & 4)) : l10,
point(!(flag & 4)) : l11,
point(!(flag & 4)) : l12,
point(!(flag & 4)) : l13
case 23: /* dim */
word : l1,
point(true) : l10,
point(false) : l11, /*?*/
if (opts & 2) then byte : l70 fi,
if (opts & 1) then point(true) : l12 fi, /*?*/
if (opts & 4) then string : l1 fi,
if (opts & 8) then point(true) : l13 fi,
if (opts & 0x10) then point(true) : l14 fi,
if (opts & 0x20) then point(true) : l15 fi,
if (opts & 0x40) then point(true) : l16 fi,
if (opts & 0x80) then double : l40 fi,
if (opts & 0x100) then double : l50 fi,
if (opts & 0x200) then double : l51 fi,
if (opts & 0x400) then double : l52 fi,
if (opts & 0x800) then double : l53 fi
case 24: /* vport */
point(true) : l10,
double : l40,
double : l41,
word : l68
endswitch
check_2
)
)* : entities.±¾ÐÂÎŹ² 3Ò³,µ±Ç°ÔÚµÚ 2Ò³ 1 2 3 |