乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 123|回复: 9

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

[复制链接]

8

主题

16

帖子

4

银币

初来乍到

Rank: 1

铜币
48
发表于 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) &quotOLYLINE")
         (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”画的线型里,在命令行会出现"面积计算中忽略多段线的宽度。"
     各位高手帮帮忙哦,急用>>>
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-11-1 09:40:00 | 显示全部楼层
好象不用這樣長的吧. 我試試看看.
回复

使用道具 举报

8

主题

16

帖子

4

银币

初来乍到

Rank: 1

铜币
48
发表于 2003-11-1 09:47:00 | 显示全部楼层
昨天刚刚写玩的,还没整理过的,还望楼上的这位大哥多多帮忙、仔细看看哦
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-11-1 09:58:00 | 显示全部楼层
TO BDY,用纯AUTOLISP这样已经很难再精简了吧。。
to merak,你的程序基本上没有问题,主要是判断字符串时是分大小写的,从DXF组码中取出的对象类型字符串一般都是大写的,所以你将那些ARC、SPLINE、等等都改成大写即可,或用STRCASE改变一下大小写问题
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 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執行求選集的總長.....")
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-11-1 10:38:00 | 显示全部楼层
好!
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-11-1 10:39:00 | 显示全部楼层
呵呵. 學你的. 多多動腦筋.
回复

使用道具 举报

36

主题

201

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
345
发表于 2003-11-1 11:08:00 | 显示全部楼层
BDYCAD写得很好,很巧妙!
回复

使用道具 举报

7

主题

55

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2003-11-8 10:43:00 | 显示全部楼层
想要求多段线的长度,看了该贴,感受是:没白看!
因为查了AUTOCAD 2004的帮助,发现帮不了什么忙!
关于LENGTHEN,帮助说:“修改对象的长度和圆弧的包含角”
关于PERIMETER,帮助说:"存储由 AREA、 DBLIST 或 LIST 命令计算的最后一个周长值。"其中没提到LENGTHEN!
所以谢谢BDYCAD。顺便问一句,BDYCAD,你怎么不用简体汉字?你是哪一国的?嘻嘻!
回复

使用道具 举报

63

主题

1203

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1455
发表于 2003-11-8 11:41:00 | 显示全部楼层
TO EPISOED:
   我的操做系統是繁體的. 所以.....
   你用程序轉成簡體就好了. 呵呵.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 20:54 , Processed in 1.096667 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表