明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 526|回复: 11

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

  [复制链接]
发表于 2023-5-24 10:49 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 loveu515 于 2023-5-26 09:45 编辑

求助老师们帮写一个程序,直线两端延长两端延长的数值是一个变量,输入延长的长度,带记忆功能再两端拐角拐角长度也是变量,拐角是和直线垂直的,输入拐角长度,带记忆功能),然后再把这三条线段合并成多段线。谢谢啦。
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

(defun c:tt5 (/ ang ang1 d ddd en p1 p2 p3 p4 p5 p6 pt_per px) (if (not DD) (setq DD 30)) (setq DD (if (setq D (getdist (strcat "\n输入延迟长:"))) D DD)) (if (not DDdd) (setq DDdd 50)) (setq DDdd (if (setq Ddd (getdist (strcat "\n输入垂直长:"))) Ddd Dddd)) (setq en (car (entsel "\n选择线:")) p3 (getpoint "\n垂直线方向:")) (if (equal (cdr (assoc 0 (entget ...
发表于 2023-5-24 10:49 | 显示全部楼层
本帖最后由 start4444 于 2023-5-28 10:40 编辑

(defun c:tt5 (/ ang ang1 d  ddd  en 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
)
回复

使用道具 举报

 楼主| 发表于 2023-5-25 11:30 | 显示全部楼层
路过的大神帮帮忙,就是输入直线的延长值和垂线的长度,然后把这3个线段合并
回复

使用道具 举报

发表于 2023-5-26 08:26 | 显示全部楼层
加qq1005144760

点评

谢谢  发表于 2023-5-26 09:45
回复

使用道具 举报

 楼主| 发表于 2023-5-26 13:43 | 显示全部楼层
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。可能是我没表述清楚,我想要的是:任何角度的直线,执行命令后两端延长再加两端垂线(垂线是与该直线垂直),再删除掉原来的直线。

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

更新了  发表于 2023-5-26 14:48
回复

使用道具 举报

 楼主| 发表于 2023-5-26 15:03 | 显示全部楼层
start4444 发表于 2023-5-26 13:13
(defun c:tt5 (/ ang ang1 d  ddd  en p1 p2 p3 p4 p5 p6 pt_per px)
(if (not DD)
        (setq DD 30)) (set ...

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

点评

好了  发表于 2023-5-28 10:40
回复

使用道具 举报

 楼主| 发表于 2023-5-29 10:07 | 显示全部楼层
start4444 发表于 2023-5-24 10:49
(defun c:tt5 (/ ang ang1 d  ddd  en p1 p2 p3 p4 p5 p6 pt_per px)
(if (not DD)
        (setq DD 30 ...

可以了 谢谢啦
回复

使用道具 举报

 楼主| 发表于 2023-5-29 15:43 | 显示全部楼层
start4444 发表于 2023-5-24 10:49
(defun c:tt5 (/ ang ang1 d  ddd  en p1 p2 p3 p4 p5 p6 pt_per px)
(if (not DD)
        (setq DD 30 ...

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

使用道具 举报

 楼主| 发表于 2023-6-27 16:28 | 显示全部楼层
这样可以连续选择了
  1. (defun c:tt5 (/ ang ang1 d  ddd  en p1 p2 p3 p4 p5 p6 pt_per px)
  2.   (defun Dptlst (enn / ent lst)
  3.         (setq ent (entget enn))
  4.         (setq lst (list))
  5.         (foreach x ent (IF (= (car x) 10) (setq lst (cons (cdr x) lst))))
  6.         lst
  7. )
  8. (if (not DD)
  9.         (setq DD 12)) (setq DD (if (setq D (getdist (strcat "\n输入延迟长<" (rtos DD 2 2) ">:"))) D DD))
  10. (if (not DDdd)
  11.         (setq DDdd 10)) (setq DDdd (if (setq Ddd (getdist (strcat "\n输入垂直长<" (rtos DDdd 2 2) ">:"))) Ddd Dddd))
  12. (WHILE (setq en (car (entsel "\n选择线:")) p3  (getpoint "\n垂直线方向:"))               
  13. (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)))))        

  14. (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))            
  15. (setq p3 (polar p1 (+ pi ang) dd) p4 (polar p2 ang dd) p5 (polar p3 ang1 dddd) p6 (polar p4 ang1 dddd))        
  16. (command "pline" "non" p5  "non" p3 "non" p4 "non" p6 "")   
  17. (entdel en)     
  18. (princ)
  19. )
  20.   )

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-6 15:52 , Processed in 0.251203 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表