hengdong123 发表于 2018-10-17 23:40:00

如何将图纸中的对象集合保存成新的dwg格式文件

我想将某一区域下的图形集合保存成一个新的dwg格式文件,请问如何实现?

xxxxxczxcxz 发表于 2021-3-19 23:48:00


;;保存分图
(defun c:bzft (/ ss filename pathdate )
      (setvar "cmdecho" 0) ;指令执行过程不响应
                (setq ss (ssget )) ;选择集
      (setq date (menucmd "M=$(edtime,$(getvar,date),YYYY_MODD_HHMMSS)")); "激光切割文件"是前文件名可自定修改 后面跟时间。
      (setq path "C:\\")    ;自定义路径位置 "\\"隔开
      (setq filename (strcat pathdate )) ;合并成文件路径及文件名      
(command "WBLOCK" filename "" "0,0"SS"" "oops" )
      (setvar "cmdecho" 1)
      (PRINC "\n 保存成功 !!!")
      (PRINC)
)

问号兄233 发表于 2018-11-1 09:55:00


readdwgfile直接得到整个文件数据库,个人理解这更倾向于非图形化的数据表。以前只通过查找块表记录中的某一个名字而得到固定的单一块,没有做过选取某一范围内的实体。稍微查找了一下,未找到具体解决方式,相信你也自己查了资料未果才来提问,所以这应该不是个容易实现的技巧,本人才疏学浅,表示无能为力。如果您能实现这一功能,还望分享告知。个人认为英文论坛更多解决方案,只是查起来慢一些,共勉。

hengdong123 发表于 2018-10-19 08:38:00

怎么没人回答新人提的问题啊?太简单了吗?

ssyfeng 发表于 2018-10-19 09:25:00


试试这个可以不
(defun c:tt (/ path pt ss)
(vl-cmdf "_undo" "be")
(setq path "c:\\00.dwg"   ;;;定义文件保存路径
    pt '(0 0 0)
    ss (ssget)
)
(vl-cmdf "-WBLOCK" path "" pt ss "")
(vl-cmdf "_undo" "e")
(vl-cmdf "_undo" 1)
(princ)
)

hengdong123 发表于 2018-10-19 12:39:00

感谢ssyfeng兄弟热情回复
请熟悉c#的朋友给个方案

问号兄233 发表于 2018-10-26 08:48:00

某一区域?可以用闭合PolyLine组成一个区域。假设所有实体都在线内,这样可以用AcadEditor.SelectWindowPolygon(Point3dCollection polygon)方法获取到实体,记录ObjcetId到一个ObjectIdCollection中去。
然后,用DatabasedbNew = new Database(false,true);
dbNew = HostApplicationServices.WorkingDatabase.Wblock(ObjectIdCollection,HostApplicationServices.WorkingDatabase.Ucsorg);
dbNew.SaveAs(PathName,DwgVersion.AC1015);
工作性质原因无法贴源码,抱歉。不懂可以咨询。

hengdong123 发表于 2018-10-31 20:10:00


感谢 问号兄233 兄弟的回复,你的思路是对的,你的方法是com调用模式吧
我的是插件的模式,问题来了:
获取选择集需要editor对象,我是通过ReadDwgFile读取到内存中处理,没法使用editor对象获取某一框选的对象集合,该怎么样处理啊?

xj6019 发表于 2021-3-20 08:21:00

论坛里的好几个代码 好像都是这种方式呀

zj20190405 发表于 2021-4-15 22:19:00


大佬请问保存文件,还是源文件名,只是后面加上时间,保存路径还是在源文件路径,怎么做
页: [1]
查看完整版本: 如何将图纸中的对象集合保存成新的dwg格式文件