合并图形
嗨,朋友们。我从事机械行业,使用Autodesk Inventor绘制零件和部件。有时,我需要将idw图形批量转换为DWG格式。
一个零件,一个图纸,所以,如果有100个零件,它有100个图纸。
现在,我希望将100个或更多dwg合并到一个dwg文件中。
每个图纸范围的尺寸可能不同(A4、A3等)
绘图框架和标题栏是属性块。
将更多图形合并到dwg文件中,我认为需要Dcl文件来输入行和列、行距和列间距。
谢谢你的帮助!感谢论坛中的所有朋友。 不知道idw到dwg,但可以使用脚本打开dwg并检索dwg A3 A4等的大小,然后使用此信息编写脚本文件,将所有dwg插入主dwg。
我们的标题栏将图纸的大小作为一个变量,所以可以读取它,或者只计算标题栏的大小。
我不会担心dcl,这是一个有点额外的工作,几乎没有收获。
重新编程只有一个双重复X Y,我将使用A3大小作为间距,然后你可以忽略大小差异。鉴于图纸将在模型空间中,可以进行自动绘图等,我会考虑使用布局,每张图纸1,那么大小也不相关。 你试试这个惯例。首先制作一个新的空白图形,加载此例程,输入“IF”(lisp命令的名称,表示“插入文件”),指出包含100个或更多dwg文件的目录(必须将idw导出为dwg),然后等待结果。插入的文件尚未分解。
(defun c:if(/ dir files len col n x y h dy v li dy minp maxp)
(setq dir (vl-filename-directory (getfiled "Get Directory" (getvar "dwgprefix") "dwg" 4))
files (vl-remove-if-not
'(lambda(x) (vl-string-search "DWG" (strcase (vl-filename-extension x))))
(vl-directory-files dir nil 1))
len (length files)
col (fix (sqrt len))
n -1
y 0
h 0
)
(while (< n (1- len))
(setq x 0
y (+ y h)
h 0)
(repeat col
(setq v (nth (setq n (1+ n)) files))
(if v
(progn
(command "-insert" (strcat dir "/" v) '(0 0) "" "" "")
(vla-getBoundingBox (vlax-ename->vla-object (entlast)) 'minp 'maxp)
(setq li (mapcar 'vlax-safearray->list (list minp maxp)))
(command "move" (entlast) "" '(0 0) (list x y))
(if (> (setq dy (abs (- (cadadr li) (cadar li)))) h)
(setq h dy))
(setq x (+ x (abs (- (caadr li) (caar li)))) )
)
)
)
)
)
7o7好主意,行-列的sqrt,正如我建议的那样,修改代码也很容易,保留前6行,然后使用“Layout”“N”在每个新布局中插入一部分。
非常感谢!707
我测试,但有些重叠。
@7o7小时
这就足够了。
取代所有这一切。
(vl-remove-if-not
'(lambda (x) (vl-string-search "DWG" (strcase (vl-filename-extension x))))
(vl-directory-files dir nil 1)
) @塔瓦:好的,谢谢,你的很好。
@andy_Lee:它是重叠的,因为插入点不是0,0。除非将每个图形的左下角移动到0,0。
这就是我不想分解插入图形的原因。 可以使用“插入DWG参考”模式吗?
可以用图号从左到右,从上到下顺序排列吗?
图号:xxx-xxx-001、xxx-xxx-002。。。。。。 什么是“插入DWG参考”模式?
如果要从上到下,请将(+y h)更改为(-y h) 菜单 插入--DWG参考, 这样我们就可以保持文件的完整性。
页:
[1]
2