我能得到的最接近的是。。。。。。。。。
(defun C:demo(/ ss i pl_list mt_list mtpt_list sn a b c d e f g h tmp _nearest thelenght)
(setq _relist (lambda (m)
((if m vl-remove-if vl-remove-if-not) '(lambda (x)
(equal (car f) (car x))) g)))
(if (setq ss (ssget
'((410 . "Model")(8 . "0gas")
(-4 . "<OR")
(-4 . "<AND")(0 . "MTEXT")(1 . "#****")
(-4 . "AND>") (0 . "LWPOLYLINE") (-4 . "OR>")))
)
(progn
(repeat (setq i (sslength ss))
(setq sn (ssname ss (setq i (1- i))))
(if (eq (cdr (assoc 0 (setq ent (entgetsn)))) "LWPOLYLINE")
(setq pl_list (cons (list (vlax-curve-getDistAtParam sn
(vlax-curve-getendparam sn)) sn ) pl_list))
(setq mt_list (cons (list (cdr (assoc 10 ent)) (cdr (assoc 1 ent))) mt_list))
)
)
(while (and (setq a (car mt_list)) pl_list)
(setq tmp (mapcar '(lambda (c)
(list c (distance (car a)
(vlax-curve-getClosestPointTo (cadr c) (car a)))
(car c) (cadr a)))pl_list))
(setq _nearest (car (vl-sort tmp '(lambda ( d e )
(< (cadr d) (cadr e)))))
pl_list (vl-remove (Car _nearest) pl_list)
mtpt_list (cons (list (cadddr _nearest) (caddr _nearest)) mtpt_list)
mt_list (cdr mt_list))
)
(setq mtpt_list (vl-sort mtpt_list
'(lambda (u v)
(< (car u) (car v))
)
)
)
(while (setq f (car mtpt_list))
(setq g (cdr mtpt_list))
(setq thelenght (rtos
(if (setq h (_relist nil))
(progn
(setq g (_relist t))
(apply '+ (mapcar 'cadr (cons f h))))
(cadr f)) 2 2 ))
(princ (strcat "\nThere are "
(itoa (if h (1+ (length h)) 1))
" MTEXT objects with content \""
(car f)
"\" on the current tab and the "
(if h "total " "")
"length is " thelenght"m."))
(setq mtpt_list g)
)
)
)
(princ)
)
我尝试了一些东西,但我必须承认我是一个初学者,所以我有点挣扎!
我所能做的就是替换(-4)。”
现在,它列出了每个场景,但它们是单独列出的。
我的代码如下所示。。。。
当前选项卡上有1个多行文字对象,其内容为“63 Pe”
长度为11.93m。
当前选项卡上有1个多行文字对象,其内容为“63mm Pe”
长度为2.44m。
理想情况下,我希望它能做到这一点,但将它们列为每个直径的总数。 上一个有点相关的线程:
http://www.cadtutor.net/forum/showthread.php?98447-LISP显示多行文字内容&p=671463#post671463
我想知道为什么不将所有名称变体重命名为一个全局名称,即:
63mm PE, 63mm Pe, 63 PE, 63 Pe,-> 63mm PE
你几乎做到了,安迪,如果多行文字字符串值总是以PE或PE,PE,PE结尾,那么用
(1 . "#*")
现在的条件是字符串需要以数字值“#”开头,只要以字母p&e结尾。
下一步是巩固“相似”的价值观……你可以做到,安迪
并学习如何使用代码标记。
再次感谢,下面列出了所有场景。现在唯一的事情是,它将它们列为单独的对象,就像这样。。。
当前选项卡上有1个多行文字对象,其内容为“63mm PE”
长度为25.1m。
当前选项卡上有两个内容为“63mm Pe”的多行文字对象,并且
总长20.2m。
可以这样列出它们吗(合并):
当前选项卡上有3个多行文字对象,其内容为“63mm Pe”
总长45.3m。
我认为这可能需要寻找数字(63/90/125等)才能起作用。
对不起,我刚刚看到这个帖子,所以你已经知道我的下一个问题了!我会试着让你知道!
已经做了,更新了演示代码所在帖子上的例程
请尝试用代码标签修复您的帖子 对不起,下次我会记得的。谢谢你的帮助,代码完全符合我的要求!
嗨,又是我。
再次感谢您的代码,我一直在使用它,它工作得很好。
您是否能够将其设置为使多段线的每个长度向上或向下舍入为整数(18.35m=18m/18.65m=19m)? 请阅读代码发布指南,并编辑代码以包含在代码标记(非HTML标记)中。
Your Code Here=
Your Code Here
希望这是正确的。。。。
嗨,又是我。
再次感谢您的代码,我一直在使用它,它工作得很好。
您是否能够将其设置为使多段线的每个长度向上或向下舍入为整数(18.35m=18m/18.65m=19m)?
(defun C:demo(/ ss i pl_list mt_list mtpt_list sn a b c d e f g h tmp _nearest thelenght)
(setq _relist (lambda (m)
((if m vl-remove-if vl-remove-if-not) '(lambda (x)
(equal (car f) (car x))) g)))
(if (setq ss (ssget
'((410 . "Model")(8 . "0gas")
(-4 . "<OR")
(-4 . "<AND")(0 . "MTEXT")(1 . "#*")
(-4 . "AND>") (0 . "LWPOLYLINE") (-4 . "OR>")))
)
(progn
(repeat (setq i (sslength ss))
(setq sn (ssname ss (setq i (1- i))))
(if (eq (cdr (assoc 0 (setq ent (entgetsn)))) "LWPOLYLINE")
(setq pl_list (cons (list (vlax-curve-getDistAtParam sn
(vlax-curve-getendparam sn)) sn ) pl_list))
(setq mt_list (cons (list (cdr (assoc 10 ent)) (atoi (cdr (assoc 1 ent)))) mt_list))
)
)
(while (and (setq a (car mt_list)) pl_list)
(setq tmp (mapcar '(lambda (c)
(list c (distance (car a)
(vlax-curve-getClosestPointTo (cadr c) (car a)))
(car c) (cadr a)))pl_list))
(setq _nearest (car (vl-sort tmp '(lambda ( d e )
(< (cadr d) (cadr e)))))
pl_list (vl-remove (Car _nearest) pl_list)
mtpt_list (cons (list (cadddr _nearest) (caddr _nearest)) mtpt_list)
mt_list (cdr mt_list))
)
(setq mtpt_list (vl-sort mtpt_list
'(lambda (u v)
(< (car u) (car v))
)
)
)
(while (setq f (car mtpt_list))
(setq g (cdr mtpt_list))
(setq thelenght (rtos
(if (setq h (_relist nil))
(progn
(setq g (_relist t))
(apply '+ (mapcar 'cadr (cons f h))))
(cadr f)) 2 2 ))
(princ (strcat "\nThere are "
(itoa (if h (1+ (length h)) 1))
" MTEXT objects with content \""
(itoa (car f))
"mm PE\" on the current tab and the "
(if h "total " "")
"length is " thelenght"m."))
(setq mtpt_list g)
)
)
)
(princ)
)
页:
1
[2]