菜卷鱼 发表于 2014-3-15 16:51:58

对齐参照块,以参照块名字排序

本帖最后由 菜卷鱼 于 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)




yimiyangguang55 发表于 2024-6-5 14:23:04

合并很多图纸到一个CAD文件,我常用的方法是插入DWG参照的方式 我也经常需要用到将多个CAD文件合并为一个文件, 我每次插入DWG 都不成功,请问有什么诀窍吗。谢谢了

my258 发表于 2016-10-19 09:58:22

一点建议如果能把包含块里面的图形和增加选择横或竖排就完美了

开心无惧 发表于 2024-6-4 18:55:30

请问 显示这个需要怎样处理?

错误: 输入的列表有缺陷

菜卷鱼 发表于 2014-3-15 17:28:17

公司电脑,发不了附件,见谅

香田里浪人 发表于 2014-3-16 07:45:55

*error* 函数中出错AutoCAD 变量设置被拒绝: OSMODE nil

lucas_3333 发表于 2014-7-22 19:56:58

本帖最后由 lucas_3333 于 2014-7-22 19:59 编辑

菜卷鱼大侠请帮帮我
目前排序是根据文件名排序吗?是能否读取属性块中的图号,按图号从左至右,从上至下排序?
目前排序无论多少都是排成一行,能否设定多少张图一行?增加一个行间距.

谢谢!

wxa123wl 发表于 2014-7-23 10:34:04

大侠弄个gif看看呀,,什么效果,,

菜卷鱼 发表于 2014-7-24 11:57:51

lucas_3333 发表于 2014-7-22 19:56 static/image/common/back.gif
菜卷鱼大侠请帮帮我
目前排序是根据文件名排序吗?是能否读取属性块中的图号,按图号从左至右,从上至下排 ...

得要看看你图框是什么样的了

lucas_3333 发表于 2014-7-24 12:29:44

本帖最后由 lucas_3333 于 2014-7-28 23:01 编辑

菜卷鱼 发表于 2014-7-24 11:57 static/image/common/back.gif
得要看看你图框是什么样的了
菜卷鱼大侠,你好,图框样本我上传上来,收到了吧?

chenshulu 发表于 2014-10-25 18:33:44

做成行列对齐等距的,

lengxiaxi 发表于 2014-11-26 19:49:21

非常棒!多图纸,一键调整!

davide888 发表于 2015-6-24 11:00:17

谢了            
页: [1] 2
查看完整版本: 对齐参照块,以参照块名字排序