EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1178|回复: 14
打印 上一主题 下一主题

[资料] DWG文件格式

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 15:31:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. dwg file formatan attempt to specify the dwg (r12) file format using the bff grammar for
  2. binary files.acknowledgementsi would like to thank reini urban <rurban@sbox.tu-graz.ac.at> for his
  3. contributions.definition of the elementary elementstypedef word word :=
  4.      byte : b1, byte : b2
  5.      return (word)f | ((word)s << 8).
  6. typedef longword longp :=
  7.      byte : b1, byte : b2, byte : b3, byte : b4
  8.      return (longword)b1 | ((longword)b2 << 8)
  9.           | ((longword)b3 << 16) | ((longword)b4 << 24).
  10. typedef longword longword :=
  11.      byte : b1, byte : b2, byte : b3, byte : b4
  12.      return (longword)b1 | ((longword)b2 << 8)
  13.           | ((longword)b3 << 16) | ((longword)b4 << 24).definition of the whole fileroot dwg_file :=
  14. [begin : end](
  15.   char[12] : version,
  16.   byte, word, word, word, byte,
  17.   longp : p_entities,  longp : p_entend,
  18.   longp : p_blocksec,  byte[4],  longp : p_bsend,  byte[4],
  19.   tablepos : block_table,
  20.   tablepos : layer_table,
  21.   tablepos : style_table,
  22.   tablepos : ltype_table,
  23.   tablepos : view_table,
  24.   header,  [cur : 0x3ef]byte*,
  25.   tablepos : ucs_table,  [cur : 0x500]byte*,
  26.   tablepos : vport_table,  byte[8],
  27.   tablepos : appid_table,  byte[6],
  28.   tablepos : dimstyle_table,  [cur : 0x69f]byte*,
  29.   tablepos : p13_table,  bytes[38],
  30.   [p_entities : p_entend]entities : ents,   byte[19],
  31.   [block_table.start : ]blocks : block_table,
  32.   [layer_table.start : ]layers : layer_table,
  33.   [style_table.start : ]styles : style_table,
  34.   [ltype_table.start : ]ltypes : ltype_table,
  35.   [view_table.start : ]table : view_table,
  36.   [ucs_table.start : ]table : ucs_table,
  37.   [vport_table.start : vport_table.end]table : vport_table,
  38.   [appid_table.start : ]appids : appid_table,
  39.   [dimstyle_table.start : ]table : dimstyle_table,
  40.   [p13_table.start : ]table : p13_table,
  41.   [p_blocksec : p_bsend]entities : blocks,  bytes[36],
  42.   longp = p_entities,  longp = p_entend,
  43.   longp = blocksec,  longp = bsend,
  44.   bytes[12],
  45.   bytes[6],
  46.   longp = block_table.start,   bytes[6],
  47.   longp = layer_table.start,   bytes[6],
  48.   longp = style_table.start,   bytes[6],
  49.   longp = ltype_table.start,   bytes[6]
  50.   longp = view_table.start,   bytes[6],
  51.   longp = ucs_table.start,   bytes[6],
  52.   longp = vport_table.start,   bytes[6],
  53.   longp = appid_table.start,   bytes[6],
  54.   longp = dimstyle_table.start,   bytes[6],
  55.   longp = p13_table.start,   bytes[6],
  56.   longp  bytes*,
  57. ).a table positiontablepos :=
  58.    word : size,
  59.    long : nr,
  60.    long : start,the headerheader :=
  61.    word,
  62.    point(true) : inbase,
  63.    point(true) : extmin,
  64.    point(true) : extmax,
  65.    point(false) : limmin,
  66.    point(false) : limmax,
  67.    double[4],
  68.    byte[2],
  69.    double[2],
  70.    byte[56],
  71.    double[3],
  72.    byte[18],
  73.    double .the block tableblocks :=
  74.   ( [size](
  75.       byte : flag,
  76.       char[32] : name,
  77.       word : used,
  78.       byte, word, byte, word,
  79.       check_2
  80.     )
  81.   )[nr] : blocks_info,
  82.   check_32.check_2 := byte[2].
  83. check_32 := byte[32].the layer tablelayers :=
  84.   ( [size](
  85.       byte : flag,
  86.       char[32] : name,
  87.       word : used,
  88.       word : color,
  89.       word : style,
  90.       check_2
  91.     )
  92.   )[nr] : layer_info,
  93.   check_32.the style tablestyles :=
  94.   ( [size](
  95.       byte : flag,
  96.       char[32] : name,
  97.       word, double[3], byte, double, char[128],
  98.       check_2
  99.     )
  100.   )[nr] : style_info,
  101.   check_32.the line-type tableltypes :=
  102.   ( [size](
  103.       byte : flag,
  104.       char[32] : name,
  105.       word,  char[48],  byte,
  106.       byte,  double[13],
  107.       check_2
  108.     )
  109.   )[nr] : ltype_info,
  110.   check_32 .the application identifier tableappids :=
  111.   ( [size](
  112.       byte : flag,
  113.       char[32] : name,
  114.       word,
  115.       check_2
  116.     )
  117.   )[nr] : appid_info,
  118.   check_32 .the other tablestable :=
  119.   ( [size](
  120.       byte : flag,
  121.       [size - 3]byte*,
  122.       check_2
  123.     )
  124.   )[nr],
  125.   check_32 .the entities(experimental)entities :=
  126.   ( byte : kind,
  127.     byte : flag,
  128.     word : length,
  129.     [length - 4](
  130.       word : layer,
  131.       word : opts,
  132.       if (flag & 1) then byte : color else color = 0 fi,
  133.       if (flag & 0x40) then byte : extra else extra = 0 fi,
  134.       if (extra & 2) then xdata fi,
  135.       if (flag & 2) then word : type fi,
  136.       if (flag & 4 && kind > 2 && kind != 22) then double : z fi,
  137.       if (flag & 8) then double : th fi,
  138.       if (flag & 0x20) then handle fi,
  139.       if (extra & 4) then word : paper fi,
  140.       switch (kind)
  141.       case 1:  /* line */
  142.         point(!(flag & 4)) : l10,
  143.         point(!(flag & 4)) : l11,
  144.         if (opts & 1) then point(true) : l210 fi,
  145.         if (opts & 2) then double : l38 fi,
  146.       case 2:  /* point */
  147.         point(!(flag & 4)) : l10,
  148.         if (opts & 1) then point(true) : l210 fi,
  149.         if (opts & 2) then double : l38 fi,
  150.       case 3:  /* circle */
  151.         point(false) : l10,
  152.         double : l40,
  153.         if (opts & 1) then point(true) : l210 fi,
  154.         if (opts & 2) then double : l38 fi,
  155.       case 4:  /* shape */
  156.         point(false) : l10,
  157.         word : l2,
  158.         if (opts & 1) then point(true) : l210 fi,
  159.         if (opts & 2) then double : l38 fi,
  160.       case 7: /* text */
  161.         point(false) : l10,
  162.         double : l40,
  163.         string : l1,
  164.         if (opts & 1) then double : l50 fi,
  165.         if (opts & 2) then double : l41 fi,
  166.         if (opts & 4) then double : l51 fi,             /*?*/
  167.         if (opts & 8) then byte : l7 fi,
  168.         if (opts & 0x10) then byte : l71 fi,
  169.         if (opts & 0x20) then byte : l72 fi,
  170.         if (opts & 0x40) then point(false) : l11 fi,
  171.         if (opts & 0x100) then byte : l73 fi,
  172.       case 8:  /* arc */
  173.         point(false) : l10,
  174.         double : l40,
  175.         double : l50,
  176.         double : l51,
  177.         if (opts & 1) then point(true) : l210 fi,
  178.         if (opts & 2) then double : l38 fi,
  179.       case 9:   /* trace */
  180.         point(false) : l10,
  181.         point(false) : l11,
  182.         point(false) : l12,
  183.         point(false) : l13,
  184.         if (opts & 1) then point(true) : l210 fi,
  185.         if (opts & 2) then double : l38 fi,
  186.       case 11:   /* solid */
  187.         point(false) : l11,
  188.         point(false) : l12,
  189.         point(false) : l13,
  190.         point(false) : l14,
  191.         if (opts & 1) then point(true) : l210 fi,
  192.         if (opts & 2) then double : l38 fi
  193.       case 12:   /* block */
  194.         point(false) : l10,                /*?*/
  195.         string : l1,                       /* if (opts & 1) then ? */
  196.         if (opts & 2) then string : l3 fi
  197.       case 13:  /* endblk */
  198.       case 14:   /* insert */
  199.         word : l1,
  200.         point(false) : l10,
  201.         if (opts & 1) then double : l41 fi,
  202.         if (opts & 2) then double : l42 fi,
  203.         if (opts & 4) then double : l43 fi,
  204.         if (opts & 8) then double : l50 fi,
  205.         if (opts & 0x10) then byte : l70 fi,                /*?*/
  206.         if (opts & 0x20) then byte : l71 fi,                /*?*/
  207.         if (opts & 0x40) then double : l44 fi,              /*?*/
  208.         if (opts & 0x80) then double : l45 fi              /*?*/
  209.       case 15:    /* attdef */
  210.         point(false) : l10,
  211.         double : l40,
  212.         string : l1,
  213.         string : l3,
  214.         string : l2,
  215.         byte : l70,
  216.         if (opts & 1) then byte : l73 fi,           /*?*/
  217.         if (opts & 2) then double : l50 fi,         /*?*/
  218.         if (opts & 4) then double : l41 fi,
  219.         if (opts & 8) then double : l42 fi,
  220.         if (opts & 0x10) then byte : l7 fi,
  221.         if (opts & 0x20) then byte : l71 fi,
  222.         if (opts & 0x40) then byte : l72 fi,
  223.         if (opts & 0x80) then point(false) : l11 fi,   /*?*/
  224.         if (opts & 0x100) then point(true) : l210 fi,
  225.         if (opts & 0x200) then double : l38 fi        /*?*/
  226.       case 16:   /* attrib */
  227.         point(false) : l10,
  228.         double : l40,
  229.         string : l1,
  230.         string : l2,
  231.         byte : l70,
  232.         if (opts & 1) then byte : l73 fi,           /*?*/
  233.         if (opts & 2) then double : l50 fi,         /*?*/
  234.         if (opts & 4) then double : l41 fi,
  235.         if (opts & 8) then double : l42 fi,
  236.         if (opts & 0x10) then byte : l7 fi,
  237.         if (opts & 0x20) then byte : l71 fi,
  238.         if (opts & 0x40) then byte : l72 fi,
  239.         if (opts & 0x80) then point(false) : l11 fi,   /*?*/
  240.         if (opts & 0x100) then point(true) : l210 fi,
  241.         if (opts & 0x200) then double : l38 fi        /*?*/
  242.       case 17:   /* s/bend */
  243.         long
  244.       case 19:   /* pline */
  245.         if (opts & 1) then byte : l70 fi,
  246.         if (opts & 2) then double : l40 fi,                   /*?*/
  247.         if (opts & 4) then byte : l71 fi,         /*?*/
  248.         if (opts & 8) then byte : l72 fi,         /*?*/
  249.         if (opts & 0x10) then byte : l73 fi,         /*?*/
  250.         if (opts & 0x20) then byte : l74 fi,         /*?*/
  251.         if (opts & 0x40) then byte : l75 fi         /*?*/
  252.       case 20:   /* vertex */
  253.         point(false) : l10,
  254.         if (opts & 1) then double : l40 fi,           /*?*/
  255.         if (opts & 2) then double : l41 fi,           /*?*/
  256.         if (opts & 4) then byte : l70 fi,             /*?*/
  257.         if (opts & 8) then double : l50 fi           /*?*/
  258.       case 22:   /* 3dface */
  259.         point(!(flag & 4)) : l10,
  260.         point(!(flag & 4)) : l11,
  261.         point(!(flag & 4)) : l12,
  262.         point(!(flag & 4)) : l13
  263.       case 23:   /* dim */
  264.         word : l1,
  265.         point(true) : l10,
  266.         point(false) : l11,   /*?*/
  267.         if (opts & 2) then byte : l70 fi,
  268.         if (opts & 1) then point(true) : l12 fi,    /*?*/
  269.         if (opts & 4) then string : l1 fi,
  270.         if (opts & 8) then point(true) : l13 fi,
  271.         if (opts & 0x10) then point(true) : l14 fi,
  272.         if (opts & 0x20) then point(true) : l15 fi,
  273.         if (opts & 0x40) then point(true) : l16 fi,
  274.         if (opts & 0x80) then double : l40 fi,
  275.         if (opts & 0x100) then double : l50 fi,
  276.         if (opts & 0x200) then double : l51 fi,
  277.         if (opts & 0x400) then double : l52 fi,
  278.         if (opts & 0x800) then double : l53 fi
  279.       case 24:   /* vport */
  280.         point(true) : l10,
  281.         double : l40,
  282.         double : l41,
  283.         word : l68
  284.       endswitch
  285.       check_2
  286.     )
  287.   )* : entities.
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

56

主题

527

帖子

5081

积分

BIM专家

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

积分
5081

社区QQ达人

QQ
2F
发表于 2015-11-9 15:16:55 | 只看该作者
亲,有没有dwf 的文件转换器呢
3F
发表于 2016-1-28 10:52:18 | 只看该作者

要做,就做最好!

14

主题

2892

帖子

2085

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
2085
4F
发表于 2016-2-29 11:46:13 | 只看该作者
很好!!~~   o( ̄▽ ̄)d

14

主题

2892

帖子

2085

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
2085
5F
发表于 2016-4-6 11:06:52 | 只看该作者
♪(^∀^●)ノ  不错噢!~
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-23 10:43

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表