明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 344|回复: 3

[源码] 列表写出指定范围内块个数

[复制链接]
发表于 2024-1-24 16:06 | 显示全部楼层 |阅读模式
本帖最后由 弥勒 于 2024-3-2 14:20 编辑

;20211105学习20220324修改20240120
;QQ:11414516
(defun c:ktj();只列出有的
   (setvar  "cmdecho" 0)
   (setq os ( getvar "osmode"))
   (setvar "osmode" 0)
   (setq apt1(getpoint "\n 块统计表格基点:"))
   (setq ww 60)
      ;(if ( null ww) (setq ww 40.0))
   (setq hh 8)
      ;(if (null hh) (setq hh 8.0) )
   (setq blknnzw "种类")
   (setq apt2 (polar apt1 0 ww))
   (setq apt3 (polar apt2 (* pi 1.5) hh))
   (setq apt4 (polar apt1 (* pi 1.5) hh))
      (command  "pline" apt1 apt2 apt3 apt4  "c" )
      (setq apt5 (polar apt1 0 (/ ww 2)))
      (setq apt6 (polar apt5 (* pi 1.5) hh))
      (command "line" apt5  apt6 "" )
      (command "text" "m" (inters apt1 apt6 apt4 apt5) ( / hh 2) 0 "块名称")
      (command "text" "m" (inters apt5 apt3 apt2 apt6) ( / hh 2) 0 "数量" )
      (prompt "提示: 选择多段线范围,多段线为闭合。右键确认")
      (setq s1 (ssname (ssget) 0))
      ;(setq ss (ssget "_CP" ( plgetlst  s1)))


      (setq blk (tblnext "block" t));重复使用 tblnext 时,它每次通常会返回指定表中的下一个条目
     (while blk
        (setq blkn (assoc 2 blk));取表的第2个点对
                                ;(0 . "BLOCK")                    符号类型
                                ;(2 . "BOX")                      符号名
                                ;(70 . 0)                         标志
                                ;(10 9.0 2.0 0.0)                 原点坐标 X,Y,Z
                                ;(-2 . <图元名: 1dca370>)    第一个图元

       (setq blk_key (substr (cdr blkn) 1 1));取块名
       (if (/= blk_key "*")
        (progn
          (setq ss (ssget "_CP" ( plgetlst  s1) (list blkn)));依据块名的表,选择块的集合 list(2 . "BOX")
            (if ( null ss)
              (setq ssn 0)
               (progn
                   (setq ssn (sslength ss));测表的长度,即统计个数
                   ; 开始写表
                  (setq blknn (cdr blkn))
                  (setq apt1 apt4 apt5 apt6 apt2 apt3)
                  (setq apt4 (polar apt1 (* pi 1.5) hh))
                    (setq apt8 (polar apt1 (* pi 1) 30))
                    (setq apt9 (polar apt4 (* pi 1) 30))
                  (setq apt6 (polar apt5 (* pi 1.5) hh))
                  (setq apt3 (polar apt2 (* pi 1.5) hh))

                       (setq slst '( ("GC200" "高程点" )
                                     ("gc063" "摄像头")
                                     ("gc042" "上水井" )
                                     ("gc053" "雨水井" )
                                     ("gc143" "独立树" )
                                     ("gc144" "独立松" )
                                     ("gc144" "独立果" )
                                     ("gc135" "水龙头" )
                                     ("gc041" "雨篦子" )
                                     ("gc203" "路灯单" )
                                     ("gc097" "路灯双" )
                                     ("gc110" "单  坟" )
                                     ("gc048" "通讯井" )
                                     ("gc129" "变电箱" )
                                     ("gc146" "机  井" )
                                     ("gc234" "电缆桩" )
                                     ("gc052" "路  标" )
                                     ("gc043" "污水井" )
                                     ("gc046" "燃气井" )
                                     ("gc050" "电力井" )
                                     ("gc047" "热力井" )
                                     ("GCBJ0305" "垃圾箱" )
                                     ("gc133" "消防井" )
                                     ("GCBJ0407" "公园椅子" )
                                     ("gc188" "无名井" )

                                   )
                        )

                  (setq  sdata (car (assoc blknn slst)))

                  (if (= blknn sdata)


                            (setq blknnzw (car (cdr (assoc blknn slst))))

                            (setq blknnzw blknn)



                   )

                  (setq apt7 (polar (inters apt1 apt6 apt4 apt5) (* pi 1) 30))
                  (command "pline" apt2 apt3 apt4 apt1 "")
                  (command "pline" apt1 apt8 apt9 apt4 "")
                  (command "line" apt5 apt6 "")
                  (command "text" "m" (inters apt1 apt6 apt4 apt5) (/ hh 2) 0 blknn)
                  (command "text" "m" apt7 (/ hh 2) 0 blknnzw)
                  (command "text" "m" (inters apt5 apt3 apt2 apt6) (/ hh 2) 0 (itoa ssn))
                )
            )
          )
         )

          (setq blk (tblnext "block" ));返回指定表中的下一个条目
     )
        (setvar "osmode" os)


)
(defun plgetlst(ent)
   (mapcar 'cdr (vl-remove-if-not (FUNCTION (LAMBDA (x) (= 10 (car x)))) (entget ent)))
)


评分

参与人数 1明经币 -2 收起 理由
xyp1964 -2 看看都要收费?!

查看全部评分

 楼主| 发表于 2024-1-25 15:42 | 显示全部楼层
哈哈,随便看。
发表于 2024-4-3 14:54 | 显示全部楼层
是怎么用的大神
 楼主| 发表于 2024-4-8 08:52 | 显示全部楼层
菜鸟一个,ktj 就可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-12 03:28 , Processed in 0.144890 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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