为块指定值
你好我想有一个lisp计算流量的灌溉喷头在点击。
图形中有不同的块。我想将0.23分配给块1,0.12分配给块2,0.06分配给块3。
选择完块后,所需的lisp是按块1的数量x 0.23+块2的数量x 0.12+块3的数量x 0.06计算流量。
如果有人能用Autolisp写这篇文章,我将不胜感激。
谢谢,如果解释不清楚,请告诉我 欢迎来到Cadtutor
这是否意味着您有块(非属性块)并且您想要计算选定块中的值?
如果没有,请更具体地说明你的日常目标。
塔瓦特 感谢您的及时回复。
我有没有属性块。
我在下面的链接中有类似的线程
http://www.cadtutor.net/forum/showthread.php?54111-数据提取和突出显示=灌溉
我正在为没有属性的块寻找相同的属性。
再次感谢,
Suriwaits。 您想在文本或警报消息中显示这些值吗? 警报信息将非常好。。 现在试试这个草稿。。。
(defun c:Test (/ *error* IfBlockhasSingleTextObject _sum j ss i sn l)
;;--- Tharwat 31. March, 2013 ---;;
(defun *error* (msg)
(princ
"\n*Cancelled by user or by coincidence ,Nothings more*"
)
)
(defun IfBlockhasSingleTextObject (e / i)
(setq i 0)
(setq e (tblobjname "BLOCK" (cdr (assoc 2 (entget e)))))
(while (and (setq e (entnext e))
(not (eq (cdr (assoc 0 (entget e))) "SEQEND"))
)
(if (wcmatch (cdr (assoc 0 (entget e))) "*TEXT")
(setq i (1+ i))
)
)
i
)
(defun _sum (en / sm)
(setq sm 0.)
(setq en (tblobjname "BLOCK" (cdr (assoc 2 (entget en)))))
(while (and (setq en (entnext en))
(not (eq (cdr (assoc 0 (entget en))) "SEQEND"))
)
(if (and (wcmatch (cdr (assoc 0 (entget en))) "*TEXT")
(numberp (read (cdr (assoc 1 (entget en)))))
)
(setq sm (+ (read (cdr (assoc 1 (entget en)))) sm))
)
)
sm
)
(if (setq j0.
ss (ssget "_:L" '((0 . "INSERT")))
)
(repeat (setq i (sslength ss))
(setq sn (ssname ss (setq i (1- i))))
(if (eq (IfBlockhasSingleTextObject sn) 1)
(setq j (+ (_sum sn) j))
(setq l (cons sn l))
)
)
)
(if l
(alert
(strcat "You have < "
(itoa (length l))
" > Blocks doesn't have or have more than one Text entity "
)
)
)
(if (> j 0)
(alert (strcat "Total Values : " (rtos j 2 4)))
)
(princ "\nWritten by Tharwat Al Shoufi")
(princ)
)
尊敬的Tharwat先生:
看起来Lisp程序很好。谢谢
早上到办公室时,我会试试你的Lisp程序。
看到你的Lisp程序和我给你的输入不足,这不会像我想的那样奏效,
因为我的块中没有任何文本值或属性
比如说,
对于块名为BLK1的块,其值应为0.23
类似地,对于BLk2-0.12和BLK3-0.06(该值不一定要在图纸中显示,它应该取该值并乘以相应块的数量,将其与其他块x值相加,并显示为流是“总和的值”
我将使用你的程序张贴在这里,如果它是不可能的,我想如何。。
Suriwaits公司 如果您可以上传一个样例图形,那么就可以更清楚地了解代码的目标。 尊敬的Tharwat先生:,
当块具有所需值的文本时,您的程序可以完美地工作。
在附图中,有3个不同的区块
下面是数量
15个180度
9个360度
2个90度
现在我想要程序来计算
15x0.12+9x0.23+2x0.06
0.12、0.23和0.06分别是180度、360度和90度灌溉喷嘴的流量。
喷雾器1-副本。图纸 如果我能治好你。
(defun c:Test (/ *error* j ss i e)
;;--- Tharwat 31. March, 2013 ---;;
(defun *error* (msg)
(princ
"\n*Cancelled by user or by coincidence ,Nothings more*"
)
)
(if (setq j0.
ss (ssget "_:L" '((0 . "INSERT") (2 . "180DEG,360DEG,90DEG")))
)
(repeat (setq i (sslength ss))
(setq e (entget (ssname ss (setq i (1- i)))))
(cond ((eq (cdr (assoc 2 e)) "90DEG")
(setq j (+ 0.12 j))
)
((eq (cdr (assoc 2 e)) "180DEG")
(setq j (+ 1.8 j))
)
(t
(eq (cdr (assoc 2 e)) "360DEG")
(setq j (+ 2.07 j))
)
)
)
)
(if (> j 0)
(alert (strcat "Total Values : " (rtos j 2 4)))
)
(princ)
)
页:
[1]
2