635641449 发表于 2022-4-23 21:45:34

求lisp插件程序源码,付费

本帖最后由 635641449 于 2022-4-23 22:10 编辑

前提条件:一个DWG文件里有很多张套了图框的节点详图。我需要将这些图纸分成一个dwg文件只有一张图。
打开图纸之后,不允许用wblock命令将图纸写出去,这点很重要,因为写块功能会将图层状态恢复到初始状态,我所有对图层的操作都会失效。所以不能用写块命令分图。只能将总图另存之后删除不需要的图纸保留需要的图纸,以此达到分图的目的。
步骤一:打开包含多张图纸的DWG总图文件,用“另存为”命令将图纸保存,保存的文件名就是每张图的图纸编号,DWG总图文件中被选择了多少张图纸,就另存多少张图
步骤二:将所有另存的图纸依次打开只保留与文件名相同图纸编号的图纸,将其他图纸删除掉,然后将保留下来的图纸的图框左下角放置到世界坐标系的原点出
步骤三:在布局中建立步骤二中图纸的视口,如果视口是竖向需要将视口旋转成横向视口。并且视口的左下角永远在世界坐标系的原点处。视口大小根据图框规格(A1,A2,A3,A4)1:1确定。
步骤四:需要将图纸中的某些图块和属性块从模型空间变换到布局空间,这些图块和属性块要能有我自己定义哪些属性块被写转入布局,默认状态下为空,并且下次用的时候会记住上一次自定义的属性块。
步骤五:以分图之后的单张图纸的文件名(不是图框中的图纸编号。因为图框中的图纸编号为字段时,会根据文件名的变化而变化)来重命名图纸布局名。
第六步:清理垃圾,保存,关闭。这样循环往复,直到将总图中所选择(假设只选择了其中的一部分图纸)的图纸全部分出去为止。

注意:步骤四应该在插件开始运行之前以弹窗形式让用户自定义选择写入布局的块和属性块。图框中的图纸编号可以是定义的字段,也可以是手动填写的图纸编号,程序的最后将图片中标记的属性块删除掉

QQ:635641449





xyp1964 发表于 2022-6-9 16:53:26


尘缘一生 发表于 2022-4-24 08:33:40

本帖最后由 尘缘一生 于 2022-4-24 12:59 编辑

贴上一段,局部放大转DXF的,也许对这个开发有思路。


[*](DEFUN C:DFC( / GRP PATH NAME)
[*](PRINC "\Hellow^…^朋友")
[*] (SETVAR "CMDECHO" 0)
[*] (SETVAR "osmode" 0)
[*] (PRINC "\n DXF快速输出!!!");
[*] (SETQ pt1 (getpoint"请选择左上角:"))
[*] (PRINC "")
[*] (SETQ k 1)
[*] (SETQ pt2 (getpoint"请选择右下角:"))
[*] (COMMAND "SCALE" "w" pt1 pt2 "" pt1 k)
[*] (SETQ PATH (GETVAR "DWGPREFIX")) ;获取FILEPATH
[*] (SETQ NAME (GETFILED "DXF档案输出快选" PATH "DXF" 15))
[*] (SETVAR "FILEDIA" 0)
[*] (COMMAND "_DXFOUT" NAME "V" "R12" "O" "W" PT1 PT2"" "")
[*] (COMMAND "SCALE" "w" pt1 pt2 "" pt1 1)
[*] (SETVAR "FILEDIA" 1)
[*] (SETVAR "CMDECHO" 1)
[*] (SETVAR "osmode" 37)
[*] (PRINC "\n OK !!!")
[*] (PRINC)
[*])

对于楼主的开发要求:
    建议:布局要求不作,或作了能控制是否终止到此。因为,布局据说挺好,但是,很多根本就不用它。
辛苦写代码的,并不是为了一部分人用,都希望是广大用户都需要的那种功能,才可以广泛推广。这就是为什么,多为自己工作需要,自己写的原因,反而专开发软件的,你是使用者的话,你对软件却有一种感觉,愚蠢人写的,可能根本就不是画图纸的人写的(不举例什么软件了,不好)。看楼主图纸,不是一般设计院能画这些节点的,甚至就根本不画。也就是说,很多设计就不叫个设计。
   一些集成太多,就不是常规类操作了,不是谁都需要的了,那么,就不愿意费劲去写。
    其他分图,不是难事,写块改变图层可能不能保存改变的图层信息,写出DXF思路,我想可以尝试。
   

e2002 发表于 2022-4-24 09:46:45

本帖最后由 e2002 于 2022-4-24 11:07 编辑

针对这种特定需求,是能做到的。通用的分图没法做到完美,你永远不知道别人的图是怎么画的,例如当你的Model中的各个图框中的内容的某个block,可能有一部分是在别的图框内的,你没法程序去判断那些block中的哪些些对象在图框外面...还有一种情况:一个Layout中有多个 Viewports,需要做更多的处理,对应到 Model 中的区域(包括非矩形的Viewport)。


关于创建对应的 Layout, 流程可以修改优化,应该先创建原图中所有的图框对应的layouts(批量创建layouts的工具不少,谁便找一个。这部分实际上不需要在这个分图程序中处理),然后再分图,在saveas的时候同时处理删除图框外的对象与其他的Layouts。

chixun99 发表于 2022-4-24 10:37:23

可惜要用LSP,我只会用vba做,一看就是同行。

mikewolf2k 发表于 2022-5-5 17:10:53

规范制图,图纸放在layout中,每个文件只有一个layout,这个问题就不存在了。有规范的文档管理的项目都会这么要求。
当然仅从技术角度出发实现分图并不困难,以前做过类似的。同楼上,也是VBA做的。

自贡黄明儒 发表于 2022-6-1 21:16:46

用另存为吧,把不要的删除

690994 发表于 2022-6-1 23:03:27

幕墙的吧,不是行内人不明白图的画法
页: [1]
查看完整版本: 求lisp插件程序源码,付费