明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2722|回复: 9

如何计算多个物体的周长总和

[复制链接]
发表于 2006-11-20 22:37 | 显示全部楼层 |阅读模式
如何利用LISP来统计选取物体的总周长,请大侠们帮助!
发表于 2006-11-20 22:49 | 显示全部楼层
先将所选的对像按类型分开分别求出周长再相加。
发表于 2006-11-21 07:19 | 显示全部楼层
visit Site: http://www.menziengineering.ch/Downloads/Download.htm#19
and search 'VxGetObjLength'
发表于 2006-11-21 21:32 | 显示全部楼层
分别提取图元的长度属性(如Arc为arclength;  line,polyline,lightweightpolyline为length;   cirlce为Circumference等等),然后相加!
发表于 2006-11-23 11:09 | 显示全部楼层

明总那里有一个LSP,很造合你

(defun c:abk ()
(setvar "cmdecho" 0)
(command "layer" "S" "0" "")
(setq p  (/ pi 2.0)
      g (+ pi p))
   (setq aa (ssget))
  (setq i 0)
   (setq ab (ssadd))
   (repeat (sslength aa)
    (setq aab (ssname aa i))
     (setq bb (cdr (assoc 0 (entget aab))))
     (cond ((= bb "LINE")
           (setq pd (list aab (cdr (assoc 10 (entget aab)))))
     ))
     (cond ((= bb "CIRCLE")
           (setq pd (list aab (cdr (assoc 10 (entget aab)))))
     ))
     (cond ((= bb "ARC")
           (setq pd (list aab (cdr (assoc 10 (entget aab)))))
     ))   
(cond ((= i 0)
(setq j 0)
(cond ((= j 0)
(cond ((/= bb "LINE")
(setq aad 0)))
(cond ((/= bb "CIRCLE")
(setq bad 0)))
(cond ((/= bb "ARC")
(setq cad 0)))))))
(setq j (+ j 1))
(cond ((= bb "LINE")
(setq st (cdr (assoc 11 (entget aab))))
(setq qed (cdr (assoc 10 (entget aab))))
(setq ad (distance st qed))
(cond ((= i 0)
(setq aad ad)))
(cond ((>= i 1)
(setq aad (+ ad aad))))
))           
(cond ((= bb "CIRCLE")
  (setq aeed (cdr (assoc 40 (entget aab))))
  (setq ad (* aeed pi 2.0))
(cond ((= i 0)
(setq bad ad)))
(cond ((>= i 1)
(setq bad (+ ad bad))))
))
(cond ((= bb "ARC")
  (setq ast (cdr (assoc 50 (entget aab))))
  (setq sst (cdr (assoc 51 (entget aab))))
  (setq beed (cdr (assoc 40 (entget aab))))
(cond ((>= ast 0)
(cond ((< ast p)
(cond ((> ast sst)
(cond ((>= (* pi 2.0))
(setq xb (- ast sst))))
(cond ((> sst 0)
(setq xb1 (- p ast))
(setq xb (+ g xb1 sst))))))
(cond ((< ast sst)
(cond ((>= sst 0)
(setq xb1 (- p ast))
(setq xb (+ pi xb1 sst))))
(cond ((< sst (* pi 2.0))
(cond ((< sst p)
(setq xb (- sst ast))))
(cond ((< sst pi)
(setq xb1 (- p ast))
(setq xb2 (- sst p))
(setq xb (+ xb1 xb2))))
(cond ((< sst g)
(setq xb1 (- p ast))
(setq xb2 (- sst pi))
(setq xb (+ xb1 xb2 p))))
(cond ((< sst (* pi 2.0))
(setq xb1 (- p ast))
(setq xb2 (- sst g))
(setq xb (+ xb1 xb2 pi))))
))
))
))))
(cond ((>= ast p)
(cond ((< ast pi)
(cond ((> ast sst)
(cond ((<= sst p)
(setq xb1 (- ast p))
(setq xb2 (- p sst))
(setq xb (- (* pi 2.0)xb1 xb2))))
(cond ((> sst p)
(setq xb (- (* pi 2.0)(- ast sst)))))))
(cond ((< ast sst)
(setq xb (- sst ast))))
))))


(cond ((>= ast pi)
(cond ((< ast g)
(cond ((> ast sst)
(cond ((> sst 0)
(setq xb2 sst)
(setq xb1 (- g ast))
(setq xb (+ xb1 xb2 p))))
(cond ((>= sst p)
(setq xb1 (- ast pi))
(setq xb2 (- pi sst))
(setq xb (- (* pi 2.0) xb1 xb2))))
(cond ((>= sst pi)
(setq xb1 (- g ast))
(setq xb2 (- sst pi))
(setq xb (+ g xb1 xb2))))
(cond ((> sst g)
(setq xb1 (- sst pi))
(setq xb2 (- g ast))
(setq xb (+ xb1 xb2 g))))
))
(cond ((< ast sst)
(setq xb (- sst ast))))
))))
(cond ((>= ast g)
(cond ((< ast (* pi 2.0))
(cond ((> ast sst)
(cond ((>= sst g)
(setq xb1 sst)
(setq xb2 (- (* pi 2.0)ast))
(setq xb (+ xb1 xb2))))
(cond ((< sst g)
(setq xb1 (- sst g))
(setq xb2 (- (* pi 2.0)ast))
(setq xb (+ g xb1 xb2))))
))
(cond ((< ast sst)
(setq xb (- sst ast))))
))))
(setq ad (* beed xb))
(cond ((= i 0)
(setq cad ad)))
(cond ((>= i 1)
(setq cad (+ ad cad))))
))
  (setq i (+ 1 i)))
(setq aaad (+ aad bad cad))
(setq ai aaad)
(setq aai (rtos ai 2 4))
(setq abi "<")
(setq aci ">")
(setq adi "线段总长为:")
(princ (strcat adi abi aai aci))
(command "pickbox" 3)
(princ)
)

发表于 2006-11-23 13:02 | 显示全部楼层
本帖最后由 作者 于 2008-2-13 17:59:22 编辑

命令名称gl

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2006-11-23 13:05 | 显示全部楼层
本帖最后由 作者 于 2008-2-13 18:02:07 编辑

只要你选择的物体有长度,就能计算,PLINE,ARC CIRCLE 椭圆,SPLINE可以一起选,

修改了好了,程序只选择有以上几种对象,如果选择了其它对象自动过滤掉)

发表于 2006-11-23 21:11 | 显示全部楼层

六楼的程序写得很简洁,也符合要求,支持!

发表于 2006-12-3 20:00 | 显示全部楼层
  1. (defun th-curveslength-ss (ss / ss ssv lens)
  2.   (if (= nil ss)
  3.     (setq ss (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
  4.   )
  5.   (setq ssv (vla-get-activeselectionset (vla-get-activedocument
  6.         (vlax-get-acad-object)
  7.      )
  8.      )
  9. lens 0
  10.   )
  11.   (vlax-for obj ssv (setq lens (+ lens (vlax-curve-getdistatparam obj
  12.           (vlax-curve-getendparam obj)
  13.            )
  14.           )
  15.       )
  16.   )
  17. )
发表于 2007-8-6 20:08 | 显示全部楼层

请问大哥呀  这个GL程序放到哪个启动组呀?

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

本版积分规则

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

GMT+8, 2024-5-18 19:44 , Processed in 0.197075 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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