guerearou 发表于 2015-1-26 22:54:46

请问同样是计算块,为何一种可以统计,一种不行?




为什么采用 BTJ这个lsp就可以读出,附件图纸中的插座数量。
而采用统计块lsp则无法统计数量,只能读取名字?

统计块采用的是这种方式读取
setq ss (ssget "X"(list (cons 0"INSERT,TCH_BLOCK_INSERT,*BLOCK") '(-4 . "<or")(cons 2 name)'(-4 . "or>"))))

BTJ采用的是
(if (= ss nil) (setq ss (ssget "x")))
(setq n 0 m 0)
(while (and ss (< n (sslength ss)))
         (setq ssn (ssname ss n))
         (if (= (cdr (assoc '0 (entget ssn))) "INSERT")
               (progn
            (setq blockname1 (cdr (assoc '2 (entget ssn))))            
            (if (= blockname blockname1)
                  (setq m (+ m 1))
            )
            )
            )
            (setq n (+ n 1))
)

这种方式来统计,目测感觉两种方式是一样的呀。但是一个可以统计,另一个就不行。
求解答。


guerearou 发表于 2015-1-27 08:41:33

BTJ的命令就是BTJ,后面那个统计块的命令是 KK,忘记添加在命令里面了。我后来想,是不是我对于SSGET这个函数没有理解,所有选择集里面筛选就没有筛选到插座这个块。但是对于这个-4.<这个判断条件,没有看到比较详细的解释。

guerearou 发表于 2015-1-27 08:51:23

额   我刚才又尝试了一下,发现如果好像是块名的问题?块的名称是*U13,*U14这样的。是否就是因为前面带一个*导致判断的问题?但是另一种选择集的手动筛选不存在这样的问题呀?

guerearou 发表于 2015-1-27 09:21:23

蛋疼,好像真的是*的原因,根据ssget运算参数*表示全部都为真,到了函数里面就不是判断同名称了,而是一个运算条件了。额,怎么避免这个问题?

guerearou 发表于 2015-1-27 10:28:11

好吧,实在没法,找了个自动修改匿名块为普通块Lsp.
页: [1]
查看完整版本: 请问同样是计算块,为何一种可以统计,一种不行?