乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 6|回复: 1

[编程交流] [Lisp]细节长度计数器

[复制链接]

46

主题

161

帖子

104

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
242
发表于 2022-7-5 15:40:02 | 显示全部楼层 |阅读模式
也许有人会认为这是一个有用的工具-只需检查gif即可。
 
https://media.giphy.com/media/l0HU8OGO0xSIui0lq/giphy.gif
 
  1. ;; ============================================== ;;
  2. ;;                                                ;;
  3. ;;   @@@@@ @ @@@@ @    @@@@      @@@   @@  @  @   ;;
  4. ;;      @  @ @    @    @        @   @ @  @ @ @    ;;
  5. ;;     @   @ @@@@ @    @@@@     @   @   @  @@     ;;
  6. ;;    @    @ @    @    @        @   @  @   @ @    ;;
  7. ;;   @@@@@ @ @@@@ @@@@ @@@@ @@@  @@@  @@@@ @  @   ;;
  8. ;;                                                ;;
  9. ;; ============================================== ;;
  10. ;; 22:50 2018-01-11 © ziele_o2k                   ;;
  11. ;; ============================================== ;;
  12. ;; some code copied from Lee Mac's Block Counter  ;;
  13. ;; http://www.lee-mac.com/blockcounter.html       ;;
  14. ;; ============================================== ;;
  15. (defun c:detsum ( /  pz:sub _pt _ss _enx _k _v _res _tab _row _hgt _wth _tg1 _tg2 _tg3)
  16. (defun pz:sub ( @key @val @lst / _itm )
  17.    (if (setq _itm (assoc @key @lst))
  18.      (subst (cons @key (+ @val (cdr _itm))) _itm @lst)
  19.      (cons  (cons @key @val) @lst)
  20.    )
  21. )
  22. (if
  23.    (and
  24.      (setq _ss (ssget '((0 . "DIM*"))))
  25.      (setq _pt (cd:USR_GetPoint "\nTable insertion point: " 1 nil))
  26.    )
  27.    (progn
  28.      (foreach %1 (cd:SSX_Convert _ss 0)
  29.        (setq
  30.          _enx  (entget %1)
  31.          _k    (cdr(assoc  1 _enx))
  32.          _v    (cdr(assoc 42 _enx))
  33.          _res  (pz:sub _k _v _res)
  34.        )
  35.      )
  36.      (setq _res
  37.        (vl-sort
  38.          (mapcar
  39.           '(lambda (%)
  40.              (list (car %) (cd:CON_Real2Str (cdr %) 2 1))
  41.            )
  42.            _res
  43.          )
  44.          '(eval (list 'lambda '( a b ) (list '< '(strcase (car a)) '(strcase (car b)))))
  45.        )
  46.      )
  47.      (setq _hgt
  48.        (vla-gettextheight
  49.          (vla-item
  50.            (vla-item (vla-get-dictionaries (cd:ACX_ADoc)) "acad_tablestyle")
  51.            (getvar 'ctablestyle)
  52.          )
  53.          acdatarow
  54.        )
  55.        _tg1 "Detail sum"
  56.        _tg2 "Detail name"
  57.        _tg3 "Sum"
  58.      )
  59.      (setq _tab
  60.        (cd:ACX_AddTable
  61.          (cd:ACX_ASpace) _pt
  62.          (+ (length _res) 2)
  63.          2
  64.          (* 2 _hgt)
  65.          (* _hgt
  66.            (max
  67.              (apply 'max
  68.                (mapcar 'strlen
  69.                  (append
  70.                    (list _tg2)
  71.                    (list _tg3)
  72.                    (apply 'append _res)
  73.                  )
  74.                )
  75.              )
  76.              (/ (strlen _tg1) 2)
  77.            )
  78.          )
  79.        )
  80.      )
  81.      (vla-setText _tab 0 0 _tg1)
  82.      (vla-setText _tab 1 0 _tg2)
  83.      (vla-setText _tab 1 1 _tg3)
  84.      (setq _row 2)
  85.      (foreach %1 _res
  86.        (vla-setText _tab _row 0 (car %1))
  87.        (vla-setText _tab _row 1 (cadr %1))
  88.        (setq _row (1+ _row))
  89.      )
  90.    )
  91. )
  92. (princ)
  93. )
  94. ;; ================================================================== ;;
  95. ;; ================================================================== ;;
  96. ;; ================================================================== ;;
  97. ;; ================================================================== ;;
  98. ;; Subfunctions form CADPL-Pack-v1.lsp  http://forum.cad.pl           ;;
  99. ;; ================================================================== ;;
  100. ;; ================================================================== ;;
  101. ;; ================================================================== ;;
  102. ;; ================================================================== ;;
  103. ; =========================================================================================== ;
  104. ; Pobiera punkt od uzytkownika / Gets point from user                                         ;
  105. ;  Msg [sTR]      - komunikat do wyswietlenia / message to display                            ;
  106. ;  Bit [iNT/nil]  - bit sterujacy (patrz initget) / control bit (see initget)                 ;
  107. ;  Pt  [list/nil] - punkt bazowy / base point                                                 ;
  108. ; ------------------------------------------------------------------------------------------- ;
  109. ; (cd:USR_GetPoint "\nWskaz punkt: " 1 nil)                                                   ;
  110. ; (cd:USR_GetPoint "\nWskaz drugi punkt: " 32 '(5 10 0))                                      ;
  111. ; =========================================================================================== ;
  112. (defun cd:USR_GetPoint (Msg Bit Pt / res)
  113. (if Bit (initget Bit))
  114. (if
  115.    (listp
  116.      (setq res
  117.        (vl-catch-all-apply
  118.          (quote getpoint)
  119.          (if Pt
  120.            (list Pt Msg)
  121.            (list Msg)
  122.          )
  123.        )
  124.      )
  125.    )
  126.    res
  127. )
  128. )
  129. ; =========================================================================================== ;
  130. ; Zmienia PICKSET na liste obiektow / Convert PICKSET to list of objects                      ;
  131. ;  Ss   [PICKSET] - zbior wskazan / selection sets                                            ;
  132. ;  Mode [iNT]     - typ zwracanych obiektow / type of returned objects                        ;
  133. ;                   0 = ENAME, 1 = VLA-OBJECT, 2 = SAFEARRAY                                  ;
  134. ; ------------------------------------------------------------------------------------------- ;
  135. ; (cd:SSX_Convert (ssget) 1)                                                                  ;
  136. ; =========================================================================================== ;
  137. (defun cd:SSX_Convert (Ss Mode / n res)
  138. (if
  139.    (and
  140.      (member Mode (list 0 1 2))
  141.      (not
  142.        (minusp
  143.          (setq n
  144.            (if Ss (1- (sslength Ss)) -1)
  145.          )
  146.        )
  147.      )
  148.    )
  149.    (progn
  150.      (while (>= n 0)
  151.        (setq res
  152.          (cons
  153.            (if (zerop Mode)
  154.              (ssname Ss n)
  155.              (vlax-ename->vla-object (ssname Ss n))
  156.            )
  157.            res
  158.          )
  159.              n (1- n)
  160.        )
  161.      )
  162.      (if (= Mode 2)
  163.        (vlax-safearray-fill
  164.          (vlax-make-safearray 9
  165.            (cons 0 (1- (length res)))
  166.          ) res
  167.        )
  168.        res
  169.      )
  170.    )
  171. )
  172. )
  173. ; =========================================================================================== ;
  174. ; Konwertuje liczbe na lancuch tekstowy / Converts number to a string                         ;
  175. ;  Val  [REAL/INT] - liczba do konwersji / conversion number                                  ;
  176. ;  Unit [iNT/nil]  - jednostki wyjsciowe / output unit                                        ;
  177. ;                    nil = domyslne / default | (getvar "LUNITS")                             ;
  178. ;                    1   = naukowe / scientific                                               ;
  179. ;                    2   = dziesietne / decimal                                               ;
  180. ;                    3   = inzynierskie / engineering                                         ;
  181. ;                    4   = architektoniczne / architectural                                   ;
  182. ;                    5   = ulamkowe / fractional                                              ;
  183. ;  Prec [iNT/nil]  - INT = liczba miejsc po przecinku / number of decimal places              ;
  184. ;                    nil = domyslna / default | (getvar "LUPREC")                             ;
  185. ; ------------------------------------------------------------------------------------------- ;
  186. ; (cd:CON_Real2Str 12 2 4)                                                                    ;
  187. ; =========================================================================================== ;
  188. (defun cd:CON_Real2Str (Val Unit Prec / DMZ res)
  189. (setq DMZ (getvar "DIMZIN"))
  190. (setvar "DIMZIN"
  191.    (if (not (member (getvar "LUNITS") (list 4 5)))
  192.      (logand DMZ (~ ) 0
  193.    )
  194. )
  195. (setq res
  196.    (rtos
  197.      Val
  198.      (if (and Unit (member Unit (list 1 2 3 4 5)))
  199.        Unit
  200.        (getvar "LUNITS")
  201.      )
  202.      (if Prec Prec (getvar "LUPREC"))
  203.    )
  204. )
  205. (setvar "DIMZIN" DMZ)
  206. res
  207. )
  208. ; =========================================================================================== ;
  209. ; Aktywny dokument / Active document                                                          ;
  210. ; =========================================================================================== ;
  211. (defun cd:ACX_ADoc ()
  212. (or
  213.    *cd-ActiveDocument*
  214.    (setq *cd-ActiveDocument*
  215.      (vla-get-ActiveDocument (vlax-get-acad-object))
  216.    )
  217. )
  218. *cd-ActiveDocument*
  219. )
  220. ; =========================================================================================== ;
  221. ; Aktywny obszar / Active space                                                               ;
  222. ; =========================================================================================== ;
  223. (defun cd:ACX_ASpace ()
  224. (if (= (getvar "CVPORT") 1)
  225.    (vla-item (cd:ACX_Blocks) "*Paper_Space")
  226.    (cd:ACX_Model)
  227. )
  228. )
  229. ; =========================================================================================== ;
  230. ; Kolekcja Blocks / Blocks collection                                                         ;
  231. ; =========================================================================================== ;
  232. (defun cd:ACX_Blocks ()
  233. (or
  234.    *cd-Blocks*
  235.    (setq *cd-Blocks* (vla-get-blocks (cd:ACX_ADoc)))
  236. )
  237. *cd-Blocks*
  238. )
  239. ; =========================================================================================== ;
  240. ; Tworzy obiekt typu ACAD_TABLE / Creates a ACAD_TABLE object                                 ;
  241. ;  Space [VLA-Object]  - kolekcja / collection | Model/Paper + Block Object                   ;
  242. ;  Pb    [list] - punkt bazowy tabeli / table base point                                      ;
  243. ;  Rows  [iNT]  - liczba wierszy / number of rows                                             ;
  244. ;  Cols  [iNT]  - liczba kolumn / number of columns                                           ;
  245. ;  RowH  [iNT]  - wysokosc wierszy / rows height                                              ;
  246. ;  ColH  [iNT]  - szerokosc kolumn / columns height                                           ;
  247. ; ------------------------------------------------------------------------------------------- ;
  248. ; (cd:ACX_AddTable (cd:ACX_ASpace) (getpoint) 5 5 10 30)                                      ;
  249. ; =========================================================================================== ;
  250. (defun cd:ACX_AddTable (Space Pb Rows Cols RowH ColH)
  251. (vla-AddTable
  252.     Space
  253.     (vlax-3d-point (trans Pb 1 0))
  254.     Rows
  255.     Cols
  256.     RowH
  257.     ColH
  258. )
  259. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:23:25 | 显示全部楼层
这很有趣,但是你在哪里使用这种尺寸标注?
这种类型会更清楚吗

                               
登录/注册后可看大图
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:07 , Processed in 0.447407 second(s), 59 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表