找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 441|回复: 3

[分享]:用于建筑施工图中清点门窗个数,能力有限请各位大侠多请意见!

[复制链接]
发表于 2003-4-13 14:13:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(defun c:ccm (/                ccm_ob          ccm_len   ccm_ct    ccm_l1
              ccm_ct1        ccm_en          ccm_tn1   ccm_l2    ccm_ctt
              ccm_tn1        ccm_en1          ccm_tn    ccm_th    ccm_ts
              ccm_name        ccm_no
             )
  (while
    (not
      (setq ccm_ob                        ;on--"object name"
             (ssget (list '(0 . "text")))
      )
    )
     (princ "\nselect again:")
  )
  (setq        ccm_len         (sslength ccm_ob)
        ccm_ct         0
        ccm_sure (getstring "\n print? Y/N:<Y>")
        ccm_l1         '()
  )
  (if (or (= ccm_sure "y") (= ccm_sure "Y") (= ccm_sure ""))
    (setq tlp (getpoint "\n top/left point please:"))
    ()
  )
  (ccm_var_0)
  (cubegin)
  (cbl_var_0)
  (while (< ccm_ct ccm_len)
    (setq ccm_en  (entget (ssname ccm_ob ccm_ct))
          ccm_tn1 (cdr (assoc 1 ccm_en))

    )
    (if        (= nil (member ccm_tn1 ccm_l1))
      (setq ccm_l1 (cons ccm_tn1 ccm_l1))
    )
    (setq ccm_ct (1+ ccm_ct))
  )
  (setq ccm_l1 (acad_strlsort ccm_l1))
  (while
    (setq ccm_l2  '()
          ccm_ctt 0
          ccm_tn1 (car ccm_l1)
    )
     (while (< ccm_ctt ccm_len)
       (setq ccm_en1 (entget (ssname ccm_ob ccm_ctt))
             ccm_tn  (cdr (assoc 1 ccm_en1))
             ccm_th  (cdr (assoc 40 ccm_en1))
             ccm_ts  (cdr (assoc 7 ccm_en1))
       )
       (setvar "textsize" ccm_th)
       (setvar "textstyle" ccm_ts)
       (if (= ccm_tn ccm_tn1)
         (progn        (setq ccm_l2 (cons ccm_tn ccm_l2))
                (setq ccm_ctt (1+ ccm_ctt))
         )
         (setq ccm_ctt (1+ ccm_ctt))
       )
     )
     (progn (setq ccm_no (itoa (length ccm_l2)))
            (princ ccm_tn1)
            (princ "   ")
            (princ ccm_no)
            (princ "    \n")

            (if        (or (= ccm_sure "y") (= ccm_sure "Y") (= ccm_sure ""))
              (progn
                (setq
                  tlp  (list (car tlp) (- (cadr tlp) (* 2.5 ccm_th)))
                  tlp1 (list (+ (car tlp) (* 15 ccm_th)) (cadr tlp))
                )

                (command "text" tlp "" "" ccm_tn1)
                (command "text" tlp1 "" "" ccm_no)
              )
            )
     )
     (setq ccm_l1 (cdr ccm_l1))
  )
  (cuend)

  (cbl_var_1)
  (ccm_var_1)
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-4-15 09:12:24 | 显示全部楼层
1。以字为实体选择,可以加上图层过滤。
2。最后结果要排序统计。
3。内部函数未贴出。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-4-15 11:37:52 | 显示全部楼层
哦!忘了!
谢谢指教,你所说的排序具体指什么?
再看看这个统计天正自动生成门窗个数的小程序:
(defun c:cm (/              cm_ob    cm_len        cm_ct         cm_l1          cm_ct1
             cm_en    cm_tn1   cm_l2        cm_ctt         cm_tn1          cm_en1
             cm_tn    cm_th    cm_ts        cm_name         cm_no
            )
  (while
    (not
      (setq cm_ob                        ;on--"object name"
             (ssget (list '(0 . "insert") '(66 . 1)))
      )
    )
     (princ "\nselect again:")
  )
  (setq        cm_len        (sslength cm_ob)
        cm_ct        0
        cm_sure        (getstring "\n print? Y/N:<Y>")
        cm_l1        '()
  )

  (ccm_var_0)
  (cbl_var_0)
  (cubegin)
  (while (< cm_ct cm_len)
    (setq cm_en         (entget (entnext (ssname cm_ob cm_ct)))
          cm_tn1 (cdr (assoc 1 cm_en))


    )
    (if        (= nil (member cm_tn1 cm_l1))
      (setq cm_l1 (cons cm_tn1 cm_l1))
    )
    (setq cm_ct (1+ cm_ct))
  )
  (setq cm_l1 (acad_strlsort cm_l1))
  ;;(if (null cm_thh)
                                        ; ; (setq cm_thh_temp cm_th))

  (if (or (= cm_sure "y") (= cm_sure "Y") (= cm_sure ""))
    (setq tlp (getpoint "\n pick point:"))
  )
  (while
    (setq cm_l2         '()
          cm_ctt 0
          cm_tn1 (car cm_l1)
    )
     (while (< cm_ctt cm_len)
       (setq cm_en1 (entget (entnext (ssname cm_ob cm_ctt)))
             cm_tn  (cdr (assoc 1 cm_en1))
             cm_th  (cdr (assoc 40 cm_en1))
             cm_ts  (cdr (assoc 7 cm_en1))
       )
       (if (= cm_tn cm_tn1)
         (progn        (setq cm_l2 (cons cm_tn cm_l2))
                (setq cm_ctt (1+ cm_ctt))
         )
         (setq cm_ctt (1+ cm_ctt))
       )
     )
     (progn (setq cm_no (itoa (length cm_l2)))
            (princ cm_tn1)
            (princ "   ")
            (princ cm_no)
            (princ "    \n")

            (if        (or (= cm_sure "y") (= cm_sure "Y") (= cm_sure ""))
              (progn (setq tlp        (list (car tlp) (- (cadr tlp) (* 2 cm_th)))
                           tlp1        (list (+ (car tlp) (* 24 cm_th)) (cadr tlp))
                     )
                     (setvar "textsize" cm_th)
                     (setvar "textstyle" cm_ts)
                     (command "text" "j" "tl" tlp cm_th "" cm_tn1)
                     (command "text" "j" "tl" tlp1 cm_th "" cm_no)
              )
            )
     )
     (setq cm_l1 (cdr cm_l1))
  )
  (cuend)
  (cbl_var_1)
  (ccm_var_1)
  (princ)
)
;;;;;;;;;;;;;;;;
(defun cubegin ()
  (command "undo" "begin")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cuend ()
  (command "undo" "end")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cos_var_0 ()
  (setq os (getvar "osmode"))
  (setvar "osmode" 0)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cos_var_1 ()
  (setvar "osmode" os)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cbl_var_0 ()
  (setq bl (getvar "blipmode"))
  (setvar "blipmode" 0)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cbl_var_1 ()
  (setvar "blipmode" bl)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cla_get ()
  (setq cla (getvar "clayer"))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cla_set ()
  (setvar "clayer" cla)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ccm_var_0 ()
  (setq cm (getvar "cmdecho"))
  (setvar "cmdecho" 0)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ccm_var_1 ()
  (setvar "cmdecho" cm)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-4-19 17:59:40 | 显示全部楼层
学一下理正的方法.很符合画图的习惯.(当然也有不足)
天正用的是属性.用text不好.
你写的好象没画格子线,所有楼层要统计一下.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-3 13:50 , Processed in 0.414652 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表