明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 99|回复: 1

直线清角功能,希望加一个圆心偏移功能

[复制链接]
发表于 前天 11:41 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 小王在学lisp 于 2025-2-19 14:29 编辑


(defun c:32 (/ a1 a2 l1 l2 p1 p2 layer p5 p5-offset arc-ent arc-ename)
  (while T
    (setq l1 (car (entsel "\n选择第一条直线: ")))
    (if (null l1) (progn (princ "\n用户取消操作。") (exit)))  ; 如果用户取消选择,退出函数
    (setq l2 (car (entsel "\n选择第二条直线: ")))
    (if (null l2) (progn (princ "\n用户取消操作。") (exit)))  ; 如果用户取消选择,退出函数
    (setq $radius 0.15)  ; 设置圆弧半径
    (setq layer (p-dxf l1 8))
    (setq p5 (inters (p-dxf l1 10)
                     (p-dxf l1 11)
                     (p-dxf l2 10)
                     (p-dxf l2 11)
                     nil
                     )
          p1 (p-line-endpoint l1 p5 nil)
          p2 (p-line-endpoint l2 p5 nil)
          a1 (angle p5 (cdr p1))
          a2 (angle p5 (cdr p2))
          larc (p-larc a1 a2)
    )
    (setq offset 0.07)
    (setq p5-offset (polar p5 a1 offset))  ; 沿第一条直线方向偏移
    (setq p5-offset (polar p5-offset a2 offset))  ; 沿第二条直线方向偏移

    ;; 创建圆弧
    (setq arc-ent (p-make-arc p5-offset $radius (car larc) (cadr larc) layer))
    (setq arc-ename (entlast))  ; 获取刚刚创建的圆弧的实体名
    (entupd arc-ename)  ; 更新圆弧

      ;; 修剪两条直线
     ; (command "_.trim" arc-ename "" l1 "" l2 "" "_F" p5 "" "")

    ;; 提示用户继续操作
    (princ "\n操作完成,继续下一次操作...")
  )
  (princ)
)
(defun p-get (lst keys /)
  (if (atom keys)
    (cdr (assoc keys lst))
    (mapcar (function (lambda (e) (cdr (assoc e lst)))) keys)
  )
)
(defun p-get1 (lst keys / e)
  (if (atom keys)
    (assoc keys lst)
    (mapcar (function (lambda (e) (assoc e lst))) keys)
  )
)
(defun p-dxf (ename keys /)
  (p-get (entget ename) keys)
)
(defun p-entmod        (ent datas /)
  (entmod (p-set (entget ent) datas))
)
(defun p-set (lst values / old)
  (if (and values (atom (car values)))
    (setq values (list values))
  )
  (foreach value values
    (if        (setq old (assoc (car value) lst))
      (setq lst (subst value old lst))
      (setq lst (append lst (list value)))
    )
  )
  lst
)
(defun p-make-arc (point radius start end layer /)
  (entmake (list
             '(0 . "ARC")
             (cons 8 layer)
             (cons 10 point)
             (cons 40 radius)
             (cons 50 start)
             (cons 51 end)
           )
  )
)
;; (p-line-endpoint (car (entsel)) (getpoint) t)
(defun p-line-endpoint (line p near / ps)
  (setq ps (p-get1 (entget line) '(10 11)))

  (if (< (distance (cdar ps) p) (distance (cdadr ps) p))
    (if        near
      (car ps)
      (cadr ps)
    )
    (if        near
      (cadr ps)
      (car ps)
    )
  )
)
(defun p-edit-value (msg old / value)
  (cond
    ((= 'real (type old))
     (setq value (getdist (strcat msg " <" (rtos old 2 2) ">: ")))
    )
    ((= 'int (type old))
     (setq value (getint (strcat msg " <" (itoa old) ">: ")))
    )
    ((= 'list (type old))
     (setq
       value
        (getpoint (strcat msg " <" (vl-princ-to-string old) ">: "))
     )
    )
    ((= 'str (type old))
     (setq value (getstring (strcat msg " <" old ">: ")))
    )
  )
  (if (or (null value) (= "" value))
    old
    value
  )
)
(defun p-larc (a4 a5)
  (if (or (and (> a5 a4) (< (- a5 a4) pi))
          (and (< a5 a4) (> (- a4 a5) pi))
      )
    (list a5 a4)
    (list a4 a5)
  )
) 如图,现在的代码在执行修剪的时候会出错,希望有路过的大神指点

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

使用道具 举报

 楼主| 发表于 昨天 08:22 | 显示全部楼层
EEEE囊膏哦
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-21 21:08 , Processed in 0.176908 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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