明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1652|回复: 4

延长两条线是怎么做的

[复制链接]
发表于 2012-4-27 12:29:49 | 显示全部楼层 |阅读模式
RT,想了两个办法:
通过两端点坐标求交点;然后划线

通过0长度倒角延长相交,然后打断于点,然后变换图层。。都不会搞,求代码

         


本帖子中包含更多资源

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

x
发表于 2012-4-27 14:17:12 | 显示全部楼层
绘制圆弧切线
(defun c:tt (/ last_obj last_se obj obj_data obj_data_list obj_i obj_name n plst ss var1 var2 )
  (princ "\n<----圆弧切线---->")
  (princ "\n请选择圆弧,多段线/<退出>...")
  (setq var1 (getvar "cmdecho"))
  (setq var2 (getvar "osmode"))
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (setq n 0)
  (setq obj (ssget '((0 . "*POLYLINE,ARC"))))
  (if obj
    (repeat (sslength obj)
      (setq ent (entget (ssname obj n)))
      (if (= (cdr (assoc 0 ent)) "ARC")
        (progn
                (setq plst (sys_get_pt_arc_tan ent))
          (command "_.line" (car plst)  (caddr plst) "")
          (command "_.line" (cadr plst) (caddr plst) "")
        )
      )
      (if (= (cdr (assoc 0 ent)) "LWPOLYLINE")
              (progn
                (setq last_obj (ssget "p"))
                (setq obj_data_list '())
          (setq ss (ssadd (ssname obj n)))
                (command "_undo" "mark")
                (command "_explode" ss)
                (setq last_se (ssget "p"))
                (if (not (eq last_se last_obj))
                  (progn
                    (setq obj_i -1)
                    (repeat (sslength last_se)
                            (setq obj_name (ssname last_se (setq obj_i (1+ obj_i))))
                            (setq obj_data (entget obj_name))
                            (if (= (cdr (assoc 0 obj_data)) "ARC")
                              (setq obj_data_list (append (list obj_data) obj_data_list))
                            )
                    )
                  )
                )
                (command "_undo" "back")
                (if obj_data_list
                  (foreach i obj_data_list
                          (setq plst (sys_get_pt_arc_tan i))
              (command "_.line" (car plst)  (caddr plst) "")
              (command "_.line" (cadr plst) (caddr plst) "")
                  )
                )
              )
      )
      (setq n (+ n 1))
    )
  )
  (setvar "cmdecho" var1)
  (setvar "osmode" var2)
  (princ)
)
(defun sys_get_pt_arc_tan (ent / cen jdq jdz p1 p2 p3 p4 p5 rad)
  (setq cen (cdr (assoc 10 ent)));获取圆弧圆心
  (setq rad (cdr (assoc 40 ent)));获取圆弧半径
  (setq jdq (cdr (assoc 50 ent)));获取起始角度
  (setq jdz (cdr (assoc 51 ent)));获取终止角度
  (setq p1 (polar cen jdq rad);获取圆弧起始点
        p2 (polar cen jdz rad);获取圆弧终止点
        p3 (polar p1 (+ (/ pi 2) jdq) rad);获取起始点切线方向的半径点
        p4 (polar p2 (+ (/ pi 2) jdz) rad);获取终止点切线方向的半径点
        p5 (inters p1 p3 p2 p4 nil);切线交点
  )
  (if (not p5)
    (princ "\n切线无交点...")
    (list p1 p2 p5)
  )
)
 楼主| 发表于 2012-4-28 09:12:02 | 显示全部楼层
duotu007 发表于 2012-4-27 14:17
绘制圆弧切线
(defun c:tt (/ last_obj last_se obj obj_data obj_data_list obj_i obj_name n plst ss va ...

万分感谢,还有注释,好好学习一下
 楼主| 发表于 2012-4-28 09:15:18 | 显示全部楼层
本帖最后由 BIT中原 于 2012-4-28 09:54 编辑

我想修改一下那两条线的图层,可以一并做了么?我刚会在绘直线之前加一句话把环境变成我想要的图像,绘图之后怎么还原回来啊
发表于 2023-7-21 09:09:37 | 显示全部楼层
duotu007 发表于 2012-4-27 14:17
绘制圆弧切线
(defun c:tt (/ last_obj last_se obj obj_data obj_data_list obj_i obj_name n plst ss va ...

感谢 分享 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 00:40 , Processed in 0.151405 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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