明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11882|回复: 34

实现框选一次性倒R角

    [复制链接]
发表于 2012-5-17 21:41:52 | 显示全部楼层 |阅读模式
本帖最后由 aaacjh 于 2012-5-17 21:51 编辑

求lisp源码实现:,另外还想实现对已倒过圆角进行框选一次性识别修正的lisp源码。
之前学习lisp时,对矩形编写了以下程序,繁杂又有缺陷,特此求助于高手们,望相助!先行谢过!
(defun c:ffr(/ newrad ss i aa bb va i_list new_rlist n_list newcx newcy)
(setq newrad(getreal "\n请输入新的半径:"))
(setq ss(ssget))
(setq i 0)
(repeat (sslength ss)
(setq i_list(entget(ssname ss i)))
(if (= (cdr(assoc 0 i_list)) "ARC")
     (progn
       (setq bb(assoc 40 i_list))
       (setq va(- newrad (cdr bb)))
     )
)
)
(setq i 0)
(repeat (sslength ss)
(setq i_list(entget(ssname ss i)))
(cond
((= (cdr(assoc 0 i_list)) "ARC")
  (setq new_rlist(cons 40 newrad));创建一个新表
  (setq aa(assoc 10 i_list))
  (setq i_list(subst new_rlist bb i_list))
  (cond
   ((= 0 (cdr(assoc 50 i_list)))
    (setq newcx(- (cadr aa) va))
    (setq newcy(- (caddr aa) va))
    (setq n_list(subst newcx (cadr aa) aa))
    (setq n_list(subst newcy (caddr aa) n_list))
    (setq i_list(subst n_list aa i_list))
    (entmod i_list)
   );;;;;第一象限圆角
   ((= (/ pi 2) (cdr(assoc 50 i_list)))
    (setq newcx(+ (cadr aa) va))
    (setq newcy(- (caddr aa) va))
    (setq n_list(subst newcx (cadr aa) aa))
    (setq n_list(subst newcy (caddr aa) n_list))
    (setq i_list(subst n_list aa i_list))
    (entmod i_list)
   );;;;;第二象限圆角
  
   ((= pi (cdr(assoc 50 i_list)))
    (setq newcx(+ (cadr aa) va))
    (setq newcy(+ (caddr aa) va))
    (setq n_list(subst newcx (cadr aa) aa))
    (setq n_list(subst newcy (caddr aa) n_list))
    (setq i_list(subst n_list aa i_list))
    (entmod i_list)
   );;;;;第三象限圆角
   ((= (/ (* 3 pi) 2) (cdr(assoc 50 i_list)))
    (setq newcx(- (cadr aa) va))
    (setq newcy(+ (caddr aa) va))
    (setq n_list(subst newcx (cadr aa) aa))
    (setq n_list(subst newcy (caddr aa) n_list))
    (setq i_list(subst n_list aa i_list))
    (entmod i_list)
   );;;;;第四象限圆角
))
  
((= (cdr(assoc 0 i_list)) "LINE")
  (setq s10(assoc 10 i_list))
  (setq s11(assoc 11 i_list))
  (setq a10(cadr s10))
  (setq a11(cadr s11))
  (setq t10(caddr s10))
  (setq t11(caddr s11))
  (cond
      ((> t10 t11)  
      (setq td10(subst (- t10 (abs va)) t10 s10))
      (setq i_list(subst td10 s10 i_list))
      (setq td11(subst (+ t11 (abs va)) t11 s11))
      (setq i_list(subst td11 s11 i_list))
      (entmod i_list))
      ((< t10 t11)
      (setq td10(subst (+ t10 (abs va)) t10 s10))
      (setq i_list(subst td10 s10 i_list))
      (setq td11(subst (- t11 (abs va)) t11 s11))
      (setq i_list(subst td11 s11 i_list))
      (entmod i_list))
      ((> a10 a11)  
      (setq ad10(subst (- a10 (abs va)) a10 s10))
      (setq i_list(subst ad10 s10 i_list))
      (setq ad11(subst (+ a11 (abs va)) a11 s11))
      (setq i_list(subst ad11 s11 i_list))
      (entmod i_list))
      ((< a10 a11)  
      (setq ad10(subst (+ a10 (abs va)) a10 s10))
      (setq i_list(subst ad10 s10 i_list))
      (setq ad11(subst (- a11 (abs va)) a11 s11))
      (setq i_list(subst ad11 s11 i_list))
      (entmod i_list))
  );修剪直线
)
)
(setq i(1+ i))
)
(print "批量修改成功!")
)


本帖子中包含更多资源

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

x
发表于 2019-11-4 14:56:44 | 显示全部楼层
本帖最后由 ketxu 于 2019-11-4 14:57 编辑

I changed it to not depend on Express function

  1. (defun c:fps (/  ss pts i ee :ST:SS-Boundingbox :ST:SS->List :ST:SS->ListVla LM:ssget os ov)
  2. (setq
  3.         os '(PeditAccept cmdecho)
  4.         ov (mapcar 'getvar os)
  5. )
  6. (mapcar 'setvar os '(1 0))
  7. (defun LM:ssget ( msg arg / sel )
  8.     (princ msg)
  9.     (setvar 'nomutt 1)
  10.     (setq sel (vl-catch-all-apply 'ssget arg))
  11.     (setvar 'nomutt 0)
  12.     (if (not (vl-catch-all-error-p sel)) sel)
  13. )
  14. ;Return list ename from ssget
  15. (defun :ST:SS->List(ss / n e l)
  16.   (setq n (sslength ss))
  17.   (while (setq e (ssname ss (setq n (1- n))))
  18.     (setq l (cons e l))
  19.   )  
  20. )
  21. ;Return list vla Object from s
  22. (defun :ST:SS->ListVla(s)(mapcar 'vlax-ename->vla-object (:ST:SS->List s)))
  23. (defun :ST:SS-Boundingbox ( lst / llp ls1 ls2 urp )
  24.     (foreach obj lst
  25.         (vla-getboundingbox obj 'llp 'urp)
  26.         (setq ls1 (cons (vlax-safearray->list llp) ls1)
  27.               ls2 (cons (vlax-safearray->list urp) ls2)
  28.         )
  29.     )
  30.     (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list ls1 ls2))
  31. )
  32.            (or  *newrad* (setq *newrad* 1))        
  33.    (setq *newrad* (getdist (strcat "\nB\U+00E1n k\U+00EDnh fillet <" (rtos *newrad*) "> :")))
  34.    (setvar "FilletRad" *newrad*)
  35.    ;(setq ss (ssget '(( 0 . "LINE,ARC,LWPOLYLINE"))))
  36.    (setq ss (LM:ssget "Select Line, Arc, Pline to fillet :" (list '(( 0 . "LINE,ARC,LWPOLYLINE")))))

  37.    (setq pts (:ST:SS-Boundingbox (:ST:SS->ListVla ss )))     ; ET func
  38.    
  39.    (command "edit" "M" ss "" "J" "" "")
  40.    (setq ss (ssget "C" (car pts) (cadr pts) '(( 0 . "LWPOLYLINE")))
  41.           i  0
  42.    )
  43.    
  44.    (while (setq ee (ssname ss i))
  45.      (command "Fillet" "" ee)
  46.      (setq i (1+ i))
  47.    )
  48.    (mapcar 'setvar os ov)
  49.    (princ)
  50. )

本帖子中包含更多资源

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

x
回复 支持 2 反对 0

使用道具 举报

发表于 2022-10-17 17:53:27 | 显示全部楼层
ketxu 发表于 2019-11-4 14:56
I changed it to not depend on Express function

这个可以 就是英文的Bán kính fillet <10.0000> :  Select Line, Arc, Pline to fillet :
发表于 2012-5-18 00:45:29 | 显示全部楼层
人家解释,我想,这世界上又要多我这一个疯子了
发表于 2012-5-18 10:55:55 | 显示全部楼层

  1. (defun c:ffr (/ newrad ss pts i ee)
  2.    (setq newrad (getreal "\n请输入新的半径:"))
  3.    (setvar "FilletRad" newrad)
  4.    (setq ss (ssget '(( 0 . "LINE,ARC,LWPOLYLINE"))))

  5.    (setq pts (acet-geom-ss-extents ss nil))     ; ET func
  6.    (SetVar "PeditAccept" 1)
  7.    (command "Pedit" "M" ss "" "J" "" "")
  8.    (setq ss (ssget "C" (car pts) (cadr pts) '(( 0 . "LWPOLYLINE")))
  9.           i  0
  10.    )
  11.    
  12.    (while (setq ee (ssname ss i))
  13.      (command "Fillet" "P" ee)
  14.      (setq i (1+ i))
  15.    )
  16. )

点评

程序里面的倒角没有增加记忆功能,有些瑕疵  发表于 2012-12-20 22:58

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 很给力!但是不能倒成0度角

查看全部评分

发表于 2012-5-18 18:45:56 来自手机 | 显示全部楼层
做个记号:-)
 楼主| 发表于 2012-5-18 20:59:34 | 显示全部楼层
Andyhon 发表于 2012-5-18 10:55

运行老出现:错误: no function definition: ACET-GEOM-SS-EXTENTS
不知是什么问题?
发表于 2012-5-18 21:30:44 | 显示全部楼层
 楼主| 发表于 2012-5-21 09:26:00 | 显示全部楼层
Andyhon 发表于 2012-5-18 10:55

长老,您的源码没有效果阿。还有 (setq pts (acet-geom-ss-extents ss nil))     ; ET func
这句是什么意思阿。
发表于 2012-5-21 10:41:36 | 显示全部楼层
http://bbs.mjtd.com/thread-20113-1-1.html
您得学会搜寻喂
acet-geom-ss-extents 得安装 Express Tools
站内有替代方案...
发表于 2012-5-30 09:57:21 | 显示全部楼层
不错,用力效果很好啊
发表于 2012-6-1 11:00:32 | 显示全部楼层
我也正需要顶一个!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 04:30 , Processed in 0.176845 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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