明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 24804|回复: 147

提取大量闭合PL线的面积属性并写入图形中心(已解决)

  [复制链接]
发表于 2010-7-11 10:04 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2010-7-15 12:05:11 编辑

恳请斑竹大人帮忙撒

已知,在CAD特性面板中有面积属性,

需要程序提取大量闭合PL线的  面积属性,并置于该图形中心(形心,中心,重心,什么心都可以)

卖软件的免进~谢

发表于 2010-7-12 11:27 | 显示全部楼层
[code="lisp] (defun c:test (/ AREA_H AREA_WS ERRHAN NEWENTLAST OBJ OBJ_AREA OBJ_I OBJ_NAME OBJ_VLA OLDCMDECHO OLDDELOBJ OLDENTLAST PT)   (setq obj (ssget "x" '((0 . "*POLYLINE"))))   (if obj     (progn       (setq obj_i -1)       (setq oldcmdecho (getvar "cmdecho"))       (setq oldDELOBJ (getvar "DELOBJ"))       (setvar "cmdecho" 0);_禁止回显       (setvar "DELOBJ" 0);_控制创建面域保留原对象       (setq errhan '());_不能创建面域的图元句柄表       (setq area_ws 3);_面积的小数位数       (setq area_h 3);_面积文字的高度       (repeat (sslength obj) (setq obj_name (ssname obj (setq obj_i (1+ obj_i))));_图元名 (setq obj_vla (vlax-ename->vla-object obj_name));_Vla对象 (if (vlax-curve-isClosed obj_vla);_如果曲线闭合    (progn      (setq oldentlast (entlast))      (command "_region" obj_name "");_创建面域      (setq newentlast (entlast))      (if (equal oldentlast newentlast);_如果创建面域不成功        (progn   (setq errhan (cons (cdr (assoc 5 (entget obj_name))) errhan))   )        (progn   (setq obj_area (vla-get-Area obj_vla));_面积   (setq pt (vlax-safearray->list (vlax-variant-value (vla-get-centroid (vlax-ename->vla-object newentlast)))))   (command "-text" "j" "mc" pt area_h 0 (rtos obj_area 2 area_ws))   (entdel newentlast)   )        )      )    ) )       (if errhan (progn (princ "\n没有标注面积的图元句柄列表:\n") (princ errhan) ) )       (setvar "DELOBJ" oldDELOBJ)       (setvar "cmdecho" oldcmdecho)     )   )   (princ) )[/code]

点评

如何统计周长呢??  发表于 2014-4-29 14:35
 楼主| 发表于 2010-7-12 12:57 | 显示全部楼层

谢谢热心大侠,试加载了一下,出现如上错误,恳请大侠再度出手,小弟不胜感激~

本帖子中包含更多资源

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

x
发表于 2010-7-12 20:04 | 显示全部楼层

程序开头加一句:(vl-load-com)

 楼主| 发表于 2010-7-14 23:07 | 显示全部楼层
谢过版主大人,明天测试
 楼主| 发表于 2010-7-15 12:06 | 显示全部楼层
帅哥,在线噢!
gufeng,谢谢你,还有版主大人
发表于 2010-7-19 12:00 | 显示全部楼层

这个程序非常好i,若是能够先选择对象,然后仅仅标注已选择的对象的面积就好了

从而实现选择对象,然后自动标注面积

发表于 2010-7-22 11:45 | 显示全部楼层
xd-xdcad发表于2010-7-19 12:00:00这个程序非常好i,若是能够先选择对象,然后仅仅标注已选择的对象的面积就好了 从而实现选择对象,然后自动标注面积

把 (setq obj (ssget "x" '((0 . "*POLYLINE")))) 改为 (setq obj (ssget  '((0 . "*POLYLINE")))) 即可!

发表于 2010-7-25 08:38 | 显示全部楼层
本帖最后由 作者 于 2010-7-25 9:07:06 编辑

谢谢Gu_xl

实验成功,但又发现了一个小问题,不知是否方便将得到的结果除以10的6次方,其他与原先一致?

例如原先的面积单位是平方毫米,现在改为平方米?

在上面这个程序对没有使用闭合命令的PL线不起作用,不知是否方便更改?

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=63167&replyID=&skin=0

在上面链接中,ZZXXQQ版主提供了一个非常好程序,没有使用闭合命令C的PL线面积也能够计算出来,遗憾的是一次仅仅能够计算一个图形面积,若能同时选择多个图形并分别计算面积就好了?并且ZZXXQQ版主的程序也存在面积单位的问题,与我想象的程序不一致,不知能否将两个程序的优点结合在一起?

发表于 2010-7-27 18:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2018-7-20 01:12 , Processed in 0.279528 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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