找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 976|回复: 4

[编程申请]:求大侠优化面积计算程序

[复制链接]
发表于 2008-12-13 18:04:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
我有一个按填充图案名称分别计算各图案名填充面积的程序,也是在一个社区编程申请中求来的,非常感谢那位大侠。
但在实际应用中还有一些小问题,有些填充图案本身没有面积,如果框选到这个图案,就会出现“命令: cs
选择对象: 指定对角点: 找到 228 个
选择对象:
建模操作错误:
     操作失败。
Automation 错误。 输入无效”
的问题,
且该程序可计算的图案计算完之后以虚线表示,不能计算的话就全部没动静,如果填充图案太多的话就找不到那些图案是没有面积的。
请求那位大侠能优化一下这个程序,增加自动过滤掉这些计算不了的图案,只计算可以计算的图案面积,计算完后可以删除掉可以计算的图案(把要计算的填充拷一份出来就可以了),这样可以看到那些不能计算的地方,再用pl线去求那些没有面积的图案
且每个单独的填充图案区域能不能文字标出每个图案面积
以下是那为大侠的编码
(defun c:cs(/ YH_AREA YH_ENT YH_HACOUNT YH_HAREA YH_HNAME YH_INDEX YH_OBJ YH_SLT)
   (vl-load-com)
   (setq YH_slt (ssget '((0 . "HATCH"))))
   (if YH_slt
     (progn
       (setq YH_area '()
      YH_index 0
      )
       (repeat (sslength YH_slt)
  (setq YH_ent (ssname YH_slt YH_index)
        YH_obj (vlax-ename->vla-object YH_ent)
        YH_hname (vla-get-PatternName YH_obj)
        YH_harea (/ (vla-get-area YH_obj) 1000000)
        YH_hacount (assoc YH_hname YH_area)
        )
  (if YH_hacount
    (setq YH_area (subst (cons YH_hname (+ (cdr YH_hacount) YH_harea)) YH_hacount YH_area))
    (setq YH_area (append YH_area (list (cons YH_hname YH_harea))))
    )
  (redraw YH_ent 3)
  (setq YH_index (1+ YH_index))
  )
       (princ (append YH_area (list (cons "总面积" (apply '+ (mapcar 'cdr YH_area))))))
       )
     )
   (princ)
   )


那为大侠有时间优化一下,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2008-12-14 15:51:42 | 显示全部楼层
可以用 vl-catch-all-apply , 但是
(vl-catch-all-apply 'vla-get-area (list hatchobj)) 用在程序内部还是会出现错误信息(auotcad2007)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-15 23:15:57 | 显示全部楼层
怎么加
我主要是用来计算如很复杂的植物地被面积,现在有了这个程序不同的地被用不同的图案,既然计算各地被面积,有又能计算绿化总面积。很方便
相信各位也能用的上把
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2008-12-16 10:12:31 | 显示全部楼层

  1. (vl-load-com)
  2. (defun c:cs (/ thisdrawing modelspace cset hname area ll na)
  3.   (setq        thisdrawing (vla-get-activedocument (vlax-get-acad-object))
  4.         modelspace  (vla-get-modelspace thisdrawing)
  5.   )
  6.   (if (not (vl-catch-all-error-p
  7.              (setq cset
  8.                     (vl-catch-all-apply
  9.                       'vla-item
  10.                       (list
  11.                         (vla-get-selectionsets
  12.                           thisdrawing
  13.                         )
  14.                         "CURRENT"
  15.                       )
  16.                     )
  17.              )
  18.            )
  19.       )
  20.     (vla-delete cset)
  21.   )
  22.   (if (ssget '((0 . "hatch")))
  23.     (progn
  24.       (vlax-for        obj (vla-get-activeselectionset thisdrawing)
  25.         (setq hname (vla-get-patternname obj)
  26.               area  (vl-catch-all-apply 'vla-get-area (list obj))
  27.         )
  28.         (if (= (type area) 'REAL)
  29.           (if ll
  30.             (if        (setq na (assoc hname ll))
  31.               (setq ll (subst (list hname (+ area (cadr na))) na ll))
  32.               (setq ll (cons (list hname area) ll))
  33.             )
  34.             (setq ll (cons (list hname area) ll))
  35.           )
  36.           (progn
  37.             (vla-put-color obj acred)
  38.             (vla-highlight obj actrue)
  39.           )
  40.         )
  41.       )
  42.     )
  43.   )
  44.   (princ ll)
  45.   (princ)
  46. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-16 11:55:55 | 显示全部楼层
谢谢你。
你们写的好像不一样哦
现在这个调整可以过滤不能计算的图案,但是那个最重要的调整能不能帮我加上去,就是计算完后删除掉可以计算的图案(把要计算的填充拷一份出来就可以了),如果一个平面有几百个填充,不把可以计算的图案删除掉只过滤的话,计算完后几百个图案还在那,就找不出那些可以计算,那些不能计算。另外能不能把单位调整回米做单位,一般大家还是用cad默认值画图,很少改他单位
09年4月现在我才发现你把计算不了的图案过滤变成了红色,你牛,藏的这么深,呵呵。和我想要的效果也差不多,谢谢,谢谢。我还以为没变化呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-20 19:31 , Processed in 0.184246 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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