找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2367|回复: 23

[求助] 框选所有所有闭合的图形标面积

[复制链接]
发表于 2013-11-22 20:39:50 | 显示全部楼层 |阅读模式

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

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

×
如下图所示。框选所有的闭合多段线(弧形也可以),自动在每个闭合的图形中心标出面积来。有2点要求,1:最好设置可选择的保留几位数。2:标出来的面积居图形中心处。3:面积带不带㎡单位,无所谓,最好别带上{:soso_e113:}
QQ图片20131122203141.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-11-22 21:00:20 | 显示全部楼层
这个论坛上搜索很多个,这个中心对凸形 Ok,凹形就不一定了

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-11-22 21:08:28 | 显示全部楼层
也不是要参与数学运算,何必要求多边形的中心,包围盒的中心就行了。

点评

嗯 那也行,主要是怕数字跑远了  详情 回复 发表于 2013-11-22 21:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-22 21:20:23 | 显示全部楼层
newer 发表于 2013-11-22 21:08
也不是要参与数学运算,何必要求多边形的中心,包围盒的中心就行了。

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-22 21:52:52 | 显示全部楼层
--@----- 发表于 2013-11-22 21:20
嗯 那也行,主要是怕数字跑远了

  1. (defun c:tt (/ ss)
  2.   (if (setq ss (ssget '((0 . "circle,*polyline,ellipse,spline"))))
  3.     (mapcar
  4.       '(lambda (x / txt)
  5.          (and (xdrx_curve_isclosed x)
  6.               (setq
  7.                 txt (xdrx_text_make
  8.                       (apply 'xdrx_points_centroid (xdrx_entity_box x))
  9.                       (rtos (car (xdrx_getarea x)) 2 3)
  10.                       3.5 ;_text height
  11.                       0.
  12.                     )
  13.               )
  14.               (xdrx_text_setvermode txt 2)
  15.               (xdrx_text_sethozmode txt 1)
  16.          )
  17.        )
  18.       (xdrx_pickset->ents ss)
  19.     )
  20.   )
  21.   (princ)
  22. )

点评

不能设置保留几位数,文字高度太小,默认500/1000的字高会好些  详情 回复 发表于 2013-11-23 10:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-11-23 08:38:45 | 显示全部楼层

vla 方法
  1. (defun c:tt ()
  2.   (fy:clearcset)
  3.   (if (ssget '((0 . "circle,*polyline,ellipse,spline")))
  4.     (mapcar
  5.       '(lambda (x / bp up)
  6.          (and (vlax-curve-isclosed x)
  7.               (vla-getboundingbox x 'bp 'up)
  8.               (vla-addtext
  9.                 (fy:acms)
  10.                 (rtos (vlax-curve-getarea x) 2 3)
  11.                 (vlax-3d-point
  12.                   (trans
  13.                     (mapcar
  14.                       '*
  15.                       '(0.5 0.5 0.5)
  16.                       (mapcar '+
  17.                               (safearray-value bp)
  18.                               (safearray-value up)
  19.                       )
  20.                     )
  21.                     1
  22.                     0
  23.                   )
  24.                 )
  25.                 3.5
  26.               )
  27.          )
  28.        )
  29.       (fy:cset->objs)
  30.     )
  31.   )
  32.   (princ)
  33. )

点评

这个能否补充下: (fy:cset->objs)  发表于 2013-11-23 18:23
dear sir, error  详情 回复 发表于 2013-11-23 16:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-23 10:27:25 | 显示全部楼层

不能设置保留几位数,文字高度太小,默认500/1000的字高会好些

点评

字高根据自己绘图情况修改,保留几位 修改 rtos  详情 回复 发表于 2013-11-23 10:34
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-23 10:34:44 | 显示全部楼层
--@----- 发表于 2013-11-23 10:27
不能设置保留几位数,文字高度太小,默认500/1000的字高会好些

字高根据自己绘图情况修改,保留几位 修改 rtos

点评

凑合凑合用,里面的xdrx函数不知道是不是这样的  详情 回复 发表于 2013-11-23 14:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-11-23 14:09:21 | 显示全部楼层
st788796 发表于 2013-11-23 10:34
字高根据自己绘图情况修改,保留几位 修改 rtos

凑合凑合用,里面的xdrx函数不知道是不是这样的{:soso_e113:}
  1. (defun c:tt ( / ss txt x zg)
  2.   (vl-load-com)
  3.   (setq zg (getreal "\n请输入字体高度<10>:"))
  4.   (if (= nil zg) (setq zg 10.0))
  5.   (if (setq ss (ssget '((0 . "circle,*polyline,ellipse,spline"))))
  6.     (mapcar
  7.       '(lambda (x / txt)
  8.         (if (xdrx_curve_isclosed x)
  9.           (setq txt
  10.              (xdrx_text_make
  11.                (xdrx_points_centroid x)
  12.                (rtos (vlax-curve-getArea (vlax-ename->vla-object x)) 2 3)
  13.                zg
  14.                0.
  15.                1.0
  16.                1
  17.                0
  18.              )
  19.           )
  20.         )
  21.       )
  22.       (xdrx_pickset->ents ss)
  23.     )
  24.   )
  25.   (princ)
  26. )
  27. (defun xdrx_pickset->ents (ss / i s)
  28.   (if ss
  29.     (repeat (setq i (sslength ss))
  30.       (setq s (cons (ssname ss (setq i (1- i))) s))
  31.     )
  32.   )
  33. )
  34. (defun xdrx_curve_isclosed (e)
  35.   (= 1 (logand (cdr (assoc 70 (entget e))) 1))
  36. )
  37. (defun xdrx_points_centroid (poly / pl ms va reg cen)
  38.   (setq pl (vlax-ename->vla-object poly)
  39.         ms (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
  40.         va (vlax-make-safearray vlax-vbObject '(0 . 0))
  41.   )
  42.   (vlax-safearray-put-element va 0 pl)
  43.   (setq reg (car (vlax-safearray->list (vlax-variant-value (vla-Addregion ms va))))
  44.         cen (vla-get-Centroid reg)
  45.   )
  46.   (vla-Delete reg)
  47.   (vlax-safearray->list (vlax-variant-value cen))
  48. )
  49. (defun xdrx_text_make (pt str h r w y x)
  50.   (entmake
  51.     (list
  52.       '(0 . "TEXT") (cons 10 pt) (cons 1 str) (cons 40 h) (cons 50 r) (cons 41 w)
  53.       (cons 72 y) (cons 73 x) (cons 11 pt) '(71 . 0)
  54.     )
  55.   )
  56. )

点评

希望优化如下功能,1:字高默认值,不设置的时候就是默认值,以及保留几位数,都是默认的。当然也是可以设置的。默认就让空格代替掉,或者增加个命令参数来设置字高以及保留几位数: 2:计算出来的是平方米为单位的  详情 回复 发表于 2013-11-23 15:23
程序没调试,只说明下,用XDRX_API就不要用VLA对象了,这样就复杂了。 可以改为:  详情 回复 发表于 2013-11-23 14:12
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-11-23 14:12:22 | 显示全部楼层
本帖最后由 newer 于 2013-11-23 14:14 编辑
QiaoCheng 发表于 2013-11-23 14:09
凑合凑合用,里面的xdrx函数不知道是不是这样的

程序没调试,只说明下,用XDRX_API就不要用VLA对象了,这样就复杂了。

  1. (rtos (vlax-curve-getArea (vlax-ename->vla-object x)) 2 3)


可以改为:
  1. (rtos (xdrx_getpropertyvalue x "Area") 2 3)


看你下面的代码,难道你在用LISP模拟写API函数吗? 你用的函数 API都有。

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

使用道具 举报

 楼主| 发表于 2013-11-23 15:23:28 | 显示全部楼层
本帖最后由 --@----- 于 2013-11-23 15:37 编辑
QiaoCheng 发表于 2013-11-23 14:09
凑合凑合用,里面的xdrx函数不知道是不是这样的


希望优化如下功能,1:字高默认值,不设置的时候就是默认值,以及保留几位数,都是默认的。当然也是可以设置的。默认就让空格代替掉,或者增加个命令参数来设置字高以及保留几位数(最好是默认上次设置的,而不是一个固定值,每次去改):   2:计算出来的是平方米为单位的而不是平方毫米  呵呵   单位可以不用带上的

点评

这点小改动难不倒楼主吧!  详情 回复 发表于 2013-11-23 16:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-23 16:16:03 来自手机 | 显示全部楼层
--@----- 发表于 2013-11-23 15:23
希望优化如下功能,1:字高默认值,不设置的时候就是默认值,以及保留几位数,都是默认的。当然也是可 ...

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

使用道具 举报

已领礼包: 2221个

财富等级: 金玉满堂

发表于 2013-11-23 16:39:42 | 显示全部楼层

dear sir,

error
  1. Command: tt ; error: no function definition: FY:CLEARCSET
复制代码

点评

http://bbs.xdcad.net/forum.php?mod=viewthread&tid=671794&page=1&extra=#pid3497493  详情 回复 发表于 2013-11-24 12:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-11-24 12:03:16 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2221个

财富等级: 金玉满堂

发表于 2013-11-25 13:29:31 | 显示全部楼层
Free-Lancer 发表于 2013-11-24 12:03
http://bbs.xdcad.net/forum.php?mod=viewthread&tid=671794&page=1&extra=#pid3497493

dear sir,

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 08:51 , Processed in 0.979521 second(s), 70 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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