明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3811|回复: 11

自己编的求长度的程序,不过有问题,帮忙看看哦!!!

  [复制链接]
发表于 2003-11-1 09:29:00 | 显示全部楼层 |阅读模式
;;;    *****************************
;;;    *     求选择集长度之和     *
;;;    *****************************
(defun C:test( / dst ss )
  (setvar "cmdecho" 0)
  (princ "请选择:直线、弧、园或多义线等实体\n" )

  (setq ss (ssget) )
  (setq dst (get_ents_len ss ) )
  (princ
        (strcat        "\n 所选实体的长度之和为:" (rtos dst 2 8 ) "  " )
  )
  (princ)
)

(defun get_ents_len ( ss / attr elength dst cnt rdst )
; 求选择集里的实体长度之和。
; 选择集只能由直线、弧、园和多义线组成
  (setq        dst 0 cnt 0 rdst 0  )
  (defun attr (ent indx) (cdr (assoc indx ent)))
  (defun elength (ent / sa ea)
    (cond
      (  (= (attr ent 0) "LINE")
         (distance (attr ent 10) (attr ent 11))
      )
      (  (= (attr ent 0) "ARC")
         (setq sa (attr ent 50) ea (attr ent 51) )
         (* (if (> ea sa) (- ea sa) (+ (- ea sa) (* 2 pi)) )
            (attr ent 40)
         )
      )
      (  (= (attr ent 0) "CIRCLE")
         (* 2 pi (attr ent 40))
      )
      (  (= (attr ent 0) "OLYLINE")
         (command "area" "e" (attr ent -1 ) )
         (getvar "perimeter")
      )
      (  (= (attr ent 0) "LWPOLYLINE")
         (command "area" "e" (attr ent -1 ) )
         (getvar "perimeter")
      )
      (  (= (attr ent 0) "SPLINE")
         (command "area" "e" (attr ent -1 ) )
         (getvar "perimeter")
      )
    )
  )
  (repeat (sslength ss)
          (setq dst (+ dst (elength (entget (ssname ss cnt))))
                cnt (+ cnt  1 )
          )
  )
  
  (setq rdst dst )
)

此程序的问题是:
  当选择中有用“PLINE”画的线型里,在命令行会出现"面积计算中忽略多段线的宽度。"
     各位高手帮帮忙哦,急用>>>
发表于 2003-11-1 09:40:00 | 显示全部楼层
好象不用這樣長的吧. 我試試看看.
 楼主| 发表于 2003-11-1 09:47:00 | 显示全部楼层
昨天刚刚写玩的,还没整理过的,还望楼上的这位大哥多多帮忙、仔细看看哦
发表于 2003-11-1 09:58:00 | 显示全部楼层
TO BDY,用纯AUTOLISP这样已经很难再精简了吧。。
to merak,你的程序基本上没有问题,主要是判断字符串时是分大小写的,从DXF组码中取出的对象类型字符串一般都是大写的,所以你将那些ARC、SPLINE、等等都改成大写即可,或用STRCASE改变一下大小写问题
发表于 2003-11-1 10:26:00 | 显示全部楼层
to 樓主. 我的這個怎麼樣?
to meflying. 我寫出來是這樣的. 呵呵.


這樣做很快就能把你所選到的圖元的長度總和加起來了. 請MEFLYING兄多多指教才好.

;;;  program make china
;;  by  BDYCAD
;; DATA:  2003-11-01
(DEFUN C:TEST (/ SS SS_L N LENN LEN)
  (setq ss (ssget))
  (setq ss_l (sslength ss))
  (setq n 0)
  (setq lenn 0)
  (repeat ss_l
    (command "lengthen" (ssname ss n) "")
    (setq len (getvar "perimeter"))
    (setq lenn (+ len lenn))
    (setq n (1+ n)))
  (princ "\n你所選到的圖元的總長是")
  (princ lenn)
  (Princ "(mm)....")
  (princ))
(PRIC "\n輸入test執行求選集的總長.....")
发表于 2003-11-1 10:38:00 | 显示全部楼层
好!
发表于 2003-11-1 10:39:00 | 显示全部楼层
呵呵. 學你的. 多多動腦筋.
发表于 2003-11-1 11:08:00 | 显示全部楼层
BDYCAD写得很好,很巧妙!
发表于 2003-11-8 10:43:00 | 显示全部楼层
想要求多段线的长度,看了该贴,感受是:没白看!
因为查了AUTOCAD 2004的帮助,发现帮不了什么忙!
关于LENGTHEN,帮助说:“修改对象的长度和圆弧的包含角”
关于PERIMETER,帮助说:"存储由 AREA、 DBLIST 或 LIST 命令计算的最后一个周长值。"其中没提到LENGTHEN!
所以谢谢BDYCAD。顺便问一句,BDYCAD,你怎么不用简体汉字?你是哪一国的?嘻嘻!
发表于 2003-11-8 11:41:00 | 显示全部楼层
TO EPISOED:
   我的操做系統是繁體的. 所以.....
   你用程序轉成簡體就好了. 呵呵.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 01:21 , Processed in 0.172577 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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