<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>Комментарии на: Преобразование единиц измерения блоков в файле</title>
	<atom:link href="https://autolisp.ru/2010/02/19/block-units-change/feed/" rel="self" type="application/rss+xml" />
	<link>https://autolisp.ru/2010/02/19/block-units-change/</link>
	<description>LISP для AutoCAD</description>
	<lastBuildDate>Tue, 24 Feb 2026 16:11:05 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>От: ganjour</title>
		<link>https://autolisp.ru/2010/02/19/block-units-change/comment-page-1/#comment-89516</link>
		<dc:creator><![CDATA[ganjour]]></dc:creator>
		<pubDate>Sun, 05 Jul 2020 23:42:51 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=227#comment-89516</guid>
		<description><![CDATA[Спасибо. Код пригодился для нормализации блоков геодезических условных знаков.]]></description>
		<content:encoded><![CDATA[<p>Спасибо. Код пригодился для нормализации блоков геодезических условных знаков.</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2010/02/19/block-units-change/comment-page-1/#comment-1828</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Tue, 23 Feb 2010 21:25:26 +0000</pubDate>
		<guid isPermaLink="false">http://autolisp.ru/?p=227#comment-1828</guid>
		<description><![CDATA[В случае, если надо обрабатывать только выделяемые блоки, но с учетом вложенных, код становится чуть посложнее.
[cc lang=&quot;cadlisp&quot;](vl-load-com)

;; Вызов: (lispru-change-block-units-by-select-with-subblocks)
(defun lispru-change-block-units-by-select-with-subblocks
       (/ _dwgru-conv-pickset-to-list adoc selset blk_list name)

       ;&#124;
*    Преобразование единиц измерения блоков, включая вложенные блоки
&#124;;

  (defun fun_get-name (ent)
    ;; Получение имени блока
    (cond
      ((vlax-property-available-p ent &#039;effectivename)
       (vla-get-effectivename ent)
       )
      ((vlax-property-available-p ent &#039;name)
       (vla-get-name ent)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _dwgru-conv-pickset-to-list (value / tab item)
;;; http://forum.dwg.ru/showpost.php?p=188342&amp;postcount=21
    (repeat (setq tab  nil
                  item (sslength value)
                  ) ;_ end setq
      (setq tab (cons (ssname value (setq item (1- item))) tab))
      ) ;_ end repeat
    ) ;_ end defun

  ;; Поставим метку начала отмены. Ну так, на всякий случай
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  ;; Получаем набор блоков, обрабатывая нажатие Esc
  (if (= (type (setq selset (vl-catch-all-apply
                              (function
                                (lambda ()
                                  (ssget &#039;((0 . &quot;INSERT&quot;)))
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         &#039;pickset
         ) ;_ end of =
    (progn
      ;; Сформируем список имен блоков, исключая дубликаты
      ;; И не забываем про вложенные блоки
      (foreach ent
               ;; Преобразовываем набор в список элементов, исключая внешние ссылки.
               ((lambda (/ item lst)
                  (foreach item
                           (apply
                             (function append)
                             (mapcar
                               (function
                                 (lambda (x / res)
                                   ;; применяем эту функцию
                                   (setq res (list x))
                                   (vlax-for item x
                                     (if
                                       (wcmatch
                                         (strcase
                                           (vla-get-objectname item)
                                           ) ;_ end of strcase
                                         &quot;*BLOCK*&quot;
                                         ) ;_ end of wcmatch
                                        (setq res (cons item res))
                                        ) ;_ end of if
                                     ) ;_ end of vlax-for
                                   res
                                   ) ;_ end of lambda
                                 ) ;_ end of function
                               ;; begin : удаление внешних ссылок
                               (vl-remove-if
                                 (function
                                   (lambda (x)
                                     (equal
                                       (vla-get-isxref
                                         (vla-get-name x)
                                         ) ;_ end of vla-get-isxref
                                       :vlax-true
                                       ) ;_ end of equal
                                     ) ;_ end of lambda
                                   ) ;_ end of function
                                 (mapcar
                                   (function
                                     (lambda (x)
                                       (vla-item
                                         (vla-get-blocks adoc)
                                         (fun_get-name
                                           (vlax-ename-&gt;vla-object x)
                                           ) ;_ end of fun_get-name
                                         ) ;_ end of vla-item
                                       ) ;_ end of lambda
                                     ) ;_ end of function
                                   (_dwgru-conv-pickset-to-list selset)
                                   ) ;_ end of mapcar
                                 ) ;_ end of vl-remove-if
                               ;; end : удаление внешних ссылок
                               ) ;_ end of mapcar
                             ) ;_ end of apply
                    (if (not (member (fun_get-name item)) lst)
                      (setq lst (cons item lst))
                      ) ;_ end of if
                    ) ;_ end of foreach
                  lst
                  ) ;_ end of lambda
                ) ;_ end of foreach
        (if (not (member (setq name (fun_get-name ent)) blk_list))
          (setq blk_list (cons name blk_list))
          ) ;_ end of if
        ) ;_ end of foreach
      ;; Запускаем новый цикл
      (foreach blk_def
                       ;; Из списка имен получаем список указателей на описания блоков
                       (mapcar
                         (function
                           (lambda (x)
                             (vla-item (vla-get-blocks adoc) x)
                             ) ;_ end of lambda
                           ) ;_ end of function
                         blk_list
                         ) ;_ end of mapcar
        (vl-catch-all-apply
          (function
            (lambda ()
              (vla-put-units blk_def 0)
              ) ;_ end of lambda
            ) ;_ end of function
          ) ;_ end of vl-catch-all-apply
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  ;; Теперь метка конца отмены
  (vla-endundomark adoc)
  ;; Ну и &quot;тихий&quot; выход
  (princ)
  ) ;_ end of defun[/cc]
Код не комментирую (хотя по-хорошему надо бы, я там немного логику поменял). Надо будет - обращайтесь :)]]></description>
		<content:encoded><![CDATA[<p>В случае, если надо обрабатывать только выделяемые блоки, но с учетом вложенных, код становится чуть посложнее.<br />
[cc lang="cadlisp"](vl-load-com)</p>
<p>;; Вызов: (lispru-change-block-units-by-select-with-subblocks)<br />
(defun lispru-change-block-units-by-select-with-subblocks<br />
       (/ _dwgru-conv-pickset-to-list adoc selset blk_list name)</p>
<p>       ;|<br />
*    Преобразование единиц измерения блоков, включая вложенные блоки<br />
|;</p>
<p>  (defun fun_get-name (ent)<br />
    ;; Получение имени блока<br />
    (cond<br />
      ((vlax-property-available-p ent 'effectivename)<br />
       (vla-get-effectivename ent)<br />
       )<br />
      ((vlax-property-available-p ent 'name)<br />
       (vla-get-name ent)<br />
       )<br />
      ) ;_ end of cond<br />
    ) ;_ end of defun</p>
<p>  (defun _dwgru-conv-pickset-to-list (value / tab item)<br />
;;; <a href="http://forum.dwg.ru/showpost.php?p=188342&#038;postcount=21" rel="nofollow">http://forum.dwg.ru/showpost.php?p=188342&#038;postcount=21</a><br />
    (repeat (setq tab  nil<br />
                  item (sslength value)<br />
                  ) ;_ end setq<br />
      (setq tab (cons (ssname value (setq item (1- item))) tab))<br />
      ) ;_ end repeat<br />
    ) ;_ end defun</p>
<p>  ;; Поставим метку начала отмены. Ну так, на всякий случай<br />
  (vla-startundomark<br />
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))<br />
    ) ;_ end of vla-startundomark<br />
  ;; Получаем набор блоков, обрабатывая нажатие Esc<br />
  (if (= (type (setq selset (vl-catch-all-apply<br />
                              (function<br />
                                (lambda ()<br />
                                  (ssget '((0 . "INSERT")))<br />
                                  ) ;_ end of lambda<br />
                                ) ;_ end of function<br />
                              ) ;_ end of vl-catch-all-apply<br />
                     ) ;_ end of setq<br />
               ) ;_ end of type<br />
         'pickset<br />
         ) ;_ end of =<br />
    (progn<br />
      ;; Сформируем список имен блоков, исключая дубликаты<br />
      ;; И не забываем про вложенные блоки<br />
      (foreach ent<br />
               ;; Преобразовываем набор в список элементов, исключая внешние ссылки.<br />
               ((lambda (/ item lst)<br />
                  (foreach item<br />
                           (apply<br />
                             (function append)<br />
                             (mapcar<br />
                               (function<br />
                                 (lambda (x / res)<br />
                                   ;; применяем эту функцию<br />
                                   (setq res (list x))<br />
                                   (vlax-for item x<br />
                                     (if<br />
                                       (wcmatch<br />
                                         (strcase<br />
                                           (vla-get-objectname item)<br />
                                           ) ;_ end of strcase<br />
                                         "*BLOCK*"<br />
                                         ) ;_ end of wcmatch<br />
                                        (setq res (cons item res))<br />
                                        ) ;_ end of if<br />
                                     ) ;_ end of vlax-for<br />
                                   res<br />
                                   ) ;_ end of lambda<br />
                                 ) ;_ end of function<br />
                               ;; begin : удаление внешних ссылок<br />
                               (vl-remove-if<br />
                                 (function<br />
                                   (lambda (x)<br />
                                     (equal<br />
                                       (vla-get-isxref<br />
                                         (vla-get-name x)<br />
                                         ) ;_ end of vla-get-isxref<br />
                                       :vlax-true<br />
                                       ) ;_ end of equal<br />
                                     ) ;_ end of lambda<br />
                                   ) ;_ end of function<br />
                                 (mapcar<br />
                                   (function<br />
                                     (lambda (x)<br />
                                       (vla-item<br />
                                         (vla-get-blocks adoc)<br />
                                         (fun_get-name<br />
                                           (vlax-ename->vla-object x)<br />
                                           ) ;_ end of fun_get-name<br />
                                         ) ;_ end of vla-item<br />
                                       ) ;_ end of lambda<br />
                                     ) ;_ end of function<br />
                                   (_dwgru-conv-pickset-to-list selset)<br />
                                   ) ;_ end of mapcar<br />
                                 ) ;_ end of vl-remove-if<br />
                               ;; end : удаление внешних ссылок<br />
                               ) ;_ end of mapcar<br />
                             ) ;_ end of apply<br />
                    (if (not (member (fun_get-name item)) lst)<br />
                      (setq lst (cons item lst))<br />
                      ) ;_ end of if<br />
                    ) ;_ end of foreach<br />
                  lst<br />
                  ) ;_ end of lambda<br />
                ) ;_ end of foreach<br />
        (if (not (member (setq name (fun_get-name ent)) blk_list))<br />
          (setq blk_list (cons name blk_list))<br />
          ) ;_ end of if<br />
        ) ;_ end of foreach<br />
      ;; Запускаем новый цикл<br />
      (foreach blk_def<br />
                       ;; Из списка имен получаем список указателей на описания блоков<br />
                       (mapcar<br />
                         (function<br />
                           (lambda (x)<br />
                             (vla-item (vla-get-blocks adoc) x)<br />
                             ) ;_ end of lambda<br />
                           ) ;_ end of function<br />
                         blk_list<br />
                         ) ;_ end of mapcar<br />
        (vl-catch-all-apply<br />
          (function<br />
            (lambda ()<br />
              (vla-put-units blk_def 0)<br />
              ) ;_ end of lambda<br />
            ) ;_ end of function<br />
          ) ;_ end of vl-catch-all-apply<br />
        ) ;_ end of foreach<br />
      ) ;_ end of progn<br />
    ) ;_ end of if<br />
  ;; Теперь метка конца отмены<br />
  (vla-endundomark adoc)<br />
  ;; Ну и "тихий" выход<br />
  (princ)<br />
  ) ;_ end of defun[/cc]<br />
Код не комментирую (хотя по-хорошему надо бы, я там немного логику поменял). Надо будет - обращайтесь <img src="https://autolisp.ru/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
	</item>
</channel>
</rss>
