tfanghui 发表于 2022-8-31 23:49:33

带圆角矩形

本帖最后由 tfanghui 于 2022-9-1 00:41 编辑

            此程序借鉴
            怎么在新图层进行标注完成后返回当前图层
http://bbs.mjtd.com/forum.php?mo ... 137&fromuid=7330607
(出处: 明经CAD社区)
                  图层返回但是没有成功,不知道少了什么代码。
带圆角的矩形,美中不足的是:   

1、画这完这个带圆角矩形要重新设置矩形的圆角,才可以画正常不带圆角的矩形,
2、不可以返回原来的图层,返回图层的代码在别的程序可以运行,在这里似乎不起作用。

(defun c:R5(/ old_lay vv layer)
    (setq old_lay (getvar "clayer")) ;保存当前图层
    (setq vv (getvar "osmode")) ;保存当前捕捉方式
(command "layer" "m" "矩形" "c" "3" "" "")
    (command "RECTANG" "F" 5 "")
    (command "RECTANG" "F" 0 "")
    (setvar "osmode" vv) ;恢复原先捕捉方式
    (setvar "clayer" old_lay) ;恢复原先图层
      (princ)
)




哪位大神指点一下!!谢谢!!

Sonnenblumen 发表于 2022-9-1 12:53:52

再提供一种思路吧!
(defun c:R5(/ old_lay)
        (setq old_lay (getvar "clayer")) ;保存当前图层
(vl-cmdf "layer" "m" "矩形" "c" "3" "" "")
        (vl-cmdf "RECTANG" pause pause)
        (vl-cmdf "fillet" "p" "r" 5 (entlast))
        (setvar "clayer" old_lay) ;恢复原先图层
        (princ)
)

ssyfeng 发表于 2022-9-1 11:16:52

这样应该可以了:
(defun c:R5 (/ old_lay vv layer)
        (setq old_lay (getvar "clayer")) ;保存当前图层
        (setq vv (getvar "osmode")) ;保存当前捕捉方式
        (command "layer" "m" "矩形" "c" "3" "" "")
        (command "RECTANG" "F" 5)
        (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
        (setvar "osmode" vv) ;恢复原先捕捉方式
        (setvar "clayer" old_lay) ;恢复原先图层
        (command "RECTANG" "F" 0)
        (command)
        (princ)
)

ssyfeng 发表于 2022-9-1 09:10:29

是不是这样:
(defun c:R5 (/ old_lay vv layer)
        (setq old_lay (getvar "clayer")) ;保存当前图层
        (setq vv (getvar "osmode")) ;保存当前捕捉方式
        (command "layer" "m" "矩形" "c" "3" "" "")
        (command "RECTANG" "F" 5 pause)
        (setvar "osmode" vv) ;恢复原先捕捉方式
        (setvar "clayer" old_lay) ;恢复原先图层
        (princ)
)

tfanghui 发表于 2022-9-1 11:08:01

ssyfeng 发表于 2022-9-1 09:10
是不是这样:
(defun c:R5 (/ old_lay vv layer)
        (setq old_lay (getvar "clayer")) ;保存当前图层


你好,大神,图层可以返回了,感谢指点,但是恢复圆角为直角,还是不行,

liuhe 发表于 2022-9-1 14:54:40

ssyfeng 发表于 2022-9-1 11:16
这样应该可以了:
(defun c:R5 (/ old_lay vv layer)
        (setq old_lay (getvar "clayer")) ;保存当前图层
...

原理是你 多用用F快捷键就知道,每一次调用F圆角命令,系统都会自动记录上次设定R半径,要想恢复原来都R,必须记录原先的R,然后再恢复。你原先都R正好是0而已

tfanghui 发表于 2022-9-4 07:48:25

liuhe 发表于 2022-9-1 14:54
原理是你 多用用F快捷键就知道,每一次调用F圆角命令,系统都会自动记录上次设定R半径,要想恢复原来都R ...

是的,所以这个代码就比较长,后面的是画好矩形再倒角,省去了恢复的步骤。

chq168168 发表于 2022-9-6 18:02:05

(defun c:JLQ (/ old_lay vv layer)
      (setq old_lay (getvar "clayer")) ;保存当前图层
      (setq vv (getvar "osmode")) ;保存当前捕捉方式
      (setq rad (getdist "输入直径<0>::"))
      (if (not rad)(setq rad 0));设置默认值为0
      (command "layer" "m" "矩形" "c" "3" "" "")
      (command "rectang" "F" rad)
      (while (> (getvar "cmdactive") 0) (command pause))
      (setvar "osmode" vv) ;恢复原先捕捉方式
      (setvar "clayer" old_lay) ;恢复原先图层
                (command)
      (princ)
)
页: [1]
查看完整版本: 带圆角矩形