明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: amook147

[讨论] 高手看看这个例子能否用lisp实现?

[复制链接]
发表于 2025-12-1 20:07:36 | 显示全部楼层
批量半径修改,不如重新生产这个图形的速度快。
回复 支持 反对

使用道具 举报

发表于 2025-12-1 21:32:33 | 显示全部楼层
;; fillet 功能


本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-12-2 08:58:33 | 显示全部楼层

院长  。。。这个能分享下吗。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-12-2 09:21:31 | 显示全部楼层
guosheyang 发表于 2025-12-1 18:58
测试了下 好像不排序也是可以实现

大佬  能分享下源码吗?  学习学习  自己试了好多天了 都不行  
回复 支持 反对

使用道具 举报

发表于 2025-12-2 14:15:31 | 显示全部楼层
amook147 发表于 2025-12-2 09:21
大佬  能分享下源码吗?  学习学习  自己试了好多天了 都不行

这个是就是一个fillet命令的应用而已; 首先搞懂两个圆弧间的圆角,圆角前先设置filletrad变量,比如(setvar "filletrad" 0.3)   然后再  (command "FILLET"  点1   点2) )     这个点1、点2  可以用 (list  图元名  点坐标) 的形式;图元名就是圆弧的图元名,点坐标, 我选择的是圆弧的中点坐标。这样就可以实现两个圆弧间的圆角      然后就是相同步骤的循环而已   

评分

参与人数 1明经币 +1 收起 理由
xyp1964 + 1 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-12-3 11:03:23 | 显示全部楼层
guosheyang 发表于 2025-12-2 14:15
这个是就是一个fillet命令的应用而已; 首先搞懂两个圆弧间的圆角,圆角前先设置filletrad变量,比如(set ...

感谢大佬指点,  弄了一个  不过有点小问题。。。圆角以后 旧的圆弧没有被删除 。。。怎么回事?

(defun c:ttt (/ *error* ss i ent obj p1 p2 rad old_rad)
   
  (defun *error* (msg)
    (if (and old_rad (not (equal old_rad (getvar "FILLETRAD"))))
      (setvar "FILLETRAD" old_rad)
    )
    (princ (strcat "\n错误: " msg))
  )
  
   
  (setq old_rad (getvar "FILLETRAD"))
  
   
  (initget 7)   
  (setq rad (getdist "\n请输入新的圆角半径: "))
  
   
  (setvar "FILLETRAD" rad)
  
   
  (princ "\n请框选要修改圆角的图形: ")
  (setq ss (ssget '((0 . "ARC"))))
  
  (if ss
    (progn
      
      (setq i 0)
      (repeat (sslength ss)
        (setq ent (ssname ss i))
        
         
        (setq obj (vlax-ename->vla-object ent))
        (setq p1 (vlax-curve-getPointAtParam obj
                  (/ (+ (vlax-curve-getStartParam obj)
                        (vlax-curve-getEndParam obj))
                     2.0)))
        
         
        (if (< (1+ i) (sslength ss))
          (progn
            (setq ent2 (ssname ss (1+ i)))
            (setq obj2 (vlax-ename->vla-object ent2))
            (setq p2 (vlax-curve-getPointAtParam obj2
                      (/ (+ (vlax-curve-getStartParam obj2)
                            (vlax-curve-getEndParam obj2))
                         2.0)))
            
            
            (command "_.FILLET" "_non" p1 "_non" p2)
          )
        )
        (setq i (1+ i))
      )
      
      
      (if (and (> (sslength ss) 1)
               (equal (vlax-curve-getStartPoint (vlax-ename->vla-object (ssname ss 0)))
                      (vlax-curve-getEndPoint (vlax-ename->vla-object (ssname ss (- (sslength ss) 1))))
                      1e-6))
        (progn
          (setq ent1 (ssname ss 0))
          (setq obj1 (vlax-ename->vla-object ent1))
          (setq p1 (vlax-curve-getPointAtParam obj1
                    (/ (+ (vlax-curve-getStartParam obj1)
                          (vlax-curve-getEndParam obj1))
                       2.0)))
         
          (setq ent2 (ssname ss (- (sslength ss) 1)))
          (setq obj2 (vlax-ename->vla-object ent2))
          (setq p2 (vlax-curve-getPointAtParam obj2
                    (/ (+ (vlax-curve-getStartParam obj2)
                          (vlax-curve-getEndParam obj2))
                       2.0)))
         
          (command "_.FILLET" "_non" p1 "_non" p2)
        )
      )
      
      (princ (strcat "\n已完成 " (itoa (sslength ss)) " 个圆弧的圆角修改"))
    )
    (princ "\n未选择到任何圆弧对象")
  )
  
   
  (setvar "FILLETRAD" old_rad)
  
  (princ)
)


(princ "\n圆弧圆角修改插件已加载,命令: TTT")
(princ)

回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-18 14:15 , Processed in 0.175304 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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