多段线到圆
也许我必须把这个贴在这里?http://www.cadtutor.net/forum/showthread.php?p=231922#post231922
有专家能帮我开发一个Lisp例程吗?
我认为要做到这一点并不容易。
/automicro公司 我们要假设多段线是圆形的吗?如果没有,您打算如何定位中心?你想要的其实很简单,确保多段线是闭合的,得到面积,做一些数学来找到一个相同面积的圆,使用多段线面积的质心,然后定位圆。 我一定很无聊。。。没有错误检查,没有广泛测试,速度有点慢
使用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)
)
我只是想大声说出来,哈哈,但谢谢你让它成为现实 很好的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))
李,你是怎么把代码用颜色编码的? 我编写了一个LISP来编写一个带有标记的文件 难以置信的好,这为我节省了很多工作。
感谢lpseifert和Lee Mac
但他发现许多多段线是双重存储的
有没有简单的方法来删除存储的双元素?
你们俩似乎都喜欢摩托车,真是巧合
我自己开宝马F800GS:) 也许杀伤力过大?
我建议使用Express Tools的OVERKILL,这比我能为您编写的任何东西都要好。
好看的自行车-有点高,但骑起来很平稳。
页:
[1]
2