明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 737|回复: 10

求助可以写一个类似CHA倒角命令,可以倒凹角(海棠角)

[复制链接]
发表于 2023-5-23 17:04 | 显示全部楼层 |阅读模式
1明经币



命令操作模式类似于CHA 倒切角命令
输入命令,提示:当前倒角距离 1 = 0.0000,距离 2 = 0.0000
选择第一条直线或距离【D】;如果选择D 指定距离1:输入数值(默认5)然后 指定距离2 (距离2默认与距离1数值一样也可输入数值 )
命令支持 矩形 多段线 直线等(与倒角命令适用对象一直就好)

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

评分

参与人数 1明经币 +1 收起 理由
xtjd + 1 送你一个明经币,自己动手,丰衣足食

查看全部评分

 楼主| 发表于 2023-5-24 17:48 | 显示全部楼层
我找了论坛的,改了改 但是还是达不到最优的效果
  1. (DEFUN C:HTJ (/ GETLINE VLINE1 VLINE2 DL1 DL2 PT1 PT2 PT3 PT4 PT5 PT6 PT7 ANG1 ANG2  )
  2.         (setq cm(getvar "cmdecho") os(getvar "osmode"))
  3.         (setvar "cmdecho" 0)
  4.         (DEFUN GETLINE (MSG / A1)
  5.                 (INITGET 1)
  6.                 (SETQ A1 (CAR (ENTSEL MSG)))
  7.                 (WHILE (/= (CDR (ASSOC 0 (ENTGET A1))) "LINE")
  8.                         (PRINC "\n您选的不是线图元,请再选一次...")
  9.                         (INITGET 1)
  10.                         (SETQ A1 (CAR (ENTSEL MSG)))
  11.                 )
  12.                 A1
  13.         )
  14.         (if (= h1 nil)
  15.                 (progn (print "当前默认第一条倒角距离:5 第二条倒角距离:5")(print))
  16.                 (progn (print (strcat "当前第一条倒角距离:" (rtos h1) ";第二条倒角距离:" (rtos h2))) (print))
  17.         )
  18.         (if (= "s" (getstring "设置倒角距离<s> 空格跳过:"))
  19.                 (progn
  20.                         (setq h1(getreal "\n请输入第一条倒角距离:"))
  21.                         (setq h2(getreal "\n请输入第二条倒角距离:"))
  22.                         (setq h3 1)
  23.                 )
  24.                 (if ( /= h3 1)
  25.                         (setq h1 5 h2 5)
  26.                 )
  27.         )
  28.         (SETQ VLINE1 (GETLINE "\n请选取第一条线: "))
  29.         (WHILE (OR (= VLINE2 nil) (EQUAL VLINE1 VLINE2))
  30.                 (IF (EQUAL VLINE1 VLINE2) (PRINC "\n线重复,请再选一次..."))
  31.                 (SETQ VLINE2 (GETLINE "\n请选取第二条线: "))
  32.         )
  33.         (SETQ DL1 (ENTGET VLINE1) DL2 (ENTGET VLINE2)
  34.                 PT1 (CDR (ASSOC 10 DL1)) PT2 (CDR (ASSOC 11 DL1))
  35.                 PT3 (CDR (ASSOC 10 DL2)) PT4 (CDR (ASSOC 11 DL2))
  36.                 PT5 (INTERS PT1 PT2 PT3 PT4 nil))
  37.         (IF (/= PT5 nil) (PROGN
  38.                          (SETQ PT2 (IF (< (DISTANCE PT5 PT1) (DISTANCE PT5 PT2)) PT2 PT1)
  39.                          PT4 (IF (< (DISTANCE PT5 PT3) (DISTANCE PT5 PT4)) PT4 PT3)
  40.                          ANG1 (ANGLE PT5 PT2) ANG2 (ANGLE PT5 PT4)
  41.                         PT1 (POLAR PT5 ANG1 h1) PT3 (POLAR PT5 ANG2 h2)
  42.                         PT5 (POLAR PT3 ANG1 h1))
  43.                         (ENTDEL VLINE1) (ENTDEL VLINE2)
  44.                         (COMMAND "PLINE" PT2 PT1 PT5 PT3 PT4 "")
  45.                                                                          )
  46.                 (T (PRINC "\n两直线无交点!"))
  47.         )
  48.         (setvar "osmode" os)(print)
  49.         (PRINC)
  50. )
回复

使用道具 举报

发表于 2023-5-25 07:12 | 显示全部楼层
(DEFUN C:HTJ (/ GETLINE VLINE1 VLINE2 DL1 DL2 PT1 PT2 PT3 PT4 PT5 PT6 PT7 ANG1 ANG2  )
        (setq cm(getvar "cmdecho") os(getvar "osmode"))
        (setvar "cmdecho" 0)
        (if (= h1 nil)
                (progn (print "当前默认第一条倒角距离:5 第二条倒角距离:5")(print))
                (progn (print (strcat "当前第一条倒角距离:" (rtos h1) ";第二条倒角距离:" (rtos h2))) (print))
        )
        (if (= "s" (getstring "设置倒角距离<s> 空格跳过:"))
                (progn
                        (setq h1(getreal "\n请输入第一条倒角距离:"))
                        (setq h2(getreal "\n请输入第二条倒角距离:"))
                        (setq h3 1)
                )
                (if ( /= h3 1)
                        (setq h1 5 h2 5)
                )
        )               
                (while
        (DEFUN GETLINE (MSG / A1)
                (INITGET 1)
                (SETQ A1 (CAR (ENTSEL MSG)))
                (WHILE (/= (CDR (ASSOC 0 (ENTGET A1))) "LINE")
                        (PRINC "\n您选的不是线图元,请再选一次...")
                        (INITGET 1)
                        (SETQ A1 (CAR (ENTSEL MSG)))
                )
                A1
        )
        (SETQ VLINE1 (GETLINE "\n请选取第一条线: "))  
        (SETQ VLINE2 (GETLINE "\n请选取第二条线: "))      
        (SETQ DL1 (ENTGET VLINE1) DL2 (ENTGET VLINE2)
                PT1 (CDR (ASSOC 10 DL1)) PT2 (CDR (ASSOC 11 DL1))
                PT3 (CDR (ASSOC 10 DL2)) PT4 (CDR (ASSOC 11 DL2))
                PT5 (INTERS PT1 PT2 PT3 PT4 nil))
        (IF (/= PT5 nil) (PROGN
                         (SETQ PT2 (IF (< (DISTANCE PT5 PT1) (DISTANCE PT5 PT2)) PT2 PT1)
                         PT4 (IF (< (DISTANCE PT5 PT3) (DISTANCE PT5 PT4)) PT4 PT3)
                         ANG1 (ANGLE PT5 PT2) ANG2 (ANGLE PT5 PT4)
                        PT1 (POLAR PT5 ANG1 h1) PT3 (POLAR PT5 ANG2 h2)
                        PT5 (POLAR PT3 ANG1 h1))
                        (ENTDEL VLINE1) (ENTDEL VLINE2)
                        (COMMAND "PLINE" PT2 PT1 PT5 PT3 PT4 "")
                                                                                                (COMMAND "EXPLODE" (entlast))
                                                               )
                (T (PRINC "\n两直线无交点!"))
        )                )
        (setvar "osmode" os)
        (PRINC)
)
可以循环了,但支持矩形 多段线就不会了,希望大佬出手下
回复

使用道具 举报

发表于 2023-5-26 11:19 | 显示全部楼层
我是菜鸟,凑合用吧。
(DEFUN C:HTJ (/        GETLINE        VLINE1 VLINE2 DL1 DL2 PT1 PT2 PT3 PT4 PT5 PT6
              PT7 ANG1 ANG2 H3)
  (setq        cm (getvar "cmdecho")
        os (getvar "osmode")
  )
  (if (= htj_h1 nil)
    (progn (print "当前默认第一条倒角距离:5 第二条倒角距离:5")
           (print)
    )
    (progn (print (strcat "当前第一条倒角距离:"
                          (rtos htj_h1)
                          ";第二条倒角距离:"
                          (rtos htj_h2)
                  )
           )
           (print)
    )
  )
  (if (= "s" (getstring "[<S>设置倒角距离/<空格>跳过]:"))
    (progn
      (setq htj_h1 (getreal "\n请输入第一条边倒角距离:"))
      (setq htj_h2 (getreal "\n请输入第二条边倒角距离:"))
    )
    (if        htj_h1 htj_h2
      (setq htj_h1 5
            htj_h2 5
      )
    )
  )
  (while
    (defun getline (msg / a1 po)
      (setvar "osmode" 512)
      (setq po (getpoint msg))
      (if (= po nil)
        (progn
          (princ "\n未选取对象,退出.")
          (setvar "osmode" os)
          (exit)
        )
        (progn
          (setq a1 (ssname (ssget po po) 0))
          (cond        ((= (cdr (assoc 0 (entget a1))) "LWPOLYLINE")
                 (command "_.explode" A1)
                 (setq a1 (ssname (ssget po po) 0))
                )
                ((= (cdr (assoc 0 (entget a1))) "LINE")
                 (setq a1 a1)
                )
                ((/= (cdr (assoc 0 (entget a1))) "LINE")
                 (PRINC "\n您选的不是线,请再选一次:")
                 (setq po (getpoint msg))
                 (setq a1 (ssname (ssget po po) 0))
                )
          )
        )
      )
    )
     (SETQ VLINE1 (GETLINE "\n请选取第一条线: "))
     (SETQ VLINE2 (GETLINE "\n请选取第二条线: "))
     (setvar "osmode" 0)
     (SETQ DL1 (ENTGET VLINE1)
           DL2 (ENTGET VLINE2)
           PT1 (CDR (ASSOC 10 DL1))
           PT2 (CDR (ASSOC 11 DL1))
           PT3 (CDR (ASSOC 10 DL2))
           PT4 (CDR (ASSOC 11 DL2))
           PT5 (INTERS PT1 PT2 PT3 PT4 nil)
     )
     (IF (/= PT5 nil)
       (PROGN
         (SETQ PT2  (IF        (< (DISTANCE PT5 PT1) (DISTANCE PT5 PT2))
                      PT2
                      PT1
                    )
               PT4  (IF        (< (DISTANCE PT5 PT3) (DISTANCE PT5 PT4))
                      PT4
                      PT3
                    )
               ANG1 (ANGLE PT5 PT2)
               ANG2 (ANGLE PT5 PT4)
               PT1  (POLAR PT5 ANG1 htj_h1)
               PT3  (POLAR PT5 ANG2 htj_h2)
               PT5  (POLAR PT3 ANG1 htj_h1)
         )
         (ENTDEL VLINE1)
         (ENTDEL VLINE2)
         (COMMAND "PLINE" PT2 PT1 PT5 PT3 PT4 "")
         (COMMAND "EXPLODE" (entlast))
       )
       (T (PRINC "\n两直线无交点!"))
     )
  )
  (setvar "osmode" os)
  (PRINC)
)

评分

参与人数 1明经币 +1 收起 理由
depgfdepgf + 1 楼上大佬,很完美了,支持!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2023-5-26 21:36 | 显示全部楼层
depgfdepgf 发表于 2023-5-25 07:12
(DEFUN C:HTJ (/ GETLINE VLINE1 VLINE2 DL1 DL2 PT1 PT2 PT3 PT4 PT5 PT6 PT7 ANG1 ANG2  )
        (set ...

可以的  基本满足需求,但就是选择线段是点选,第二是矩形会被炸开 能否解决一下呢 谢谢
回复

使用道具 举报

发表于 2023-5-28 12:43 来自手机 | 显示全部楼层
同求,有大佬可以解决吗?
回复

使用道具 举报

发表于 2023-5-29 00:10 | 显示全部楼层
太简单了,明天给你写个,现在太晚了睡了
回复

使用道具 举报

 楼主| 发表于 2023-5-29 21:18 | 显示全部楼层
d1742647821 发表于 2023-5-29 00:10
太简单了,明天给你写个,现在太晚了睡了

期待您的大作
回复

使用道具 举报

发表于 2023-5-29 22:41 | 显示全部楼层
期待有大佬出来搞一下
回复

使用道具 举报

发表于 2023-8-3 10:53 | 显示全部楼层
d1742647821 发表于 2023-5-29 00:10
太简单了,明天给你写个,现在太晚了睡了

大佬,有时间写下吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 21:41 , Processed in 1.430214 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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