Ahmeds 发表于 2022-7-6 07:18:06

两个文本实体的计数

我不知道我的代码有什么问题,我只是个乞丐。。
谁能帮我一下吗?我将在星期一提交。。。
 
(defun c:corcount(/allcor outcor lots ts\u lots ts\u角)
 
(如果
(setq outcor(ssget“_x”'((0。“text”)(8。“Pnts”)))
(setq outcor(sslength outcor))
(setq outcor 0)
);如果
 
(提示“\n选择要计数的地块/角落:”)
 
(setq ents(ssget(列表)(cons 0“文本”)
(cons-4“(cons 8“$LOTNO”)
(cons 8“角”)
(cons-4“或>”))
 
(defun a(/allcor)
(如果
(setq allcor(ssget“_P”'((0。“text”)(8。“拐角”)))
(setq allcor(sslength allcor))
(setq allcor 0)
);如果
(setq ts_角(itoa(-allcor outcor)))
(princ(strcat“\n角数:“ts\U角”)
);德芬
 
(defun b(/批)
(如果
(setq lots(ssget“_P”'((0。“text”)(8“$LOTNO”)))
(setq批次(sslength批次))
(setq地块0)
);如果
(setq ts_地块(itoa地块))
(princ(strcat“\n标段数:“ts\U标段”)
);德芬
(a) (b)
(普林斯)
)

MSasu 发表于 2022-7-6 07:33:19

请注意,下面的行将处理函数A中的选择集,而不是不再是前一个选择集的ENTS。因此,此语句将始终返回零。
(setq lots (ssget "_P" '((0 . "text") (8 . "$LOTNO"))))
尝试使用SSNAME解析ENTS选择集。
 
对于注释,可以使用WCMATCH函数中的规则组合过滤器:
(ssget '((0 . "TEXT") (8 ."$LOTNO,Corners")))
 
请添加代码可读性所需的代码标记。

Ahmeds 发表于 2022-7-6 07:43:42

谢谢MSasu,但我对你的建议有点上当了。对不起,我只是个初学者。你能告诉我这是怎么回事吗?

Tharwat 发表于 2022-7-6 07:50:15

试试这个。。。。
 
[未经测试]

(defun c:corcount (/ cor lot ents i sn)
(setq cor 0
       lot 0
)
(if (setq ents (ssget "_X" '((0 . "TEXT") (8 . "$LOTNO,Corners"))))
   (repeat (setq i (sslength ents))
   (setq sn (ssname ents (setq i (1- i))))
   (if (eq (cdr (assoc 8 (entget sn))) "Corners")
       (setq cor (setq cor (1+ cor)))
       (setq lot (setq lot (1+ lot)))
   )
   )
)
(if (> cor 0)
   (princ (strcat "\n Number of Corners : < " (itoa cor) " >"))
)
(if (> lot 0)
   (princ (strcat "\n Number of Lots : < " (itoa lot) " >"))
)
(princ)
)

irneb 发表于 2022-7-6 07:53:13

ssget中所有值中包含文本的过滤器都使用与wcmatch lisp函数相同的通配符匹配。因此,请查看它的帮助:http://docs.autodesk.com/ACD/2011/ENU/filesALR/WS1a9193826455f5ff1a32d8d10ebc6b7ccc-6754.htm
 
另一种替代方法是在过滤器列表中使用逻辑分组,但在这种情况下,这可能太多了。

Ahmeds 发表于 2022-7-6 08:07:46

非常感谢Tharwat,但概念就在这里。
 
1.I have three layer here to use to get the确切答案,我在这里使用了三层。
a、 “PNT”
b、 “$LOTNO”和
c、 “角落”
2.我可以在我的“Pnts”层使用(ssget“_X”)来计算它们
3.但我只需要选择那些属于两层的实体进行计数($LOTNO和Corners)
4.在得到数字后,我将从“Pnts”中得到的数字减去“Corners”,看起来像(-Corners Pnts)
最后,$LOTNO应该只减少一。
 
再次非常感谢,这对我帮助很大。

pBe 发表于 2022-7-6 08:10:55

 
从“PNT”中减去“角点”数量的原因是为了获得选择中“$LOTNO”的数量?
对于“PNT”层上的每个文本实体,对于“$LOTNO”或“Corners”有一个等效的文本实体?

SLW210 发表于 2022-7-6 08:20:55

请阅读代码发布指南,并编辑您的帖子,以包括代码标签!
页: [1]
查看完整版本: 两个文本实体的计数