对齐参照块,以参照块名字排序
本帖最后由 菜卷鱼 于 2024-10-16 09:11 编辑合并很多图纸到一个CAD文件,我常用的方法是插入DWG参照的方式
此命令用来排列对齐DWG参照图的,DWG参照的命名就是图号名开头就能对齐
隐藏命令,输入DW之后再输入A
隐藏命令A是针对图框是块的对齐
;;;(2 . "DRAWINGS_A*")是图框块的名字
(defun c:dw ()
(princ "(参照)块对齐")
(onxline )
(prin1)
)
(defun onxline ()
(setq *error* pt_err)
(setq sxkkey 0)
(initget 1 "Aboom")
(setq p0(getpoint "\n集合点:"))
(while (= p0 "Aboom")
(setq sxkkey 1)
(princ "\n更改过滤条件,图纸对齐...\n请选择空白区域!")
(setq p0(getpoint "\n集合点:"))
)
(setq dist(getreal "\n间距:<0>"))
(if (= dist nil)(setq dist 0))
(if (= sxkkey 1)
(progn
(setq ss (ssget'((0 . "INSERT")(2 . "DRAWINGS_A*"))));;;;;;;;;这里是块名(2 . "DRAWINGS_A*")
(setq ss (sort-se (sort-se ss 10 0 50 nil) 10 1 50 t )))
(progn
(setq ss(ssget '( (0 . "insert") )) )
(setq ss (sort-se ss 2 0 50 nil))
)
)
(setq os(getvar 'osmode))
(setvar 'cmdecho 0)
(setvar 'osmode 0)
(setq i 0)
(repeat (sslength ss)
(setq entname(ssname ss i))
(setq qq (cornerp entname))
(setq p1(car qq) p2(cadr qq))
(if (=sxkkey 1)
(PROGN
(setq ssall(ssget "w" p1 p2 ))
(command "_.move" ssall "" p1 p0))
(command "_.move" entname "" p1 p0)
)
(setq qq(cornerp entname))
(setq p1(car qq) p2(cadr qq))
(setq p0(cons (car p2) (cdr p1)))
(setq p0(polar p0 0 dist))
(setq i(1+ i))
)
(setvar 'osmode os)
(setvar 'cmdecho 1)
(prin1)
)
(defun pt_err()
(setvar 'osmode os)
(setvar 'cmdecho 1)
(prin1))
(DEFUN cornerp(entname) ;;;对角点
(vla-getboundingbox (vlax-ename->vla-object entname) 'entpl 'entpr)
(setq ptlist (mapcar 'vlax-safearray->list (list entpl entpr)))
(mapcar '(lambda (x) (trans x 0 1)) ptlist)
)
(vl-load-com)
(defun SORT-SE (SE DXF INT FUZZ K / ENT INDEX LST NEWLST NEWSE TMP)
;;建立排序列表
(setq LST '() INDEX 0)
(repeat (sslength SE)
(setq ENT (entget (ssname SE INDEX))
TMP (cdr (assoc DXF ENT)) )
(if (and INT (= (type INT) 'INT) (= (type TMP) 'list)(< INT (length TMP)) )
(setq TMP (nth INT TMP)))
(setq LST (cons (list TMP (cdr (assoc 5 ENT))) LST))
(setq INDEX (1+ INDEX)));;排序操作
(if (and FUZZ
(or (= (type FUZZ) 'INT)
(= (type FUZZ) 'REAL))
(or (= (type TMP) 'INT) (= (type TMP) 'REAL)))
(setq NEWLST
(vl-sort LST (function (lambda (E1 E2) (< (+ (car E1) FUZZ) (car E2)))
)))
(setq NEWLST
(vl-sort LST (function (lambda (E1 E2) (< (car E1) (car E2))))
))) ;;如果K为T,则倒置
(if K (setq NEWLST (reverse NEWLST)))
(setq NEWSE (ssadd))
(foreach TMP NEWLST
(setq NEWSE (ssadd (handent (cadr TMP)) NEWSE))
) ;;返回值NEWSE ;_结束defun;;;
)
(prin1)
合并很多图纸到一个CAD文件,我常用的方法是插入DWG参照的方式 我也经常需要用到将多个CAD文件合并为一个文件, 我每次插入DWG 都不成功,请问有什么诀窍吗。谢谢了 一点建议如果能把包含块里面的图形和增加选择横或竖排就完美了 请问 显示这个需要怎样处理?
错误: 输入的列表有缺陷 公司电脑,发不了附件,见谅 *error* 函数中出错AutoCAD 变量设置被拒绝: OSMODE nil 本帖最后由 lucas_3333 于 2014-7-22 19:59 编辑
菜卷鱼大侠请帮帮我
目前排序是根据文件名排序吗?是能否读取属性块中的图号,按图号从左至右,从上至下排序?
目前排序无论多少都是排成一行,能否设定多少张图一行?增加一个行间距.
谢谢! 大侠弄个gif看看呀,,什么效果,, lucas_3333 发表于 2014-7-22 19:56 static/image/common/back.gif
菜卷鱼大侠请帮帮我
目前排序是根据文件名排序吗?是能否读取属性块中的图号,按图号从左至右,从上至下排 ...
得要看看你图框是什么样的了 本帖最后由 lucas_3333 于 2014-7-28 23:01 编辑
菜卷鱼 发表于 2014-7-24 11:57 static/image/common/back.gif
得要看看你图框是什么样的了
菜卷鱼大侠,你好,图框样本我上传上来,收到了吧?
做成行列对齐等距的, 非常棒!多图纸,一键调整! 谢了
页:
[1]
2