初学写的一个延长直线和圆弧的功能,还不完善,望高手能指点
;;;代码还不完善,有两个问题一直没解决:;;;1、不能批量完成操作
;;;2、当线条距离很近时有的线会延长很多,有的不延长
(defun c:dd1 ()
(setvar "CMDECHO" 0)
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq qq (ssget '((0 . "*line,arc"))))
(setq n 0)
(if (= qq nil)
(princ "没有选择任何相符元素!")
(if (= "LINE" (cdr (assoc 0 (entget (ssname qq n)))))
(progn
(setq bb (sslength qq))
(repeat bb
(setq p1 (cdr (assoc 10 (entget (ssname qq n)))))
(setq p2 (cdr (assoc 11 (entget (ssname qq n)))))
(command "_.LENGTHEN" "de" 100 p1 p2 "")
(setq n (1+ n))
)
)
(if (= "ARC" (cdr (assoc 0 (entget (ssname qq n)))))
(progn
(setq bb (sslength qq))
(repeat bb
(setq r (cdr (assoc 40 (entget (ssname qq n)))))
(setq rad1 (cdr (assoc 50 (entget (ssname qq n)))))
(setq cenx (cadr (assoc 10 (entget (ssname qq n)))))
(setq p1x (+ (* (cos rad1) r) cenx))
(setq ceny (caddr (assoc 10 (entget (ssname qq n)))))
(setq p1y (+ (* (sin rad1) r) ceny))
(setq p1 (list p1x p1y))
(setq rad1 (cdr (assoc 51 (entget (ssname qq n)))))
(setq p2x (+ (* (cos rad1) r) cenx))
(setq p2y (+ (* (sin rad1) r) ceny))
(setq p2 (list p2x p2y))
(command "_.LENGTHEN" "de" 100 p1 p2 "")
(setq n (1+ n))
)
)
)
)
)
(setvar "OSMODE" os)
(setq qq nil)
(princ)
)
稍微改了一下
(defun c:lsc (/ os l ss n en pt1 pt2)
(setvar "CMDECHO" 0)
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq l (getreal "\n伸长量:"))
(setq ss (ssget '((0 . "lwpolyline,line,arc"))))
(repeat (setq n (sslength ss))
(setq en(ssname ss (setq n (1- n)))
pt1 (vlax-curve-getstartpoint en)
pt2 (vlax-curve-getendpoint en)
)
(command "lengthen" "de" l (list en pt1) (list en pt2) "")
)
(setvar "OSMODE" os)
) 本帖最后由 gaics 于 2021-9-9 09:23 编辑
(defun c:dd1 (/ os qq n p1 p2 rad1 cenx ceny p1x p1y p2x p2y)
(setvar "CMDECHO" 0)
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq qq (ssget '((0 . "*line,arc"))))
(setq n 0)
(if (= qq nil)
(princ "没有选择任何相符元素!")
(repeat (sslength qq)
(if (= "LINE" (cdr (assoc 0 (entget (ssname qq n)))))
(progn (setq p1 (cdr (assoc 10 (entget (ssname qq n)))))
(setq p2 (cdr (assoc 11 (entget (ssname qq n)))))
(command "_.LENGTHEN" "de" 100 (list (ssname qq n) p1) "")
(command "_.LENGTHEN" "de" 100 (list (ssname qq n) p2) "")
)
)
(if (= "ARC" (cdr (assoc 0 (entget (ssname qq n)))))
(progn
(setq r (cdr (assoc 40 (entget (ssname qq n)))))
(setq rad1 (cdr (assoc 50 (entget (ssname qq n)))))
(setq cenx (cadr (assoc 10 (entget (ssname qq n)))))
(setq p1x (+ (* (cos rad1) r) cenx))
(setq ceny (caddr (assoc 10 (entget (ssname qq n)))))
(setq p1y (+ (* (sin rad1) r) ceny))
(setq p1 (list p1x p1y))
(setq rad1 (cdr (assoc 51 (entget (ssname qq n)))))
(setq p2x (+ (* (cos rad1) r) cenx))
(setq p2y (+ (* (sin rad1) r) ceny))
(setq p2 (list p2x p2y))
(command "_.LENGTHEN" "de" 100 p1 p2 "")
)
)
(setq n (1+ n))
)
)
(setvar "OSMODE" os)
(princ)
)
这里改了一下:
(command "_.LENGTHEN" "de" 100p1 p2 "")改为:
(command "_.LENGTHEN" "de" 100 (list (ssname qq n) p1) "")
(command "_.LENGTHEN" "de" 100 (list (ssname qq n) p2) "")
或:
(command "_.LENGTHEN" "de" 100 (list (ssname qq n) p1)(list (ssname qq n) p2)"")
可以选择延长左边或右边,延长的距离要能输入就方便了 本帖最后由 sunny_8848 于 2021-9-9 11:04 编辑
sunny_8848 发表于 2021-9-9 09:50
可以选择延长左边或右边,延长的距离要能输入就方便了
把直线的中点放到原点,延长直线,就会发现是两端各延长50(实际上图形都有其位置的,延长的这个数据还不能输入) gaics 发表于 2021-9-9 08:47
(defun c:dd1 (/ os qq n p1 p2 rad1 cenx ceny p1x p1y p2x p2y)
(setvar "CMDECHO" 0)
(setq os (g ...
谢谢您的指点,已试用,可完美运行。。 夏生生 发表于 2021-9-9 10:01
稍微改了一下
您这哪是稍微修改啊,简直脱胎换骨,代码简化了且运行完美,谢谢大神 sunny_8848 发表于 2021-9-9 09:50
可以选择延长左边或右边,延长的距离要能输入就方便了
也谢谢小姐姐的指点 高手,一群高手 夏生生 发表于 2021-9-9 10:01
稍微改了一下
能不能在增加个批量一边延长也支持和保存输入上一次数值 这样更加智能化 不知大佬可否改下
页:
[1]
2