如何计算多个物体的周长总和
如何利用LISP来统计选取物体的总周长,请大侠们帮助! 先将所选的对像按类型分开分别求出周长再相加。 visit Site: <A href="http://www.menziengineering.ch/Downloads/Download.htm#19" target="_blank" >http://www.menziengineering.ch/Downloads/Download.htm#19</A><BR>and search 'VxGetObjLength' 分别提取图元的长度属性(如Arc为arclength;line,polyline,lightweightpolyline为length; cirlce为Circumference等等),然后相加! <P>明总那里有一个LSP,很造合你</P><P>(defun c:abk ()<BR>(setvar "cmdecho" 0)<BR>(command "layer" "S" "0" "")<BR>(setq p (/ pi 2.0)<BR> g (+ pi p))<BR> (setq aa (ssget))<BR> (setq i 0)<BR> (setq ab (ssadd))<BR> (repeat (sslength aa)<BR> (setq aab (ssname aa i))<BR> (setq bb (cdr (assoc 0 (entget aab))))<BR> (cond ((= bb "LINE")<BR> (setq pd (list aab (cdr (assoc 10 (entget aab)))))<BR> ))<BR> (cond ((= bb "CIRCLE")<BR> (setq pd (list aab (cdr (assoc 10 (entget aab)))))<BR> ))<BR> (cond ((= bb "ARC")<BR> (setq pd (list aab (cdr (assoc 10 (entget aab)))))<BR> )) <BR>(cond ((= i 0)<BR>(setq j 0)<BR>(cond ((= j 0)<BR>(cond ((/= bb "LINE")<BR>(setq aad 0)))<BR>(cond ((/= bb "CIRCLE")<BR>(setq bad 0)))<BR>(cond ((/= bb "ARC")<BR>(setq cad 0)))))))<BR>(setq j (+ j 1))<BR>(cond ((= bb "LINE")<BR>(setq st (cdr (assoc 11 (entget aab))))<BR>(setq qed (cdr (assoc 10 (entget aab))))<BR>(setq ad (distance st qed))<BR>(cond ((= i 0)<BR>(setq aad ad)))<BR>(cond ((>= i 1)<BR>(setq aad (+ ad aad))))<BR>)) <BR>(cond ((= bb "CIRCLE")<BR> (setq aeed (cdr (assoc 40 (entget aab))))<BR> (setq ad (* aeed pi 2.0))<BR>(cond ((= i 0)<BR>(setq bad ad)))<BR>(cond ((>= i 1)<BR>(setq bad (+ ad bad))))<BR>))<BR>(cond ((= bb "ARC")<BR> (setq ast (cdr (assoc 50 (entget aab))))<BR> (setq sst (cdr (assoc 51 (entget aab))))<BR> (setq beed (cdr (assoc 40 (entget aab))))<BR>(cond ((>= ast 0)<BR>(cond ((< ast p)<BR>(cond ((> ast sst)<BR>(cond ((>= (* pi 2.0))<BR>(setq xb (- ast sst))))<BR>(cond ((> sst 0)<BR>(setq xb1 (- p ast))<BR>(setq xb (+ g xb1 sst))))))<BR>(cond ((< ast sst)<BR>(cond ((>= sst 0)<BR>(setq xb1 (- p ast))<BR>(setq xb (+ pi xb1 sst))))<BR>(cond ((< sst (* pi 2.0))<BR>(cond ((< sst p)<BR>(setq xb (- sst ast))))<BR>(cond ((< sst pi)<BR>(setq xb1 (- p ast))<BR>(setq xb2 (- sst p))<BR>(setq xb (+ xb1 xb2))))<BR>(cond ((< sst g)<BR>(setq xb1 (- p ast))<BR>(setq xb2 (- sst pi))<BR>(setq xb (+ xb1 xb2 p))))<BR>(cond ((< sst (* pi 2.0))<BR>(setq xb1 (- p ast))<BR>(setq xb2 (- sst g))<BR>(setq xb (+ xb1 xb2 pi))))<BR>))<BR>))<BR>))))<BR>(cond ((>= ast p)<BR>(cond ((< ast pi)<BR>(cond ((> ast sst)<BR>(cond ((<= sst p)<BR>(setq xb1 (- ast p))<BR>(setq xb2 (- p sst))<BR>(setq xb (- (* pi 2.0)xb1 xb2))))<BR>(cond ((> sst p)<BR>(setq xb (- (* pi 2.0)(- ast sst)))))))<BR>(cond ((< ast sst)<BR>(setq xb (- sst ast))))<BR>))))</P>
<P><BR>(cond ((>= ast pi)<BR>(cond ((< ast g)<BR>(cond ((> ast sst)<BR>(cond ((> sst 0)<BR>(setq xb2 sst)<BR>(setq xb1 (- g ast))<BR>(setq xb (+ xb1 xb2 p))))<BR>(cond ((>= sst p)<BR>(setq xb1 (- ast pi))<BR>(setq xb2 (- pi sst))<BR>(setq xb (- (* pi 2.0) xb1 xb2))))<BR>(cond ((>= sst pi)<BR>(setq xb1 (- g ast))<BR>(setq xb2 (- sst pi))<BR>(setq xb (+ g xb1 xb2))))<BR>(cond ((> sst g)<BR>(setq xb1 (- sst pi))<BR>(setq xb2 (- g ast))<BR>(setq xb (+ xb1 xb2 g))))<BR>))<BR>(cond ((< ast sst)<BR>(setq xb (- sst ast))))<BR>))))<BR>(cond ((>= ast g)<BR>(cond ((< ast (* pi 2.0))<BR>(cond ((> ast sst)<BR>(cond ((>= sst g)<BR>(setq xb1 sst)<BR>(setq xb2 (- (* pi 2.0)ast))<BR>(setq xb (+ xb1 xb2))))<BR>(cond ((< sst g)<BR>(setq xb1 (- sst g))<BR>(setq xb2 (- (* pi 2.0)ast))<BR>(setq xb (+ g xb1 xb2))))<BR>))<BR>(cond ((< ast sst)<BR>(setq xb (- sst ast))))<BR>))))<BR>(setq ad (* beed xb))<BR>(cond ((= i 0)<BR>(setq cad ad)))<BR>(cond ((>= i 1)<BR>(setq cad (+ ad cad))))<BR>))<BR> (setq i (+ 1 i)))<BR>(setq aaad (+ aad bad cad))<BR>(setq ai aaad)<BR>(setq aai (rtos ai 2 4))<BR>(setq abi "<")<BR>(setq aci ">")<BR>(setq adi "线段总长为:")<BR>(princ (strcat adi abi aai aci))<BR>(command "pickbox" 3)<BR>(princ)<BR>)</P> 本帖最后由 作者 于 2008-2-13 17:59:22 编辑
命令名称gl 本帖最后由 作者 于 2008-2-13 18:02:07 编辑 <br /><br /> <p>只要你选择的物体有长度,就能计算,PLINE,ARC CIRCLE 椭圆,SPLINE可以一起选,</p><p>修改了好了,程序只选择有以上几种对象,如果选择了其它对象自动过滤掉)</p> <P>六楼的程序写得很简洁,也符合要求,支持!</P> (defun th-curveslength-ss (ss / ss ssv lens)
(if (= nil ss)
(setq ss (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
)
(setq ssv (vla-get-activeselectionset (vla-get-activedocument
(vlax-get-acad-object)
)
)
lens 0
)
(vlax-for obj ssv (setq lens (+ lens (vlax-curve-getdistatparam obj
(vlax-curve-getendparam obj)
)
)
)
)
) <p>请问大哥呀 这个GL程序放到哪个启动组呀?</p>
页:
[1]