以前有一个网友写的,效果差不多的,亦可以实现,
可以参考一下
(defun c:TQ (/ char-02 char-1 ent i lay lays list1 list2 long lst name name1 pt pt1 s snap ss uuu x y)
(vl-load-com)
(defun zz01 (ent / lst x)
(foreach x ent
(if (= (car x) 10)
(setq lst (cons (cdr x) lst))
)
)
lst
)
(setvar "CMDECHO" 0)
(command "_.purge" "B" "" "n")
(if (null jbak)
(setq jbak 15.0)
)
(setq lay nil)
(while (setq lay (tblnext "block" (not lay)))
(setq lays (append
lays
(list (cdr (assoc 2 lay)))
)
)
)
(setq uuu 0
i 0
)
(while (< i (length lays))
(setq char-02 (nth i lays))
(if (= (substr char-02 1 4) "区域")
(progn
(if (> (atoi (substr char-02 5)) uuu)
(setq uuu (atoi (substr char-02 5)))
)
)
)
(setq i (1+ i))
)
(while (progn
(while (progn
(initget "S ")
(if (= (setq pt (getpoint (strcat "\n指定内部点,或[设置(S)]:<偏移距离" (rtos jbak) ">")))
"S"
)
(if (setq s (getreal (strcat "\n设置偏移距离:<" (rtos jbak) ">")))
(setq jbak s)
)
)
(if (null pt)
(vl-exit-with-error "")
)
(or
(= pt "S")
(not (= (type pt) 'list))
)
)
)
(= (type pt) 'list)
)
(command ".UNDO" "BE")
(setq snap (getvar "osmode"))
(setvar "osmode" 0)
(command "BPOLY" pt "")
(setq name (entlast)
list1 (zz01 (entget name))
ss (ssadd)
)
(command "OFFSET" jbak name pt "")
(setq name1 (entlast)
list2 (zz01 (entget name1))
)
(ssadd name1 ss)
(entdel name)
(foreach x list2
(setq long 1e6)
(foreach y list1
(if (< (distance x y) long)
(setq pt1 y
long (distance x y)
)
)
)
(entmake (list '(0 . "LINE") '(100 . "AcDbEntity") (cons 10 x) (cons 11 pt1)))
(ssadd (entlast) ss)
)
(setq char-1 (strcat "区域" (itoa (setq uuu (1+ uuu)))))
(command "block" char-1 pt ss "")
(command "INSERT" char-1 pt 1 1 0)
(setvar "osmode" snap)
(command ".UNDO" "E")
)
(princ)
)
hhh454 发表于 2017-11-1 19:11
代码思路:1,取得选择多义线的各个端点 2,取得偏移后多义线的端点
...
用不了,程序缺失
拾取饰线偏移连接端点
本帖最后由 KO你 于 2018-12-5 19:29 编辑快捷命令 QG 谢谢! KO你 分享程序!!!!! 谢谢! xyp1964 分享程序!!!!! 能给个源码吗?,谢谢了:D xiang19751218 发表于 2017-11-2 20:33
请问程序的启动命令,谢谢! 谢谢!分享程序!