明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2744|回复: 11

[提问] 怎样计算图形中两个图层单行文字平均值

[复制链接]
发表于 2014-8-20 10:08:35 | 显示全部楼层 |阅读模式
本帖最后由 njxq971 于 2014-11-3 10:33 编辑

怎样通过AUTOLISP程序实现自动计算图层平均值,并将平均值写在指定位置。请各位高手帮忙,感激不尽。

本帖子中包含更多资源

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

x
发表于 2014-8-20 15:43:08 | 显示全部楼层
大概说下,首先选择范围线(需要保证它不能有冗余点,如果有,需要去除)得到它的坐标表pT;
接下来需要解决准确获取PT坐标范围内的数值类文字(具体参考ssget  后跟mode 的部分理解(不断更新)
http://bbs.mjtd.com/forum.php?mo ... &fromuid=202795),至于怎么计算它们的平均值那不应该是问题
这里有个关键问题怎么准确获取指定坐标范围内的图元,一般首先会想到ssget的"wP"或者"CP"方式,书上也这么说的,没错,大多数时候都没问题,但是它有个问题,首先选取范围线的时候为了方便选择可能对屏幕进行一定的缩放操作,这样线选中了,但线不一定完全在屏幕内,这个时候选择会失败,另外屏幕的放大率可能引起选择结果不准确
那么可以另外想个办法,那就是可以先选择所有文字,然后再根据其插入点坐标是否在范围内决定取舍
 楼主| 发表于 2014-8-21 08:44:42 | 显示全部楼层
谢谢您的精彩分析。
发表于 2014-8-22 21:49:05 | 显示全部楼层
可以先看看我这贴
http://bbs.mjtd.com/forum.php?mo ... 6orderby%3Ddateline

然后你只需要把(ssget (list (cons 0 "TEXT") (cons 1 "~*[~`--9]*")))这句的过滤部分换你需要的即可.
(ssget “WP"pt_list (list (cons 0 "TEXT") (cons 8 "M,Pb") (cons 1 "~*[~`--9]*")));其中的pt_list你自己换成多段线顶点.
发表于 2014-8-22 21:49:37 | 显示全部楼层
((= K 5)(setq num (/ (apply '+ numlst) (length numlst))));平均数
发表于 2014-8-24 11:56:04 | 显示全部楼层


本帖子中包含更多资源

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

x
 楼主| 发表于 2014-8-26 10:14:20 | 显示全部楼层
发表于 2014-8-26 21:38:16 | 显示全部楼层
77077 发表于 2014-8-22 21:49
可以先看看我这贴
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=111154&extra=page%3D1%26filter%3D ...

把(ssget (list (cons 0 "TEXT") (cons 1 "~*[~`--9]*")))这句的过滤部分换成
(ssget “WP"pt_list (list (cons 0 "TEXT") (cons 8 "M,Pb") (cons 1 "~*[~`--9]*")))
显示参数太多????????????????
发表于 2014-8-26 22:06:04 | 显示全部楼层
本帖最后由 77077 于 2014-8-26 22:13 编辑

你不要急我好不好,(ssget “WP"pt_list (list (cons 0 "TEXT") (cons 8 "M,Pb") (cons 1 "~*[~`--9]*")))这句话里面"wp"外面的引号打错了,你纠正下就行了嘛~~~

(defun c:xx( / ptlst sslst numlst num)
   (defun ss->EnLst (ss / retu)
       (setq retu (apply 'append (ssnamex ss)))
       (setq retu (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) retu))
   )
  (setq ptlst (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget(car(entsel "\n 选择多边形:"))))))
  (setq sslst (ss->EnLst (ssget "wp" ptlst (list (cons 0 "TEXT") (cons 8 "M,Pb") (cons 1 "~*[~`--9]*")))))
  (setq numlst (mapcar '(lambda(x) (atof (cdr (assoc 1 (entget x))))) sslst))   
  (setq num (/ (apply '+ numlst) (length numlst)))
  (princ num)
  (princ)
)

不过貌似我理解错楼主的意思了,可能真的是像院长那样才是正确的!
那你何不做成属性块呢,你那样如果点重叠在一起(或很接近) 的话很容易出错.
发表于 2014-8-26 22:22:38 | 显示全部楼层
如果不做成属性块,像这样的,百分之七八十都要出错.

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-24 04:42 , Processed in 0.188486 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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