hushiyong11 发表于 2021-9-8 16:54:23

初学写的一个延长直线和圆弧的功能,还不完善,望高手能指点

;;;代码还不完善,有两个问题一直没解决:
;;;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)
)

夏生生 发表于 2021-9-9 10:01:40

稍微改了一下
(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 08:47:26

本帖最后由 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 09:50:05

可以选择延长左边或右边,延长的距离要能输入就方便了

sunny_8848 发表于 2021-9-9 11:02:44

本帖最后由 sunny_8848 于 2021-9-9 11:04 编辑

sunny_8848 发表于 2021-9-9 09:50
可以选择延长左边或右边,延长的距离要能输入就方便了
把直线的中点放到原点,延长直线,就会发现是两端各延长50(实际上图形都有其位置的,延长的这个数据还不能输入)

hushiyong11 发表于 2021-9-9 11:35:02

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 ...

谢谢您的指点,已试用,可完美运行。。

hushiyong11 发表于 2021-9-9 11:41:16

夏生生 发表于 2021-9-9 10:01
稍微改了一下

您这哪是稍微修改啊,简直脱胎换骨,代码简化了且运行完美,谢谢大神

hushiyong11 发表于 2021-9-9 11:42:42

sunny_8848 发表于 2021-9-9 09:50
可以选择延长左边或右边,延长的距离要能输入就方便了

也谢谢小姐姐的指点

xj6019 发表于 2021-9-9 14:25:52

高手,一群高手

甜兮兮 发表于 2021-9-9 20:53:26

夏生生 发表于 2021-9-9 10:01
稍微改了一下

能不能在增加个批量一边延长也支持和保存输入上一次数值   这样更加智能化   不知大佬可否改下
页: [1] 2
查看完整版本: 初学写的一个延长直线和圆弧的功能,还不完善,望高手能指点