明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 275|回复: 10

[基础] 圆弧改圆,删除重复圆

  [复制链接]
发表于 前天 22:00 | 显示全部楼层 |阅读模式

(defun c:TT (/ ss i ent entData center radius existingCircles isDuplicate)
  ;; 提示用户选择圆弧
  (prompt "\n选择要转换为圆的圆弧: ")
  (setq ss (ssget '((0 . "ARC")))) ;; 只选择圆弧对象

  ;; 检查是否有选中的对象
  (if ss
    (progn
      ;; 初始化一个列表,用于存储已创建的圆的圆心和半径
      (setq existingCircles '())

      ;; 遍历选中的每一个圆弧
      (setq i 0)
      (while (< i (sslength ss))
        (setq ent (ssname ss i)) ;; 获取当前圆弧的图元名
        (setq entData (entget ent)) ;; 获取圆弧的图元数据
        (setq center (cdr (assoc 10 entData))) ;; 获取圆弧的中心点
        (setq radius (cdr (assoc 40 entData))) ;; 获取圆弧的半径

        ;; 检查是否已经存在相同的圆
        (setq isDuplicate nil)
        (foreach circle existingCircles
          (if (and (equal center (car circle) 1e-6) ;; 比较圆心
                   (equal radius (cadr circle) 1e-6)) ;; 比较半径
            (setq isDuplicate t)
          )
        )

        ;; 如果没有重复,则创建新的圆并记录
        (if (not isDuplicate)
          (progn
            (entmake
              (list
                '(0 . "CIRCLE") ;; 图元类型为圆
                (cons 10 center) ;; 圆心
                (cons 40 radius) ;; 半径
              )
            )
            ;; 将新圆的圆心和半径添加到列表中
            (setq existingCircles (cons (list center radius) existingCircles))
          )
        )

        ;; 删除旧的圆弧
        (entdel ent)

        ;; 移动到下一个圆弧
        (setq i (1+ i))
      )
      (prompt "\n已完成圆弧到圆的转换,并删除了重复的圆。")
    )
    (prompt "\n未选择任何圆弧。")
  )
  (princ) ;; 静默退出
)


点评

DS写的?  发表于 昨天 16:08

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
GEGEYANG88 + 1 + 5 赞一个!

查看全部评分

回复

使用道具 举报

发表于 昨天 09:48 | 显示全部楼层
不能运行不能运行
回复 支持 反对

使用道具 举报

发表于 昨天 11:42 | 显示全部楼层
(setq ss (ssget '((0 . "CIRCLE,ARC")))) ;; 选择圆和圆弧对象
;;这样就爽了
回复 支持 反对

使用道具 举报

发表于 昨天 11:48 | 显示全部楼层
2024用了没有问题
回复 支持 反对

使用道具 举报

发表于 昨天 16:09 | 显示全部楼层
  1. (defun c:tt ()
  2.   "圆弧改圆并删除重复圆"
  3.   (prompt "\n选择要转换为圆的圆弧: ")
  4.   (if (setq ss (ssget '((0 . "ARC"))))
  5.     (progn
  6.       (setq lst '()
  7.             i   0
  8.       )
  9.       (while (< i (sslength ss))
  10.         (setq en (entget (ssname ss i))
  11.               p0 (cdr (assoc 10 en))
  12.               rr (cdr (assoc 40 en))
  13.         )
  14.         (if (not (member (setq a (list p0 rr)) lst))
  15.           (setq c1  (entmake (list '(0 . "CIRCLE") (cons 10 p0) (cons 40 rr)))
  16.                 lst (cons a lst)
  17.           )
  18.         )
  19.         (setq i (1+ i))
  20.       )
  21.       (command "erase" ss "")
  22.     )
  23.   )
  24.   (princ)
  25. )
回复 支持 反对

使用道具 举报

发表于 昨天 16:23 | 显示全部楼层
(setq ss (ssget '((0 . "CIRCLE,ARC")))) ;; 选择圆和圆弧对象
;;这样就爽了

本帖子中包含更多资源

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

x

点评

当圆弧上有一个圆的时候,处理以后产生重叠的圆,不符合"并删除重复圆“的逻辑功能。  发表于 昨天 16:49
为啥要选圆?  发表于 昨天 16:34
回复 支持 反对

使用道具 举报

发表于 昨天 16:56 | 显示全部楼层
(setq ss (ssget '((0 . "CIRCLE,ARC")))) ;; 选择圆和圆弧对象,可以严格保证”圆弧改圆,删除重复圆“逻辑
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-3 18:50 , Processed in 0.144441 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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