nanming0 发表于 2018-7-19 12:41:37

怎样在不打开dwg的情况下,写dwg文件

这样不行:
Database acNewDb = new Database(false, true);
acNewDb.ReadDwgFile(filePath, file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\%W@GJ$ACOF(TYDYECOKVDYB.pngSystem.IO.FileShare.ReadWrite, true, null);
……
acNewDb.SaveAs(filePath, null);

保存会报:“警告:保存时出错 建议您对图形运行RECOVER”的错误
file:///D:\My Documents\Tencent Files\358754980\Image\Group\{8ETI3TW5HVZ)ABIYN%922Q.png


file:///D:\My Documents\Tencent Files\358754980\Image\Group\{8ETI3TW5HVZ)ABIYN%922Q.png图片

雪山飞狐_lzh 发表于 2018-7-19 18:50:17

只能用第三方组件 比如teigha

nanming0 发表于 2018-7-19 19:45:26

雪山飞狐_lzh 发表于 2018-7-19 18:50
只能用第三方组件 比如teigha

不用,已经解决了。在新的database里面的entity不能修改其所在图层,一修改就会报错

雪山飞狐_lzh 发表于 2018-7-19 22:08:25

理解错了 我以为是不开cad。。。
@command()
def dbxtest():
    filename = 'd:\\test.dwg'
    with dbtrans(db = filename) as tr:
      btr = tr.openmodelspace()
      mat = acge.Matrix3d.Displacement(acge.Vector3d(10,0,0))
      for ent in (tr.getobject(eid) for eid in btr):
            with upopen(ent):
                if isinstance(ent, acdb.Line):
                  ent.LayerId = tr.LayerTable['1']
                elif isinstance(ent, acdb.DBText):
                  ent.TransformBy(mat)
      tr.Database.SaveAs(filename, acdb.DwgVersion.Current)
没发现你所说的问题

nanming0 发表于 2018-7-20 17:03:21

雪山飞狐_lzh 发表于 2018-7-19 22:08
理解错了 我以为是不开cad。。。

没发现你所说的问题

修改LayerId确实可以,我用的是修改Layer,修改其图层名,这样会报错。谢谢大神的无私帮助,您帮我大忙了。
之前只能用笨方法:通过get新添加的ObjId,然后再来修改其图层名。这样会影响程序效率。
页: [1]
查看完整版本: 怎样在不打开dwg的情况下,写dwg文件