张大锤 发表于 2018-7-19 19:28:39

怎麼使用+法

本帖最后由 张大锤 于 2018-7-19 19:46 编辑

(defun c:tt()
(setq AA (ssget "x" '((0 . "INSERT")(2 . "BB*"))))
(setq m 0)
(repeat (sslength AA)
(setq AAA (cdr (assoc 2 (entget (ssname AA m)))))
(if (= AAA "BB1P")(setq cc1 1))
(if (= AAA "BB2P")(setq cc2 2))
(if (= AAA "BB3P")(setq cc3 3))
(if (= AAA "BB4P")(setq cc4 4))
(if (= AAA "BB5P")(setq cc5 5))
(setq m(1+ m))
)
(setq zs (+ cc1 cc2 cc3 cc4 cc5))
(princ)
)


(if (= AAA "BB1P")(setq cc1 1)(setq cc1 0) )
(if (= AAA "BB2P")(setq cc2 2)(setq cc2 0) )
(if (= AAA "BB3P")(setq cc3 3)(setq cc3 0) )
(if (= AAA "BB4P")(setq cc4 4)(setq cc4 0) )
(if (= AAA "BB5P")(setq cc5 5)(setq cc5 0) )
这么写我试了 计算的不对

有的时候图面上 对于上边的块是不固定的 有的时候是1+2 有的时候是2+4
图面上没有其他块就会=nil就计算不出来总数了 !zs 就会报错
请问朋友们 这个要怎么才能计算出来

(请大家不要纠结使用If还是(cond)
简写版
(setq cc1 1)
(setq cc2 2)
(setq cc3 nil)
(setq cc4 4)
(setq cc5 nil)
(setq zs (+ cc1 cc2 cc3 cc4 cc5))

nil 怎么办




evayleung 发表于 2018-7-19 20:09:49


[*](defun c:tt()
[*](Setq cc1 0 cc2 0 cc3 0 cc4 0 cc5 0)
[*](if (ssget "x" '((0 . "INSERT")(2 . "BB1P")))
[*](Setq cc1 1)
[*])
[*](if (ssget "x" '((0 . "INSERT")(2 . "BB2P")))
[*](Setq cc2 2)
[*])
[*](if (ssget "x" '((0 . "INSERT")(2 . "BB3P")))
[*](Setq cc3 3)
[*])
[*](if (ssget "x" '((0 . "INSERT")(2 . "BB4P")))
[*](Setq cc4 4)
[*])
[*](if (ssget "x" '((0 . "INSERT")(2 . "BB5P")))
[*](Setq cc5 5)
[*])
[*](setq zs (+ cc1 cc2 cc3 cc4 cc5))
[*](princ)
[*])

张大锤 发表于 2018-7-24 16:02:22

masterlong 发表于 2018-7-22 14:34
楼主的逻辑没搞懂
楼上的逻辑也没搞懂

哈哈 可能我表达的能力不好强
大约是这么个意思

地暖的水阀 有5个口的 (这里我表达为5P)

cc1 代表的是 1p水阀 要接1跟地热管
cc2 代表的是 2p水阀 要接2跟地热管
......

cc1 是一个块 cc1代表的是1跟水管 所以cc1=数量1
我想统计出这个房间 要使用多少跟地热管
就全图选择都用了那个水阀的块名
用块名来判断出我要买多少根地热管
(总体意思就是:用块名判断数量)

张大锤 发表于 2018-7-20 08:45:36

evayleung 发表于 2018-7-19 20:09
[*](defun c:tt()
[*](Setq cc1 0 cc2 0 cc3 0 cc4 0 cc5 0)
[*](if (ssget "x" '((0 . "INSERT")(2 ....

朋友請問這個你了解嘛

(Setq cc1 0 cc2 0 cc3 0 cc4 0 cc5 0 cc6 0 cc7 0 cc8 0 cc9 0 cc10 0 cc11 0 cc12 0 cc13 0 cc14 0 cc15 0)
因為有15個 這樣的塊名 所以要寫15個
有啥函數可以cc1 0 - cc15 0 這麼簡練的函數...

被承包的东子 发表于 2018-7-19 20:01:54

看不懂啥意思

evayleung 发表于 2018-7-19 20:05:17

你这是要计算块的数量?

lostbalance 发表于 2018-7-19 20:33:02

没看明白到底要实现什么,如果只是用块代表的数字求和,就不知道你说的计算的不对是哪里不对,如果是要统计每种块的数量,公式看着又不对

张大锤 发表于 2018-7-19 20:49:01

evayleung 发表于 2018-7-19 20:05
你这是要计算块的数量?

嗯對 就是計算這個數量 你這個每次選擇 我有想過 但是比較麻煩用循環的話 會比較方便

张大锤 发表于 2018-7-20 08:06:05

evayleung 发表于 2018-7-19 20:09
[*](defun c:tt()
[*](Setq cc1 0 cc2 0 cc3 0 cc4 0 cc5 0)
[*](if (ssget "x" '((0 . "INSERT")(2 ....

好像也就是你這個可以

evayleung 发表于 2018-7-20 11:25:11

(setq i 15)
(repeat i
    (set (read (strcat "cc" (itoa i))) 0)
          (Setq i (1- i))
)

masterlong 发表于 2018-7-20 11:53:36

(apply '+ (vl-remove nil (list cc1 cc2 cc3 cc4 cc5)))
但是不明白程序的意图
页: [1] 2
查看完整版本: 怎麼使用+法