njxq971 发表于 2014-8-20 10:08:35

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

本帖最后由 njxq971 于 2014-11-3 10:33 编辑

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

llsheng_73 发表于 2014-8-20 15:43:08

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

njxq971 发表于 2014-8-21 08:44:42

谢谢您的精彩分析。

77077 发表于 2014-8-22 21:49:05

可以先看看我这贴
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=111154&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline%26orderby%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你自己换成多段线顶点.

77077 发表于 2014-8-22 21:49:37

((= K 5)(setq num (/ (apply '+ numlst) (length numlst))));平均数

xyp1964 发表于 2014-8-24 11:56:04



njxq971 发表于 2014-8-26 10:14:20

qyming 发表于 2014-8-26 21:38:16

77077 发表于 2014-8-22 21:49 static/image/common/back.gif
可以先看看我这贴
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]*")))
显示参数太多????????????????

77077 发表于 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)
)

不过貌似我理解错楼主的意思了,可能真的是像院长那样才是正确的!
那你何不做成属性块呢,你那样如果点重叠在一起(或很接近) 的话很容易出错.

77077 发表于 2014-8-26 22:22:38

如果不做成属性块,像这样的,百分之七八十都要出错.
页: [1] 2
查看完整版本: 怎样计算图形中两个图层单行文字平均值