只需一步,快速开始
;★长度型标注断开(defun zm (et x /) (cdr (assoc x (entget et)))) (defun pzm (nwzm y obj /) (entmod(subst(cons y nwzm)(assoc y (entget obj)) (entget obj))) ) (defun objnm (ent) (vla-get-objectname (vlax-ename->vla-object ent)) ) (defun maxlst (pts / js i x tt jl ds) (setq js 0 i 0) (repeat (length pts) (setq tt (nth i pts)) (mapcar '(lambda (x) (if (> (setq ds (distance tt x)) js) (setq js ds jl (list x tt))) )pts) (setq i (1+ i)))jl ) (defun c:db (/ ENT ENT1 GETPT JPT PT1 PT2 XL) (vl-load-com)(vl-cmdf "undo" "be") (if (setq ent (car (entsel "\n选择要断开的标注<退出>:"))) (progn (redraw ent 3) (setq getpt (getpoint "\n点取断开点:")) (redraw ent 4) (vl-cmdf ".copy" ent "" '(0 0) "@") (setq ent1 (entlast)) (setq pt1 (zm ent 13)pt2(zm ent 14)) (if (= (objnm ent) "AcDbAlignedDimension") (vl-cmdf ".xline" pt1 pt2 "") (vl-cmdf ".xline" "a" (angtos (zm ent 50) 0 4) pt1 "") ) (setq xl(entlast)) (pzm(setq jpt (vlax-curve-getClosestPointTo xl getpt))13 ent) (pzm jpt 14 ent1)(vl-cmdf ".erase" xl "")) )(vl-cmdf "undo" "e")(princ) )
使用道具 举报
楼上,此功能是:双向偏移!
(defun mk_list (/ layer_name) (setq layer_list (list)) (setq layer_name (cdr (assoc 2 (tblnext "layer" t)))) (while layer_name (if (= layer_name of_lay) nil ;_这儿的nil多了 (setq layer_list (append layer_list (list layer_name) ) ) )
我试了一下,主程序部份没什么问题,问题应该出在调用对话框部份,楼主的编写的想法不错,应该是个实用的程序
将文件贴完才可以看哪里有问题,
现在看的话
(defun mk_list (/ layer_name) (setq layer_list (list)) (setq layer_name (cdr (assoc 2 (tblnext "layer" t)))) (while layer_name (if (= layer_name of_lay) nil ;_这儿的nil应该写在(= layer_name of_lay nil)中 (setq layer_list (append layer_list (list layer_name) ) ) )
试了一下,没什么问题啊,只是当偏移距离过大时,对圆或圆弧偏移就会出现1楼的错误,加个判断可能会更完美些
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 ) ©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途
GMT+8, 2024-5-6 15:04 , Processed in 0.302149 second(s), 27 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.