明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: baoyizhu

[提问] 闭合的近似圆的多段线怎么转换成真圆?求程序批量转换

[复制链接]
 楼主| 发表于 2020-10-30 15:24 | 显示全部楼层
taoyi0727 发表于 2020-10-30 15:12
(defun c:tt (/ lst name obj pt r ss)
        (setq ss (ssget))
        (while (setq name (ssname ss 0))

高手出现了,不错不错,您的程序解决了我的问题,很完美。处理6万多个对象用了8秒种。速度也还算可以
回复

使用道具 举报

 楼主| 发表于 2020-10-30 15:24 | 显示全部楼层
wzg356 发表于 2020-10-30 15:09
;(pl2c (car(entsel)))
(defun pl2c (en / p1 p2 p0 d)
(vla-getboundingbox (vlax-ename->vla-object en ...

您这个程序我不会用,不知道命令是什么
回复

使用道具 举报

 楼主| 发表于 2020-10-30 15:26 | 显示全部楼层
不知道还有没有更好的处理更快速的程序,一周之后如果没有的话,就采纳9楼的大哥为最佳答案了
回复

使用道具 举报

发表于 2020-10-30 15:50 | 显示全部楼层
本帖最后由 wzg356 于 2020-10-30 15:56 编辑
baoyizhu 发表于 2020-10-30 15:24
您这个程序我不会用,不知道命令是什么

与楼下一样,我写的处理单个样例
批处理
(defun c:pl2c( / ss en p1 p2 p0 d)
        (setq ss (ssget))
        (while (setq en(ssname ss 0))
                (vla-getboundingbox (vlax-ename->vla-object en) 'p1 'p2)
                (setq p1(vlax-safearray->list p1))
                (setq p2(vlax-safearray->list p2))
                (setq p0(mapcar '(lambda (x y)(/ (+ x y) 2.0)) p1 p2))
                (setq d (min(abs(apply '- (mapcar 'car (list p1 p2) )))(abs(apply '- (mapcar 'cadr (list p1 p2) )))))
                (command "CIRCLE" p0 (* d 0.5))
               (ssdel en ss) (entdel en)               
        )
)
回复

使用道具 举报

 楼主| 发表于 2020-10-30 15:54 | 显示全部楼层
wzg356 发表于 2020-10-30 15:50
与楼下一样,我写的处理单个样例
批处理
(defun c:pl2c( / ss en p1 p2 p0 d)

执行程序出现了问题,
错误: no function definition: EN
回复

使用道具 举报

发表于 2020-10-30 15:57 | 显示全部楼层
baoyizhu 发表于 2020-10-30 15:54
执行程序出现了问题,
错误: no function definition: EN

   .........,(setq en(ssname ss 0))
回复

使用道具 举报

发表于 2020-10-30 22:03 | 显示全部楼层
本帖最后由 xyp1964 于 2020-10-30 22:21 编辑

  1. (defun c:tt () ; tt(近似多段线圆转圆)  (if (setq ss (ssget '((0 . "*polyLINE"))))
  2.     (progn
  3.       (setq i  -1  ss1(ssadd))
  4.       (while (setq s1 (ssname ss (setq i (1+ i))))
  5.         (if (> (xyp-DXF 90 s1) 100)
  6.           (setq p0  (xyp-9pt s1 5)
  7.                 p1  (xyp-9pt s1 4)
  8.                 s2  (command "Circle" "non" p0 "non" p1)
  9.                 ss1 (ssadd s1 ss1)
  10.           )
  11.         )
  12.       )
  13.       (command "Erase" ss1 "")
  14.     )
  15.   )
  16.   (princ)
  17. )
回复

使用道具 举报

发表于 2020-10-31 01:02 | 显示全部楼层

院长你那个s2变量是啥操作啊,不是为了偷懒吧
回复

使用道具 举报

发表于 2020-10-31 10:36 | 显示全部楼层
start4444 发表于 2020-10-31 01:02
院长你那个s2变量是啥操作啊,不是为了偷懒吧

减少progn, 其他的setq写成一句,s2是为了符合setq的成双成对格式
回复

使用道具 举报

发表于 2020-10-31 12:35 | 显示全部楼层
估计这样有些失真。
个人的想法是。取得实体的10点位,取相对分散的3个点,3点计算圆心,半径
entmake 园。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-15 09:51 , Processed in 0.379342 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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