automicro 发表于 2022-7-6 14:42:34

多段线到圆

也许我必须把这个贴在这里?
 
http://www.cadtutor.net/forum/showthread.php?p=231922#post231922
 
有专家能帮我开发一个Lisp例程吗?
我认为要做到这一点并不容易。
 
/automicro公司

CmdrDuh 发表于 2022-7-6 14:46:41

我们要假设多段线是圆形的吗?如果没有,您打算如何定位中心?你想要的其实很简单,确保多段线是闭合的,得到面积,做一些数学来找到一个相同面积的圆,使用多段线面积的质心,然后定位圆。

lpseifert 发表于 2022-7-6 14:51:00

我一定很无聊。。。没有错误检查,没有广泛测试,速度有点慢
使用CmdrDuh的想法。。。

(defun c:test (/ ss1 num cnt ename obj rp ar rad)
(vl-load-com)
(setq ss1 (ssget '((0 . "*polyline")))
   num (sslength ss1)
   cnt 0)
(repeat num
   (setq ename (ssname ss1 cnt))
   (setq obj (vlax-ename->vla-object ename))
   (vlax-put-property obj 'Closed 1)
   (vl-cmdf "region" ename "")
   (setq obj (vlax-ename->vla-object (entlast)))
       (setq ar (vlax-get-property obj 'Area)
   rp (vlax-safearray->list (vlax-variant-value (vlax-get-property obj 'Centroid)))
   rad (sqrt (/ ar pi))
   )
   (entdel (entlast));remove this line if you want to keep original
   (vl-cmdf "circle" rp rad)
(setq cnt (1+ cnt))
)
(princ)
)      

CmdrDuh 发表于 2022-7-6 14:54:08

我只是想大声说出来,哈哈,但谢谢你让它成为现实

Lee Mac 发表于 2022-7-6 14:57:04

很好的Lisp程序的快速键入一个-不错的拉里。
 
我不想挑剔,但我只想做一些美学上的改变:
 

(defun c:test(/ ss obj rp ar rad)
(vl-load-com)
(if (setq ss (ssget (list (cons 0 "*POLYLINE")
                           (if (getvar "CTAB")
                           (cons 410 (getvar "CTAB"))
                           (cons 67 (- 1 (getvar "TILEMODE")))))))
   (foreach x (mapcar 'vlax-ename->vla-object
                (vl-remove-if 'listp
                  (mapcar 'cadr (ssnamex ss))))
   (vlax-put-property x 'Closed 1)
   (vl-cmdf "_region" (vlax-vla-object->ename x) "")
   (setq obj (vlax-ename->vla-object (entlast))
         ar(vlax-get-property obj 'Area)
         rp(vlax-safearray->list
               (vlax-variant-value
                   (vlax-get-property obj 'Centroid)))
         rad (sqrt (/ ar pi)))
   (vla-delete obj) ; -> Remove to Keep Original
   (vl-cmdf "_circle" rp rad))
   (princ "\n<!> Nothing Selected <!>"))
(princ))

CmdrDuh 发表于 2022-7-6 15:00:28

李,你是怎么把代码用颜色编码的?

Lee Mac 发表于 2022-7-6 15:01:58

我编写了一个LISP来编写一个带有标记的文件

automicro 发表于 2022-7-6 15:05:32

难以置信的好,这为我节省了很多工作。
感谢lpseifert和Lee Mac
 
但他发现许多多段线是双重存储的
有没有简单的方法来删除存储的双元素?
 
 
你们俩似乎都喜欢摩托车,真是巧合
我自己开宝马F800GS:)

fuccaro 发表于 2022-7-6 15:09:32

也许杀伤力过大?

Lee Mac 发表于 2022-7-6 15:12:49

 
我建议使用Express Tools的OVERKILL,这比我能为您编写的任何东西都要好。
 
 
 
好看的自行车-有点高,但骑起来很平稳。
页: [1] 2
查看完整版本: 多段线到圆