Andyhon 发表于 2011-7-19 08:33:21

试用这个吧
;; 祥子 增修版
(Defun C:Rer (/ pt1 pt2 r os)
(Initget 1)
(Setq pt1 (Getpoint "\n 指定左下角点: "))
(Initget 3)
(setq pt2 (getcorner pt1 "\n请指定对角点:"))
(setq os (getvar 'osmode))

(Setvar "Cmdecho" 0)
(Setvar "osmode" 0)
(Command "Rectangle" Pt1 pt2)
(Initget 4)
(setq svR (getVar "FilletRad"))
(Setq R
    (Getreal
      (strcat
      "\n 指定圆角半径 <"
      (Rtos svR)
      ">: "
) ) )   
(If R
    Null
   (Setq R svR)
)
(Setvar "Filletrad" R)
(Command "Fillet" "P" (Entlast))
(setvar 'osmode os)
(Prin1)
)

ljpnb 发表于 2011-7-19 10:53:14

本帖最后由 ljpnb 于 2011-7-20 22:08 编辑

这个试试:
(Defun C:tt (/ pt1 pt2 r os)
(Initget 1)
(Setq pt1 (Getpoint "\n 指定矩形第一个角点: "))
(Initget 3)
(setq pt2 (getcorner pt1 "\n请指定对角点:"))
(setq os (getvar 'osmode))
(Setvar "osmode" 0)
(Setvar "Cmdecho" 0)
(setq ss (ssget "c" pt1 pt2))
(if (= (cdr (assoc 0 (entget (ssname ss 0)))) "LINE")
    (progn
      (Command "pedit" (ssname ss 0) "" "j" ss "" "")
      (setq en (entlast))
    )
    (setq en (ssname ss 0))
)
(Initget 4)
(setq svR (getVar "FilletRad"))
(Setq R
(Getreal
    (strcat
      "\n 指定圆角半径 <"
      (Rtos svR)
      ">: "
    )
)
)
(If R
    Null
    (Setq R svR)
)
(Setvar "Filletrad" R)
(Command "Fillet" "P" en)
(command "explode" en)
(setvar 'osmode os)
(PrinC)
)

Jack_PC 发表于 2011-7-19 19:55:57

非常感谢各位!
可能还是我没有表达清楚,我的意思是,这个长方形是用手工在CAD中画的,需要用程序指定长方形的两个对角点,实现倒R角

zhynt 发表于 2011-7-19 22:58:31

本帖最后由 zhynt 于 2011-7-19 23:07 编辑

你应该发个图上来说明原来的图是什么样的,程序运行后的结果是什么样的,你想怎样操作,或者怎样操作无所谓只要结果。

Jack_PC 发表于 2011-7-20 01:45:38

本帖最后由 Jack_PC 于 2011-7-20 01:49 编辑

zhynt 发表于 2011-7-19 22:58 http://space.mjtd.com/static/image/common/back.gif
你应该发个图上来说明原来的图是什么样的,程序运行后的结果是什么样的,你想怎样操作,或者怎样操作无所谓 ...

我前面发了图片上来,请看下面的图片效果,程序运行前是一个手工已画好没有倒R角的长方形,程序运行之后,只是长方形增加了倒R角.

zhynt 发表于 2011-7-20 02:34:26

本帖最后由 zhynt 于 2011-7-20 02:36 编辑

这个程序不就是你想要的吗?
程序在15楼

ljpnb 发表于 2011-7-20 08:52:58

zhynt 发表于 2011-7-20 02:34 static/image/common/back.gif
这个程序不就是你想要的吗?
程序在15楼

人家那些矩形不是用rectang画的,是由四条线组成的。。。

zhynt 发表于 2011-7-20 09:23:09

那就先变成矩形再倒角

zhynt 发表于 2011-7-20 09:42:47

那就这样咯:
(defun c:test ()
(setq tf T)
(setq ptn (getpoint "\n指定一个角点:"))
(while tf
    (initget "R")
    (setq ptm (getcorner ptn (strcat "\n指定另一个角点,一次选一个矩形。[圆角半径(R)]:<"
                             (rtos (setq fil (getvar "FILLETRAD")))
                             ">"))
    )
    (cond
      ((= ptm "R")
       (setq fil (getreal (strcat "\n指定圆角半径:<"
                                  (rtos (getvar "FILLETRAD"))
                                  ">"))
       )
       (if (= fil nil)
       (setq fil (getvar "FILLETRAD"))
       (setvar "FILLETRAD" fil)
       )
      )
      ((= (type ptm) 'list)
       (setq tf nil)
       (setq ss (ssget "w" ptn ptm))
       (command        "PEDIT" (ssname ss 0)"Y" "J"(ssname ss 1)(ssname ss 2)(ssname ss 3)"" "")
       (setq en (entlast))
       (command "FILLET" "P" en)
       (command "EXPLODE" en)
      )
    )
)
)

Jack_PC 发表于 2011-7-20 18:52:26

zhynt 发表于 2011-7-20 09:42 static/image/common/back.gif
那就这样咯:

非常感谢你的热心,虽不是我需要的结果,但是也从你的例子中学到了以前不知道的内容
页: 1 2 [3] 4
查看完整版本: 修剪出错