定义块的小程序
(defun emkblk (ss pt name / i)(print 1)
(entmake (list '(0 . "block") (cons 2 name) '(70 . 0) (cons 10 pt)))
(mapcar '(lambda (x) (entmake (cdr (entget x)))) ss)
(entmake '((0 . "ENDBLK")))
(mapcar 'entdel ss)
(entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
)
(defun ZB (obj / obj ss x y)
(vla-getboundingbox obj 'x 'y)
(setq ss (mapcar 'vlax-safearray->list (list x y)))
(list (mapcar 'car ss) (mapcar 'cadr ss))
)
(defun c:B12 ( )
(vl-load-com)
(princ "\n请选择要变为块的对象")
(setq ss (ssget))
(setq ss1 '())
(while (setq ent (ssname ss 0)) (setq ss (ssdel ent ss) ss1 (cons ent ss1) ) )
(setq ss2 (mapcar 'ZB (mapcar 'vlax-ename->vla-object ss1)))
(setq ss3 (vl-sort (apply 'append (mapcar 'car ss2)) '<) x1 (car ss3) x2 (last ss3))
(setq ss3 (vl-sort (apply 'append (mapcar 'cadr ss2)) '<) y1 (car ss3) y2 (last ss3))
(setq pt (mapcar '* '(0.5 0.5) (list (+ x1 x2) (+ y1 y2))))
(setq WD (itoa (fix(- x2 x1))))
(setq HG (itoa (fix(- y2 y1))))
(setq NE (strcat "c" "B" WD " " "H" HG))
(print ne)
(setq name ne)
(emkblk ss1 pt name)
(princ)
)
ps;只需要框选需要定义为块的对象即可,块名为块外接最小矩形的尺寸,前缀c可以自行修改。
谢谢楼主分享。我下载试了下,好像不能用:
“命令: b12 未知命令“B12”。按 F1 查看帮助。”
未知命令,加载后输入命令,出现这样的情况。不知为何? 金鹅起飞 发表于 2023-10-5 08:39
谢谢楼主分享。我下载试了下,好像不能用:
“命令: b12 未知命令“B12”。按 F1 查看帮助。”
可以用的。 能分享的人 最可爱! 谢谢大侠分享另一种做块方法 能分享的人 最可爱! 感谢大神分享 下载玩玩看看 {:1_1:}谢谢 很好用,感谢分享 感谢分享感谢分享感谢分享
页:
[1]
2