明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: Jack_PC

[基础] 修剪出错

  [复制链接]
发表于 2011-7-17 22:32:17 | 显示全部楼层
Jack_PC 发表于 2011-7-17 22:08
你能帮我看楼下刚贴的全部程序吗?

;画矩形并倒圆角
(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 R (Getreal "\n 指定圆角半径 <1.0>: "))
  (If R Null) (Setq R 1)
  (Setvar "Filletrad" R)
  (Command "Fillet" "P" (Entlast))
  (setvar 'osmode os)
(Prin1))
发表于 2011-7-17 22:54:51 | 显示全部楼层
不知道是不是这样的结果

  1. (defun c:test ()
  2.   (setq pt1 (getpoint "\n请指定第一角点:"))
  3.   (setq pt2 (getcorner pt1 "\n请指定对角点:"))
  4.   (setq r 3.0)
  5.   (setvar "edgemode" 0)
  6.   (command "RECTANG" pt1 pt2)
  7.   (setq en (entlast))
  8.   (command "fillet" "r" r)
  9.   (command "fillet" "p" (list en pt1))
  10.   (setq en (entlast))
  11.   (command "explode" en)
  12.   (setq ss (ssadd))
  13.   (while (setq en (entnext en))
  14.     (ssadd en ss)
  15.   )
  16.   (setq k 0)
  17.   (repeat (sslength ss)
  18.     (setq en  (ssname ss k)
  19.           ent (entget en)
  20.     )
  21.     (if        (= (cdr (assoc 0 ent)) "LINE")
  22.       (entdel en)
  23.     )
  24.     (setq k (1+ k))
  25.   )
  26.   (princ)
  27. )
 楼主| 发表于 2011-7-17 23:27:34 | 显示全部楼层
谢谢各位,我的意思是长方形不是程序生成的,是图档中已经存在的,只需要在CAD中运行这个程序实现倒圆角,请看下图片所示结果

本帖子中包含更多资源

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

x
发表于 2011-7-18 01:25:09 | 显示全部楼层
拉框圆角:

  1. (defun c:test ()
  2.   (setq oldos (getvar "osmode"))
  3.   (setq        oldcmd        (getvar "cmdecho"))
  4.   (setvar "cmdecho" 0)       
  5.   (setq tf T)
  6.   (setq pta (getpoint "\n指定一个角点:"))  
  7.   (while tf
  8.     (initget "R")
  9.     (setq ptc (getcorner pta (strcat "\n指定另一个角点[圆角半径(R)]:<"(rtos (setq fil (getvar "FILLETRAD")))">")))
  10.     (cond
  11.       ((= ptc "R")
  12.        (setq fil (getreal (strcat "\n指定圆角半径:<" (rtos (getvar "FILLETRAD"))">")))
  13.        (if (= fil nil)
  14.          (setq fil (getvar "FILLETRAD"))
  15.          (setvar "FILLETRAD" fil)
  16.        )
  17.       )
  18.       ((= (type ptc) 'list)
  19.        (setq tf nil)
  20.        (setq ptn (list (min (car pta) (car ptc))
  21.                        (min (cadr pta) (cadr ptc))
  22.                  )
  23.              ptc (list (max (car pta) (car ptc))
  24.                        (max (cadr pta) (cadr ptc))
  25.                  )
  26.              pta ptn
  27.        )
  28.        (setq ptb (list (car pta) (cadr ptc))
  29.              ptd (list (car ptc) (cadr pta))
  30.        )
  31.        (if (< oldos 16384)
  32.             (setvar "osmode" (+ oldos 16384))
  33.           )
  34.        (setq fil (getvar "FILLETRAD"))   
  35.        (if (/= fil 0)
  36.          (progn
  37.            (setq pt1 (polar pta (* 0.5 pi) fil)
  38.                  pt2 (polar ptb (* 0.5 pi 3) fil)
  39.                  pt3 (polar ptb 0 fil)
  40.                  pt4 (polar ptc pi fil)
  41.                  pt5 (polar ptc (* 0.5 pi 3) fil)
  42.                  pt6 (polar ptd (* 0.5 pi) fil)
  43.                  pt7 (polar ptd pi fil)
  44.                  pt8 (polar pta 0 fil)                 
  45.            )
  46.            (command "pline"        pt1   pt2   "a"          pt3        "L"   pt4
  47.                     "A"          pt5        "L"   pt6   "A"          pt7        "L"   pt8
  48.                     "A"          "CL"
  49.                    )
  50.          )
  51.          (command "RECTANGLE" pta ptc)
  52.        )
  53.       )
  54.     )
  55.   )
  56.   (setvar "osmode" oldos)
  57.   (setvar "cmdecho" oldcmd)
  58.   (princ)
  59. )
发表于 2011-7-18 02:57:23 | 显示全部楼层
本帖最后由 zhynt 于 2011-7-18 08:13 编辑

选择矩形倒圆角

  1. (defun c:test ()
  2.   (setq tf T)
  3.   (setq ptn (getpoint "\n指定一个角点:"))
  4.   (while tf
  5.     (initget "R")
  6.     (setq
  7.       ptm (getcorner ptn
  8.                      (strcat "\n指定另一个角点[圆角半径(R)]:<"
  9.                              (rtos (setq fil (getvar "FILLETRAD")))
  10.                              ">"
  11.                      )
  12.           )
  13.     )
  14.     (cond
  15.       ((= ptm "R")
  16.        (setq fil (getreal (strcat "\n指定圆角半径:<"
  17.                                   (rtos (getvar "FILLETRAD"))
  18.                                   ">"
  19.                           )
  20.                  )
  21.        )
  22.        (if (= fil nil)
  23.          (setq fil (getvar "FILLETRAD"))
  24.          (setvar "FILLETRAD" fil)
  25.        )
  26.       )
  27.       ((= (type ptm) 'list)
  28.        (setq tf nil)
  29.        (setq ss (ssget "w" ptn ptm '((0 . "LWPOLYLINE"))))
  30.        (setq n 0)
  31.        (repeat (sslength ss)
  32.          (setq en (ssname ss n))
  33.          (command "FILLET" "P" en)
  34.          (setq n (1+ n))
  35.        )
  36.       )
  37.     )
  38.   )
  39. )
发表于 2011-7-18 08:03:02 | 显示全部楼层
本帖最后由 ljpnb 于 2011-7-18 08:04 编辑
Jack_PC 发表于 2011-7-17 23:27
谢谢各位,我的意思是长方形不是程序生成的,是图档中已经存在的,只需要在CAD中运行这个程序实现倒圆角,请 ...


如果长方形是用rectang画的,这样就可以了
(setvar "FILLETRAD"  3.0);;3.0可以用变量输入
(command "fillet" "p" (entsel))
发表于 2011-7-18 08:17:01 | 显示全部楼层
不错,一时没想到,搞复杂了。
 楼主| 发表于 2011-7-18 19:43:15 | 显示全部楼层
谢谢各位!
长方形是分别由四条直线组成,非常希望此问题大家帮助解决,前面我贴出的程序只可以在2004中运行正常,但是在2010中就出错,
发表于 2011-7-18 21:17:08 | 显示全部楼层
...但是在2010中就出错...
???
看不出有何干碍
请上传样本文件(*.Dwg )以利诊断
 楼主| 发表于 2011-7-18 23:29:30 | 显示全部楼层
Andyhon 发表于 2011-7-18 21:17
...但是在2010中就出错...
???
看不出有何干碍

这是2010的DWG档案,请帮我看看

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-6-9 20:04 , Processed in 0.175581 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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