找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 736|回复: 0

[每日一码] HATCH相关处理的一些代码

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2021-2-2 09:20:03 | 显示全部楼层 |阅读模式

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

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

×
提供的工具:
1、HatchDelALL
  删除所有的填充实体

2、HatchDelSEL

  删除选择的填充实体

3、Hatch2LayALL

  所有填充移动到图层

4、Hatch2LaySEL

  移动选择的填充到图层




  1. (vl-load-com)
  2. (defun C:HatchDelALL () (work-whith-all-hatch nil))
  3. (defun C:HatchDelSEL ()
  4. (work-whith-selected-hatch
  5.    nil
  6.    (msg-yes-no "Select" "Delete associative polylines?")
  7.    )
  8. )
  9. (defun C:Hatch2LayALL (/ lay)
  10. ;;; ALL Hatch to Layer
  11. (if
  12.    (setq lay (mydcl "Select Layers"
  13.                     (vl-remove-if-not
  14.                       'snvalid
  15.                       (acad_strlsort (tablelist "Layer"))
  16.                     ) ;_ end of vl-remove-if-not
  17.              ) ;_ end of mydcl
  18.    ) ;_ end of setq
  19.     (progn
  20.       (work-whith-all-hatch (car lay))
  21.       (princ "\nDone!")
  22.       (princ)
  23.     ) ;_ end of progn
  24. ) ;_ end of if
  25. ) ;_ end of defun
  26. (defun C:Hatch2LaySEL (/ lay)
  27. ;;; Selected Hatch to Layer
  28. (if
  29.    (setq lay (mydcl "Select Layers"
  30.                     (vl-remove-if-not
  31.                       'snvalid
  32.                       (acad_strlsort (tablelist "Layer"))
  33.                     ) ;_ end of vl-remove-if-not
  34.              ) ;_ end of mydcl
  35.    ) ;_ end of setq
  36.     (progn
  37.       (work-whith-selected-hatch
  38.         (car lay)
  39.         (msg-yes-no "Select" "Move to layer associative polylines?")
  40.         )
  41.       (princ "\nDone!")
  42.       (princ)
  43.     ) ;_ end of progn
  44. ) ;_ end of if
  45. ) ;_ end of defun

  46. (defun work-whith-all-hatch
  47.       (what / adoc *error* poly _loc-delete-or-move-items)
  48. ;;; what - nil - delete
  49. ;;;      - string - layer to move
  50. (defun *error* (msg)
  51.    (setvar "MODEMACRO" "")
  52.    (princ msg)
  53.    (vla-regen aDOC acactiveviewport)
  54.    (bg:progress-clear)
  55.    (bg:layer-status-restore)
  56.    (vla-endundomark aDOC)
  57.    (princ)
  58. ) ;_ end of defun
  59. (defun _loc-delete-or-move-items (Blk)
  60.    (if (= (vla-get-isxref Blk) :vlax-false)
  61.      (progn
  62.        (if (> (vla-get-count Blk) 100)
  63.          (bg:progress-init
  64.            (strcat (vla-get-name Blk) " :")
  65.            (vla-get-count Blk)
  66.          ) ;_ end of bg:progress-init
  67.          (progn
  68.            (setvar "MODEMACRO" (vla-get-name Blk))
  69.          ) ;_ end of progn
  70.        ) ;_ end of if
  71.        (vlax-for Obj Blk
  72.          (if (= (vla-get-objectname Obj) "AcDbHatch")
  73.            (progn
  74.              (if (and what (eq (type what) 'STR))
  75.                (vl-catch-all-apply 'vla-put-layer (list Obj what))
  76.                (vl-catch-all-apply 'vla-delete (list Obj))
  77.              ) ;_ end of if
  78.            ) ;_ end of progn
  79.          ) ;_ end of if
  80.        ) ;_ end of vlax-for
  81.        (bg:progress-clear)
  82.      ) ;_ end of progn
  83.    ) ;_ end of if
  84. ) ;_ end of defun
  85. (setq aDOC (vla-get-activedocument (vlax-get-acad-object)))
  86. (vla-startundomark aDOC)
  87. (if (and (eq (type what) 'STR)
  88.           (not (tblobjname "LAYER" what))
  89.      ) ;_ end of and
  90.    (vla-add (vla-get-layers aDOC) what)
  91. ) ;_ end of if
  92. (bg:layer-status-save)
  93. (vlax-for Blk (vla-get-blocks aDOC)
  94.    (_loc-delete-or-move-items Blk)
  95. ) ;_ end of vlax-for
  96. (bg:layer-status-restore)
  97. (vla-endundomark aDOC)
  98. (vla-regen aDOC acactiveviewport)
  99. (princ)
  100. ) ;_ end of defun
  101. (defun work-whith-selected-hatch
  102.       (what assocpoly / adoc *error* ss lst poly _loc-delete-items)
  103. ;;; what - nil - delete
  104. ;;;      - string - layer to move
  105. ;;; assocpoly - t - move associated poly
  106. ;;;            nil - not
  107. (defun *error* (msg)
  108.    (setvar "MODEMACRO" "")
  109.    (princ msg)
  110.    (vla-regen aDOC acactiveviewport)
  111.    (bg:progress-clear)
  112.    (bg:layer-status-restore)
  113.    (vla-endundomark aDOC)
  114.    (princ)
  115. ) ;_ end of defun
  116. (defun _loc-delete-items (Blk)
  117.    (if (= (vla-get-isxref Blk) :vlax-false)
  118.      (progn
  119.        (setq count 0)
  120.        (if (> (vla-get-count Blk) 100)
  121.          (bg:progress-init
  122.            (strcat (vla-get-name Blk) " :")
  123.            (vla-get-count Blk)
  124.          ) ;_ end of bg:progress-init
  125.          (progn
  126.            (setvar "MODEMACRO" (vla-get-name Blk))
  127.          ) ;_ end of progn
  128.        ) ;_ end of if
  129.        (vlax-for Obj Blk
  130.          (if (= (vla-get-objectname Obj) "AcDbHatch")
  131.            (progn
  132. ;;; >>>>> Associated entities begin
  133.              (if assocpoly
  134.              (setq poly
  135.                         (mapcar 'cdr
  136.                                 (vl-remove-if-not
  137.                                   '(lambda (x) (= (car x) 330))
  138.                                   (entget (vlax-vla-object->ename Obj))
  139.                                 ) ;_ end of vl-remove-if-not
  140.                         ) ;_ end of mapcar
  141.                    poly (vl-remove-if-not
  142.                           '(lambda (x)
  143.                              (wcmatch (cdr (assoc 0 (entget x)))
  144.                                       "*LINE,CIRCLE,ELLIPSE"
  145.                              ) ;_ end of wcmatch
  146.                            ) ;_ end of lambda
  147.                           poly
  148.                         ) ;_ end of vl-remove-if-not
  149.              ) ;_ end of setq
  150.              (setq poly nil)  
  151.                )
  152. ;;; <<<<<< Associated entities end
  153.              (if (and what (eq (type what) 'STR))
  154.                (mapcar
  155.                  '(lambda (x)
  156.                     (vl-catch-all-apply 'vla-put-layer (list x what))
  157.                   ) ;_ end of lambda
  158.                  (cons Obj (if poly (mapcar 'vlax-ename->vla-object poly) nil))
  159.                ) ;_ end of mapcar
  160.                (mapcar '(lambda (x)
  161.                           (vl-catch-all-apply 'vla-delete (list x))
  162.                         ) ;_ end of lambda
  163.                        (cons Obj (if poly (mapcar 'vlax-ename->vla-object poly) nil))
  164.                ) ;_ end of mapcar
  165.              ) ;_ end of if
  166.            ) ;_ end of progn
  167.          ) ;_ end of if
  168.        ) ;_ end of vlax-for
  169.        (bg:progress-clear)
  170.      ) ;_ end of progn
  171.    ) ;_ end of if
  172. ) ;_ end of defun
  173. (setq aDOC (vla-get-activedocument (vlax-get-acad-object)))
  174. (vla-startundomark aDOC)
  175. (if (and (eq (type what) 'STR)
  176.           (not (tblobjname "LAYER" what))
  177.      ) ;_ end of and
  178.    (vla-add (vla-get-layers aDOC) what)
  179. ) ;_ end of if
  180. (if (and
  181.        (setq ss (ssget "_:L" '((0 . "HATCH,INSERT"))))
  182.        (setq lst (mapcar 'vlax-ename->vla-object (pickset-to-list ss)))
  183.      ) ;_ end of and
  184.    (progn
  185.      (bg:layer-status-save)
  186.      (foreach obj lst
  187.        (cond
  188.          ((= (vla-get-objectname Obj) "AcDbHatch")
  189.          (if  assocpoly
  190.           (setq poly
  191.                      (mapcar 'cdr
  192.                              (vl-remove-if-not
  193.                                '(lambda (x) (= (car x) 330))
  194.                                (entget (vlax-vla-object->ename Obj))
  195.                              ) ;_ end of vl-remove-if-not
  196.                      ) ;_ end of mapcar
  197.                 poly (vl-remove-if-not
  198.                        '(lambda (x)
  199.                           (wcmatch (cdr (assoc 0 (entget x)))
  200.                                    "*LINE,CIRCLE,ELLIPSE"
  201.                           ) ;_ end of wcmatch
  202.                         ) ;_ end of lambda
  203.                        poly
  204.                      ) ;_ end of vl-remove-if-not
  205.           ) ;_ end of setq
  206.           (setq poly nil)
  207.           )
  208.           (if (and what (eq (type what) 'STR))
  209.             (mapcar '(lambda (x)
  210.                        (vl-catch-all-apply 'vla-put-layer (list x what))
  211.                      ) ;_ end of lambda
  212.                      (cons Obj (if poly (mapcar 'vlax-ename->vla-object poly) nil))
  213.             ) ;_ end of mapcar
  214.             (mapcar
  215.               '(lambda (x) (vl-catch-all-apply 'vla-delete (list x)))
  216.               (cons Obj (mapcar 'vlax-ename->vla-object poly))
  217.             ) ;_ end of mapcar
  218.           )
  219.          )
  220.          ((and
  221.             (= (vla-get-objectname Obj) "AcDbBlockReference")
  222.             (= (vla-get-isxref
  223.                  (setq Blk (vla-item (vla-get-blocks aDOC)
  224.                                      (vla-get-effectivename Obj)
  225.                            ) ;_ end of vla-item
  226.                  ) ;_ end of setq
  227.                ) ;_ end of vla-get-IsXref
  228.                :vlax-false
  229.             ) ;_ end of =
  230.           ) ;_ end of and
  231.           (_loc-delete-items Blk)
  232.          )
  233.          (t nil)
  234.        ) ;_ end of cond
  235.      ) ;_ end of foreach
  236.      (bg:layer-status-restore)
  237.    ) ;_ end of progn
  238. ) ;_ end of if
  239. (vla-endundomark aDOC)
  240. (vla-regen aDOC acactiveviewport)
  241. (princ)
  242. ) ;_ end of defun
  243. (defun bg:layer-status-restore ()
  244. (foreach item *BG_LAYER_LST*
  245.    (if (not (vlax-erased-p (car item)))
  246.      (vl-catch-all-apply
  247.        '(lambda ()
  248.           (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
  249.           (vla-put-freeze
  250.             (car item)
  251.             (cdr (assoc "freeze" (cdr item)))
  252.           ) ;_ end of vla-put-freeze
  253.         ) ;_ end of lambda
  254.      ) ;_ end of vl-catch-all-apply
  255.    ) ;_ end of if
  256. ) ;_ end of foreach
  257. (setq *BG_LAYER_LST* nil)
  258. ) ;_ end of defun

  259. (defun bg:layer-status-save ()
  260. (setq *BG_LAYER_LST* nil)
  261. (vlax-for item (vla-get-layers
  262.                   (vla-get-activedocument (vlax-get-acad-object))
  263.                 ) ;_ end of vla-get-layers
  264.    (setq *BG_LAYER_LST*
  265.           (cons (list item
  266.                       (cons "freeze" (vla-get-freeze item))
  267.                       (cons "lock" (vla-get-lock item))
  268.                 ) ;_ end of cons
  269.                 *BG_LAYER_LST*
  270.           ) ;_ end of cons
  271.    ) ;_ end of setq
  272.    (vla-put-lock item :vlax-false)
  273.    (if (= (vla-get-freeze item) :vlax-true)
  274.      (vl-catch-all-apply
  275.        '(lambda () (vla-put-freeze item :vlax-false))
  276.      ) ;_ end of vl-catch-all-apply
  277.    ) ;_ end of if
  278. ) ;_ end of vlax-for
  279. ) ;_ end of defun
  280. (defun bg:progress-init (msg maxlen)
  281. ;;; msg - niiauaiea eee ionoay no?iea
  282. ;;; maxlen - iaeneiaeuiia eiee?anoai
  283. (setq *BG:PROGRESS:OM* (getvar "MODEMACRO"))
  284. (setq *BG:PROGRESS:MSG* (vl-princ-to-string msg))
  285. (setq *BG:PROGRESS:MAXLEN* maxlen)
  286. (setq *BG:PROGRESS:LPS* '-1)
  287. (princ)
  288. ) ;_ end of defun
  289. (defun bg:progress (currvalue / persent str1 count)
  290. (if *BG:PROGRESS:MAXLEN*
  291.    (progn
  292.      (setq persent (fix (/ currvalue 0.01 *BG:PROGRESS:MAXLEN*)))
  293. ;;;Ea?aua 5 %
  294.      (setq count (fix (* persent 0.2)))
  295.      (setq str1 "")
  296.      (if (/= count *BG:PROGRESS:LPS*)
  297.        (progn
  298.          ;;(setq str1 "")
  299.          (repeat persent (setq str1 (strcat str1 "|")))
  300.        ) ;_ end of progn
  301.      ) ;_ end of if
  302. ;;; currvalue - oaeouaa cia?aiea
  303.      (setvar "MODEMACRO"
  304.              (strcat (vl-princ-to-string *BG:PROGRESS:MSG*)
  305.                      " "
  306.                      (itoa persent)
  307.                      " % "
  308.                      str1
  309.              ) ;_ end of strcat
  310.      ) ;_ end of setvar
  311.      (setq *BG:PROGRESS:LPS* persent)
  312.    ) ;_ end of progn
  313. ) ;_ end of if
  314. ) ;_ end of defun

  315. (defun bg:progress-clear ()
  316. (setq *BG:PROGRESS:MSG* nil)
  317. (setq *BG:PROGRESS:MAXLEN* nil)
  318. (setq *BG:PROGRESS:LPS* nil)
  319. (setvar "MODEMACRO" (vl-princ-to-string *BG:PROGRESS:OM*))
  320. ;;;(vla-regen (vla-get-activedocument (vlax-get-acad-object)) acactiveviewport)
  321. (princ)
  322. ) ;_ end of defun
  323. (defun mydcl (zagl info-list / fl ret dcl_id msg)
  324. (vl-load-com)
  325. (if (null zagl)
  326.    (setq zagl "Select")
  327. ) ;_ end if
  328. (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
  329. (setq ret (open fl "w"))
  330. (mapcar '(lambda (x) (write-line x ret))
  331.          (list "mip_msg : dialog { "
  332.                (strcat "label=\"" zagl "\";")
  333.                " :list_box {"
  334.                "alignment=top ;"
  335.                "multiple_select = true ;"
  336.                "width=31 ;"
  337.                (if (> (length info-list) 26)
  338.                  "height= 26 ;"
  339.                  (strcat "height= " (itoa (+ 3 (length info-list))) ";")
  340.                ) ;_ end of if
  341.                "is_tab_stop = false ;"
  342.                "key = \"info\";}"
  343.                "ok_cancel;}"
  344.          ) ;_ end of list
  345. ) ;_ end of mapcar
  346. (setq ret (close ret))
  347. (if (and (null (minusp (setq dcl_id (load_dialog fl))))
  348.           (new_dialog "mip_msg" dcl_id)
  349.      ) ;_ end and
  350.    (progn (start_list "info")
  351.           (mapcar 'add_list info-list)
  352.           (end_list)
  353.           (set_tile "info" "0")
  354.           (setq ret "0")
  355.           (action_tile "info" "(setq ret $value)")
  356.           (action_tile "cancel" "(done_dialog 0)")
  357.           (action_tile "accept" " (done_dialog 1)")
  358.           (if (zerop (start_dialog))
  359.             (setq ret nil)
  360.             (setq
  361.               ret (mapcar (function (lambda (num) (nth num info-list)))
  362.                           (read (strcat "(" ret ")"))
  363.                   ) ;_ end mapcar
  364.             ) ;_ end setq
  365.           ) ;_ end if
  366.           (unload_dialog dcl_id)
  367.    ) ;_ end of progn
  368. ) ;_ end of if
  369. (vl-file-delete fl)
  370. ret
  371. ) ;_ end of defun
  372. (defun tablelist (s / d r)
  373. (while (setq d (tblnext s (null d)))
  374.    (setq r (cons (cdr (assoc 2 d)) r))
  375. ) ;_while
  376. ) ;_defun
  377. (defun pickset-to-list (value / lst item)
  378. (repeat (setq item (sslength value)) ;_ end setq
  379.    (setq lst (cons (ssname value (setq item (1- item))) lst))
  380. ) ;_ end repeat
  381. lst
  382. ) ;_ end of defun

  383. (defun msg-yes-no ( title message / WScript ret)
  384. (setq WScript (vlax-get-or-create-object "WScript.Shell"))
  385. (setq ret (vlax-invoke-method WScript "Popup" message "0" title (+ 4 48)))
  386. (if WScript (vlax-release-object WScript))
  387. (= ret 6)  
  388. )
  389. (princ
  390. "\nType HatchDelALL, HatchDelSEL, Hatch2LayALL, Hatch2LaySel in command line"
  391. ) ;_ end of princ
  392. (princ)


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 08:26 , Processed in 0.358839 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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