Тема: Как удалить или слить стили текста

Начал создавать свой стандарт для маленькой фирмы. Имеются чертежы с кучей разных текстовых стилей... Нужно все стили превратить в 1 стиль. Проблемма возникла что не удаляются стили которые могут находится в блоках и т.д. Какие имеются идеи?

Re: Как удалить или слить стили текста

> yuramus
Быстрый выбор (_Qselect), выбрать все тексты Ctrl+1 поменять Стиль на Ваш СТП-шный.
И будет Вам счастье.

Re: Как удалить или слить стили текста

Это не работает в блоках. Нужно найти блок в котором используются ненужные стили и н нем поменять. Что-то подобное есть в экспресс-тулсах но для слоев удаления обьединение

Re: Как удалить или слить стили текста

Вот программулька (автора не помню), изменяющая стиль текста в блоках на заданный:

(defun tbs (style / blCol actDoc)
  (if
   (setq blCol(vla-get-Blocks
  (setq actDoc(vla-get-ActiveDocument
      (vlax-get-acad-object)))))
   (progn
     (vlax-for curBl blCol
       (vlax-for Entity curBl
   (if
     (=(vla-get-ObjectName Entity)"AcDbText")
     (progn
       (if
         (not
           (vl-catch-all-error-p
             (vl-catch-all-apply
         'vla-put-stylename (list Entity style))))
         T
         ); end if
       ); end progn
     ); end if
   ); end vlax-for
       ); end vlax-for
     (vla-Regen actDoc acAllViewports)
     ); end progn
   ); end if
  (princ)
  ); end of Text_Inside_Change

Пример запуска из командной строки: (tbs "Standard")

Re: Как удалить или слить стили текста

ИМХО такой вариант будет более верным:

(defun c:setstyle (/                 *error*           adoc
                   loc:restore-layers                  lst:layers
                   style             _kpblc-conv-vla-to-list
                   lst:attr
                   )
  (defun *error* (msg)
    (loc:restore-layers)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun
  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((listp value)
       (mapcar '_kpblc-conv-vla-to-list value)
       )
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (_kpblc-conv-vla-to-list (vlax-safearray->list value))
         ) ;_ end of if
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun
  (defun loc:restore-layers ()
    (foreach item lst:layers
      (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
      (vl-catch-all-apply
        '(lambda ()
           (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
           ) ;_ end of lambda
        ) ;_ end of vl-catch-all-apply
      ) ;_ end of foreach
    ) ;_ end of defun
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (vlax-for item (vla-get-layers adoc)
    (setq lst:layers
           (cons (list item
                       (cons "lock" (vla-get-lock item))
                       (cons "freeze" (vla-get-freeze item))
                       ) ;_ end of list
                 lst:layers
                 ) ;_ end of cons
          ) ;_ end of setq
    (vla-put-lock item :vlax-false)
    (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false)))
    ) ;_ end of vlax-for
  (setq style (vla-get-name (vla-get-activetextstyle adoc)))
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (equal (vla-get-isxref blk_def) :vlax-false)
      (vlax-for ent blk_def
        (cond
          ((wcmatch (strcase (vla-get-objectname ent)) "*TEXT,*DIMEN*")
           (vl-catch-all-apply '(lambda () (vla-put-textstyle ent style)))
           )
          ((and
             (= (vla-get-objectname ent) "AcDbBlockReference")
             (setq lst:attr (apply
                              'append
                              (mapcar
                                '_kpblc-conv-vla-to-list
                                (list (vla-getattributes ent)
                                      (vla-getconstantattributes ent)
                                      ) ;_ end of list
                                ) ;_ end of mapcar
                              ) ;_ end of apply
                   ) ;_ end of setq
             ) ;_ end of and
           (foreach item lst:attr
             (vl-catch-all-apply '(lambda () (vla-put-textstyle item style)))
             ) ;_ end of foreach
           )
          ) ;_ end of cond
        ) ;_ end of vlax-for
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-regen adoc acallviewports)
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun

Обрабатывает одно- и многострочные тексты, размеры и атрибуты блоков. Пропускает таблицы и выноски.

Re: Как удалить или слить стили текста

> Нюк

> Кулик Алексей aka kpblc
Спасибо буду пробовать.
Если бы еще и таблицы было бы вообще счастье

Re: Как удалить или слить стили текста

> Кулик Алексей aka kpblc
А как его запускать?
я скопировал в блокнот, сохранил с расширением lsp, запускаю автокад, подгружаю этот файл, в командной строке набираю setstyle и ни чего не происходит. Шрифты и стиль не поменялся, может я что то не так делаю?

Re: Как удалить или слить стили текста

> Evgeniy
Проблема еще может быть в том, что стили текста хранятся в самом коде mtext. Тогда нужно очищать от настроек стиля (имя шрифта и прочее) внутри самого текста

Re: Как удалить или слить стили текста

Ихтиандр пишет:

Тогда нужно очищать от настроек стиля (имя шрифта и прочее) внутри самого текста

Это (спасибо все тому же премногоуважаемому крысу) здесь:
https://www.caduser.ru/forum/topic20992.html