求助:如何批量将多段线(或直线)连成的圆形转换成圆
本帖最后由 junxan 于 2016-10-18 00:29 编辑本人不懂cad,向各位大师求助:
1、如何批量将多段线(或者直线)连接成的圆,转换成圆。圆的大小与原图基本相近,位置基本不变就行;
2、圆圈内的单个数字合并到一起,数字的角度(方向)不变;
3、自动删除这些多段线或直线。
;;碎线转圆,弧
(defun c:test (/ ss s1 ss2)
(vl-load-com)
(setvar "cmdecho" 0)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq ps (getvar "peditaccept"))
(setvar "peditaccept" 1)
(setq ss (ssget '((0 . "LINE"))))
(if ss
(progn
(setq s1 (entlast))
(setq ss2 (ssadd))
(command "pedit" "m" ss "" "j" "" "")
(while (setq s1 (entnext s1))
(ssadd s1 ss2)
)
(setq l (sslength ss2))
(setq i 0)
(repeat l
(setq ssn (ssname ss2 i))
(if (> (rem (cdr (assoc 70 (entget ssn))) 2) 0)
(progn
(command "_region" ssn "")
(setq en2 (entlast))
(setq obj2 (vlax-ename->vla-object en2))
(setq area (vla-get-Area obj2))
(setq ptc (vlax-safearray->list
(vlax-variant-value (vla-get-centroid obj2))
)
)
(setq radius (sqrt (/ area pi)))
(command "_circle" ptc radius)
(entdel en2)
)
(progn
(setq obj1 (vlax-ename->vla-object ssn))
(setq pts (vlax-curve-getstartpoint obj1))
(setq pte (vlax-curve-getendpoint obj1))
(setq dis (vlax-curve-getdistAtPoint obj1 pte))
(setq ptm (vlax-curve-getpointatdist obj1 (* dis 0.5)))
(command "_arc" pts ptm pte)
(entdel ssn)
)
)
(setq i (1+ i))
)
)
)
(setvar "peditaccept" ps)
(setvar "osmode" os)
(princ)
)
这个不容易。。。。。 求助求助,继续求助 junxan 发表于 2016-10-19 23:21
求助求助,继续求助
最简单方法ebox算出中心及半径...画圆就行了... 看样子是软件导出来的图..原图就是圆... 你可以直接创建边界啊 万分感谢Atsai,完美解决转圆的问题。
因不懂cad,更不懂编程,仅会使用些简单的Excel函数,惭愧。
论坛里找了些文字合并的代码,能做到批量把方框内的文字合并,不改变文字高度、方向,但字宽变小了(不影响我对图纸的使用)。但不能合并圆里的文字,希望哪位再帮忙写一个。 这个只能对直线起作用,为什么圆弧不能处理,能否帮忙改一下?
页:
[1]