自动套图框并将文本写入块
文字填写具有随机性,有朋友能帮助修改下吗?(defun c:t3 ( / &kw ent ss1 sx x1 x2 y1 y2);自动套图框;多行文字填入指定块;支持判断横版图纸还是竖版图纸
(setq pt1 (getpoint "-->请选取图框左下角点:\n"));getpoint 选取点
(setq pt2 (getcorner pt1 "-->请选取图框右上角点:\n"));拾取对角点
(if
(setq &kw (ssget "w" pt1 pt2 )); "all"自动全选图内元素;套图框
(progn
(setq ss1 '())
(while (setq ent (ssname &kw 0))(setq &kw (ssdel ent &kw) ss1 (cons ent ss1)));while
(setq ss1 (mapcar 'vlax-ename->vla-object ss1))
(setq ss1 (apply 'append (mapcar 'x1903211 ss1)))
(setq sx (vl-sort (mapcar 'car ss1) '<))
(setq x1 (car sx) x2 (last sx))
(setq sx (vl-sort (mapcar 'cadr ss1) '<))
(setq y1 (car sx) y2 (last sx))
)
)
(princ)
(setq bb (list x1 y1))
(princ t)
(setq disx (abs (- x2 x1)));取绝对值
(setq disy (abs (- y2 y1)));car返回列表第二个元素
;(princ disx)
(if (> disx disy)(setq acx(/ disx 420)));;判断是横版图纸还是竖版图纸
(if (< disx disy)(setq acx(/ disx 210)))
(if (> disx disy)(command "insert""A3"bb "X" acx "" "" "" "" ));用insert命令插入图框
(if (> disy disx)(command "insert""A4S"bb "X" acx "" "" "" "" ));insert插入图框
;;;保存
; (if (and
; (setq ss (ssget "w" pt1 pt2 ))
; )
; (progn
;(setq len (sslength ss)
; i 0
; )
; (repeat len
; (setq e (ssname ss i))
; (setq ed (entget e))
;(setq old (assoc 48 ed))
;(setq new (cons 48 acx))
;(if old
; (setq ed (subst new old ed))
; (setq ed (cons new ed))
;)
; (entmod ed)
; (setq i (1+ i))
; )
; )
;)
;将文本写入块,图框点选未能自动选择
;显示出选中的所有单行文字
(setq myxz (ssget "w" pt1 pt2 '((0 . "text,MTEXT")))) ;获取仅有单行文字的选择集 "w" pt1 pt2 窗口选择
(setq wenzishu (sslength myxz));获取选择集中图元的个数S
(setq i 0)
(setq j 0)
(while (< j wenzishu)
(setq tuyuanhao (ssname myxz i)) ;获取图元号
(setq wenzi_str (cdr (assoc 1 (entget tuyuanhao))))
;entget 返回图元属性列表
;assoc 返回单行文字的内容,为一点对,(1."字符串")
;cdr 去除点对第一个元素
(print wenzi_str);输出文字
;********************************写属性块
(defun attchg (ent attname new / EN ENTLIST)
(defun MJ:DXF (IT LST)(cdr (assoc IT LST)))
(if (and (setq en ent)
(setq entlist (entget en))
(equal (MJ:DXF 0 entlist) "INSERT")
(equal (MJ:DXF 66 entlist) 1) ;=1则块有属性值
)
(while
(and en(setq en (entnext en))(setq entlist (entget en))(equal (MJ:DXF 0 entlist) "ATTRIB"))
(if
(= (strcase (MJ:DXF 2 entlist)) (strcase attname))
(progn
(entmod (subst (cons 1 new) (assoc 1 entlist) entlist))
(entupd ent)
(setq en nil)
)
)
)
)
(princ)
)
;此处更改判断,将文本填入属性块
(if (= j 0)(attchg (ssname (ssget "l") 0) "材料规格" wenzi_str ))
(if (= j 1)(attchg (ssname (ssget "l") 0) "数量" wenzi_str ))
(if (= j 2)(attchg (ssname (ssget "l") 0) "比例" wenzi_str ))
(if (= j 3)(attchg (ssname (ssget "l") 0) "图样代号" wenzi_str ))
(if (= j 3)(attchg (ssname (ssget "l") 0) "图样代号." wenzi_str ));此处更改判断,将文本填入属性块
(if (= j 4)(attchg (ssname (ssget "l") 0) "图样名称" wenzi_str ))
(if (= j 5)(attchg (ssname (ssget "l") 0) "材料名称" wenzi_str ));
;********************************
(setq j (+ 1 j))
)
)
(defun x1903211 (obj / obj x3 y3);tes子函数
(vla-getboundingbox obj 'x3 'y3)
(mapcar 'vlax-safearray->list (list x3 y3));点表
)
(setq *en2obj* vlax-ename->vla-object)
我怀疑是在判断上和图元获取方面出了问题 进来看看,试试效果怎么样 本帖最后由 xiaozhu33033 于 2022-7-10 01:21 编辑
谢谢分享!!!!!!!!!! 学习大师源码
页:
[1]