loveu515 发表于 2023-5-24 10:49:18

求助老师们帮写一个程序,直线两端延长再两端拐角

本帖最后由 loveu515 于 2023-5-26 09:45 编辑

求助老师们帮写一个程序,直线两端延长(两端延长的数值是一个变量,输入延长的长度,带记忆功能)再两端拐角(拐角长度也是变量,拐角是和直线垂直的,输入拐角长度,带记忆功能),然后再把这三条线段合并成多段线。谢谢啦。

start4444 发表于 2023-5-24 10:49:19

本帖最后由 start4444 于 2023-5-28 10:40 编辑

(defun c:tt5 (/ ang ang1 dddden p1 p2 p3 p4 p5 p6 pt_per px)
(if (not DD)
      (setq DD 30)) (setq DD (if (setq D (getdist (strcat "\n输入延迟长<" (rtos DD 2 2) ">:"))) D DD))
(if (not DDdd)
      (setq DDdd 50)) (setq DDdd (if (setq Ddd (getdist (strcat "\n输入垂直长<" (rtos DDdd 2 2) ">:"))) Ddd Dddd))
(setq en (car (entsel "\n选择线:")) p3(getpoint "\n垂直线方向:"))               
(if(equal (cdr (assoc 0 (entget en))) "LWPOLYLINE")(setq p1 (car (Dptlst en)) p2 (cadr (Dptlst en))) (setq p1 (cdr (assoc 10 (entget en))) p2 (cdr (assoc 11 (entget en)))))      

(setq ang (angle p1 p2) p4 (polar p3 (+ ang (* 0.5 pi)) 1) pt_per (inters p1 p2 p3 p4 nil) ang1 (angle pt_per p3))            
(setq p3 (polar p1 (+ pi ang) dd) p4 (polar p2 ang dd) p5 (polar p3 ang1 dddd) p6 (polar p4 ang1 dddd))      
(command "pline" "non" p5"non" p3 "non" p4 "non" p6 "")   
(entdel en)   
(princ)      
)
(defun Dptlst (enn / ent lst)
      (setq ent (entget enn))
      (setq lst (list))
      (foreach x ent (if (= (car x) 10) (setq lst (cons (cdr x) lst))))
      lst
)

loveu515 发表于 2023-5-25 11:30:17

路过的大神帮帮忙,就是输入直线的延长值和垂线的长度,然后把这3个线段合并:P-

SdlFreeCAD 发表于 2023-5-26 08:26:15

加qq1005144760

loveu515 发表于 2023-5-26 13:43:40

start4444 发表于 2023-5-26 13:13
(defun c:tt5 (/ ang d ddd en p1 p2 p3 p4 p5 p6)
(if (not DD)
        (setq DD 30)) (setq DD (if (setq D...

非常感谢帮忙!我用的时候发现,直线必须是水平的,画出来的垂线才对,延长值是带记忆上一次的,但垂直值不是上一次的,垂直值不输入的话一直都是50。可能是我没表述清楚,我想要的是:任何角度的直线,执行命令后两端延长再加两端垂线(垂线是与该直线垂直),再删除掉原来的直线。

如果可以的话,可不可以做成既能选择直线,又能选择多段线呢?有时候也碰到直线是多段线的情况。给添麻烦啦:loveliness::loveliness:。

loveu515 发表于 2023-5-26 15:03:46

start4444 发表于 2023-5-26 13:13
(defun c:tt5 (/ ang ang1 dddden p1 p2 p3 p4 p5 p6 pt_per px)
(if (not DD)
        (setq DD 30)) (set ...

非常完美了!能把原来的直线在程序中删掉吗?

loveu515 发表于 2023-5-29 10:07:37

start4444 发表于 2023-5-24 10:49
(defun c:tt5 (/ ang ang1 dddden p1 p2 p3 p4 p5 p6 pt_per px)
(if (not DD)
      (setq DD 30 ...

可以了 谢谢啦

loveu515 发表于 2023-5-29 15:43:29

start4444 发表于 2023-5-24 10:49
(defun c:tt5 (/ ang ang1 dddden p1 p2 p3 p4 p5 p6 pt_per px)
(if (not DD)
      (setq DD 30 ...

能不能再帮下忙,改成连续选择呀?用的时候发现选完一条直线后,命令就结束了,再选其他直线,需要重新启用命令

loveu515 发表于 2023-6-27 16:28:49

这样可以连续选择了
(defun c:tt5 (/ ang ang1 dddden p1 p2 p3 p4 p5 p6 pt_per px)
(defun Dptlst (enn / ent lst)
      (setq ent (entget enn))
      (setq lst (list))
      (foreach x ent (IF (= (car x) 10) (setq lst (cons (cdr x) lst))))
      lst
)
(if (not DD)
      (setq DD 12)) (setq DD (if (setq D (getdist (strcat "\n输入延迟长<" (rtos DD 2 2) ">:"))) D DD))
(if (not DDdd)
      (setq DDdd 10)) (setq DDdd (if (setq Ddd (getdist (strcat "\n输入垂直长<" (rtos DDdd 2 2) ">:"))) Ddd Dddd))
(WHILE (setq en (car (entsel "\n选择线:")) p3(getpoint "\n垂直线方向:"))               
(IF(equal (cdr (assoc 0 (entget en))) "LWPOLYLINE")(setq p1 (car (Dptlst en)) p2 (cadr (Dptlst en))) (setq p1 (cdr (assoc 10 (entget en))) p2 (cdr (assoc 11 (entget en)))))      

(setq ang (angle p1 p2) p4 (polar p3 (+ ang (* 0.5 pi)) 1) pt_per (inters p1 p2 p3 p4 nil) ang1 (angle pt_per p3))            
(setq p3 (polar p1 (+ pi ang) dd) p4 (polar p2 ang dd) p5 (polar p3 ang1 dddd) p6 (polar p4 ang1 dddd))      
(command "pline" "non" p5"non" p3 "non" p4 "non" p6 "")   
(entdel en)   
(princ)
)
)

页: [1]
查看完整版本: 求助老师们帮写一个程序,直线两端延长再两端拐角