Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как изменить размер текста во всех блоках с одинаковым имене

Как изменить размер текста во всех блоках с одинаковым имене

Ответ
Поиск в этой теме
Непрочитано 04.10.2006, 17:30
Как изменить размер текста во всех блоках с одинаковым имене
red
 
Регистрация: 30.04.2004
Сообщений: 9

на чертеже много блоков (рисунок+надпись к нему при помощи атрибутов).... я хочу размер текста увеличить во всех этих блоках!
КААК?
В каждом блоке отдельно менять? нельзя во всех сразу?.....блок один и тот же, только значения разные...
Если при помощи редактирования блока, то он меняет только размер текста атрибута, а его значения нет! Есть способ?
Просмотров: 56338
 
Непрочитано 31.01.2020, 10:49
2 | 1 #61
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989


Для выбираемых блоков

Код:
[Выделить все]
 (defun c:ths (/ i bn_list th i bd el en)
  (setq i 0)
  (setq ss (ssget '((0 . "INSERT"))))
  (setq th (getreal "Укажите высоту текста: "))
  (while (< i (sslength ss))
    (setq bn (cdr (assoc 2 (entget (ssname ss i)))))
    (if (not (member bn bn_list))
      (setq bn_list (append bn_list (list bn)))
    ) ; end if
    (setq i (1+ i))
  ) ;_ end of while
  (setq i 0)
  (while (< i (length bn_list))
    (if (setq bd (tblobjname "block" (nth i bn_list)))
      (while (setq bd (entnext bd))
        (setq el (entget bd))
        (setq en (cdr (assoc 0 el)))
        (if (= en "TEXT")
          (progn
            (setq el (subst (cons 40 th) (assoc 40 el) el))
            (entmod el)
          ) ; end progn
        ) ; end if
      ) ; end while
    ) ; end if
    (setq i (1+ i))
  ) ; end while
  (command "_regenall")
  (princ)
)
Nike вне форума  
 
Непрочитано 04.02.2020, 11:07
#62
merkur1y

дороги
 
Регистрация: 12.07.2019
СПб
Сообщений: 134


Nike, спасибо, идеально =)
merkur1y вне форума  
 
Непрочитано 24.08.2021, 17:20
#63
Mr. Darcy


 
Регистрация: 24.08.2021
Сообщений: 23


Если в чертеже все блоки уникальные (повторяющихся нет), неужели придётся вручную атрибуты перебивать? Или есть способ?
Мне нужно изменить наклон текста в атрибутах (приложенные к теме лиспы редактируют только высоту, но не наклон).

Последний раз редактировалось Mr. Darcy, 24.08.2021 в 17:36.
Mr. Darcy вне форума  
 
Непрочитано 24.08.2021, 21:07
#64
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


А если поменять настройки текстового стиля?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.08.2021, 00:04
1 | #65
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Цитата:
Сообщение от Mr. Darcy Посмотреть сообщение
Мне нужно изменить наклон текста в атрибутах
Уточните, Вам шашечки или ехать надо изменить угол наклона в определениях атрибутов внутри блоков или в уже вставленных экземплярах?

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А если поменять настройки текстового стиля?
Если по каким-то причинам настройки каждого атрибута выставлены в свойствах самого атрибута - не поможет.
Только дустом лиспом вроде такого (для определений атрибутов):

Код:
[Выделить все]
 (defun C:ob_at (oblique / 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)"AcDbAttributeDefinition")
     (progn
       (if
         (not
           (vl-catch-all-error-p
             (vl-catch-all-apply
         'vla-put-obliqueangle (list Entity (/ (* PI oblique) 180)  ))))
         T
         ); end if
       ); end progn
     ); end if
   ); end vlax-for
       ); end vlax-for
     (vla-Regen actDoc acAllViewports)
     ); end progn
   ); end if
  (princ)
  ); end
Правда, если разных блоков действительно очень много,можно замахаться обновлять атрибуты для каждого. Может, кто-то уже написал лисп для массового обновления атрибутов
kp+ вне форума  
 
Непрочитано 25.08.2021, 08:47
1 | #66
Oleg T


 
Регистрация: 27.12.2011
Сообщений: 1,458


Цитата:
Сообщение от kp+ Посмотреть сообщение
Может, кто-то уже написал лисп для массового обновления атрибутов
Где-то в 2018 написал лисп для себя и своей конторы, но под Брикскад.
Очень много чего меняет в свойствах текстов и атрибутов (вплоть до координат), работает с любым количеством атрибутов в любых блоках. Мы пользуемся постоянно.
Под Автокад нужно что-то перерабатывать (сейчас проверил, изначально не срабатывает функция завершения диалоговых окон. Брал её из интернета, сам не программист).
Если кто-то возьмется причесать, выложу. Думаю, и для DOWNLOAD может пригодиться.
ЗЫ
Само собой, наклон, например, меняется только в однострочных текстах/атрибутах (для многострочных это задается стилем). С многострочными гораздо сложнее, там все основное определяется стилем и принудительным форматированием.
Миниатюры
Нажмите на изображение для увеличения
Название: Сохраненное изображение 2021-8-25_8-35-49.935.jpg
Просмотров: 69
Размер:	77.8 Кб
ID:	240043  

Последний раз редактировалось Oleg T, 25.08.2021 в 15:43.
Oleg T вне форума  
 
Непрочитано 25.08.2021, 09:51
1 | 1 #67
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


kp+, имхо,
если передавать параметр oblique в команду, то наверное лучше для этого определить функцию
Код:
[Выделить все]
 (defun ob_at...
синтаксис с 9 по 20 я бы заменил на
Код:
[Выделить все]
 (if
	( = (vla-get-ObjectName Entity) "AcDbAttributeDefinition")
    	(vl-catch-all-apply 'vla-put-obliqueangle (list Entity (/ (* PI oblique) 180)))
)
koMon вне форума  
 
Непрочитано 25.08.2021, 10:13
1 | 1 #68
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Раньше так и было, для форума решил переделать в команду, а нормальный запрос угла наклона забыл вставить.
Вечером поправлю, сейчас нет возможности.
И заодно попробую прикрутить обновление атрибутов по всем блокам.
Насчет синтаксиса - исходный лисп взят где-то на просторах этого или другого форума, мои переделки минимальны. А со всякими ловушками ошибок я не дружу, главное, чтоб хоть как-то работало, поэтому оценить красоту и лаконичность исходного и предлагаемого кода не берусь.
kp+ вне форума  
 
Непрочитано 25.08.2021, 11:36
1 | 1 #69
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Работать неохота. Как вариант:
Код:
[Выделить все]
 (defun c:ob-at2 (/ _kpblc-conv-vla-to-list oblique adoc layer_status)
  (defun _kpblc-conv-vla-to-list (value / res)
    (cond ((listp value) (mapcar (function _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
          )
          ((and (= (type value) 'vla-object) (vlax-property-available-p value 'count))
           (vlax-for sub value (setq res (cons sub res)))
          )
          (t value)
    ) ;_ end of cond
  ) ;_ end of defun
  (if (= (type (setq oblique (vl-catch-all-apply (function (lambda ()
                                                             (cond ((getangle "\nВведите угол наклона от вертикали <0> : "))
                                                                   (t 0.)
                                                             ) ;_ end of cond
                                                           ) ;_ end of lambda
                                                 ) ;_ end of function
                             ) ;_ end of vl-catch-all-apply
               ) ;_ end of setq
         ) ;_ end of type
         'real
      ) ;_ end of =
    (progn (while (> oblique (* pi 0.5)) (setq oblique (- oblique (* pi 0.5))))
           (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
           (vlax-for item (vla-get-layers adoc)
             (setq layer_status (cons (cons item
                                            (mapcar (function (lambda (x / temp)
                                                                (setq temp (vlax-get-property item x))
                                                                (vl-catch-all-apply (function (lambda () (vlax-put-property item x :vlax-false))))
                                                              ) ;_ end of lambda
                                                    ) ;_ end of function
                                                    '("freeze" "lock")
                                            ) ;_ end of mapcar
                                      ) ;_ end of cons
                                      layer_status
                                ) ;_ end of cons
             ) ;_ end of setq
           ) ;_ end of vlax-for
           (vlax-for def (vla-get-blocks adoc)
             (if (equal (vla-get-isxref def) :vlax-false)
               (progn (vlax-for sub def
                        (cond ((vlax-property-available-p sub 'obliqueangle) (vla-put-obliqueangle sub oblique))
                              ((= (vla-get-objectname sub) "AcDbBlockReference")
                               (foreach att_ref (_kpblc-conv-vla-to-list (vla-getattributes sub))
                                 (vla-put-obliqueangle att_ref oblique)
                               ) ;_ end of foreach
                              )
                        ) ;_ end of cond
                      ) ;_ end of vlax-for
               ) ;_ end of progn
             ) ;_ end of if
           ) ;_ end of vlax-for
           (vla-endundomark adoc)
    ) ;_ end of progn
  ) ;_ end of if
  (princ)
) ;_ end of defun
ЗЫ особо не тестировал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.08.2021, 13:05
#70
Mr. Darcy


 
Регистрация: 24.08.2021
Сообщений: 23


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А если поменять настройки текстового стиля?
Увы, нет. Текст изменяет, а атрибуты нет.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от kp+ Посмотреть сообщение
Уточните, Вам надо изменить угол наклона в определениях атрибутов внутри блоков или в уже вставленных экземплярах?
Не очень понятен вопрос. У меня файл с несколькими сотнями УГО в виде динамических блоков (с ручками, растяжением и пр.) в которых есть атрибуты с наклоном 15. В новой организации (куда я пришёл работать) всё текстовое оформление без наклона.
Mr. Darcy вне форума  
 
Непрочитано 25.08.2021, 14:23
#71
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Только сейчас сообразил... По идее многострочные атрибуты, размеры, элементы таблиц и проч., где может быть применено принудительное форматирование, моим кодом обработаться обработаются, но как будут выглядеть результаты - вопрос...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.08.2021, 14:40
1 | 1 #72
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,091


Цитата:
Сообщение от Mr. Darcy Посмотреть сообщение
У меня файл с несколькими сотнями УГО в виде динамических блоков
Надо понимать, это файл базы блоков? Тогда да, надо подкорректировать именно определения блоков.
И предупреждать надо, что блоки динамические, программная работа с ними зачастую отличается от статических, сложнее.
А если еще атрибуты многострочные, да с внутренним форматированием - совсем вешалка.

Вот, подправил свой лисп. Теперь есть запрос угла наклона, и для каждого блока с нормальным именем выполняется синхронизация атрибутов (если они есть). Исключены из обработки безымянные и прочие специальные блоки.
Код:
[Выделить все]
 (defun C:ob_at ( / oblique blCol actDoc hasattrs)
 (setq oblique (getreal "наклон?: "))
 (if
	  (setq blCol(vla-get-Blocks
		       (setq actDoc(vla-get-ActiveDocument
				     (vlax-get-acad-object))))
	  )
   (progn
    (vlax-for curBl blCol
      (setq hasattrs nil)
      (if (and (= (vla-get-IsLayout curBl) :vlax-false) (= (vla-get-Isxref curBl) :vlax-false) (not (vl-string-search "*" (vla-get-name curBl) )))
       (progn	
	(vlax-for Entity curBl
	  (if
	    (=(vla-get-ObjectName Entity)"AcDbAttributeDefinition")
	    (progn
	      (if
		(not
		  (vl-catch-all-error-p
		    (vl-catch-all-apply
		      'vla-put-obliqueangle (list Entity (/ (* PI oblique) 180)  ))))
		T
	      ); end if
	      (setq hasattrs T)
	     ); end progn
	  ); end if
  	 ); end vlax-for entity
         (if hasattrs (vl-cmdf "_attsync" "_n" (vla-get-Name curBl)))
      );
     ) 
    ); end vlax-for curbl
    (vla-Regen actDoc acAllViewports)
   ); end progn
  ); end if
 (princ)
 ); end

Последний раз редактировалось kp+, 25.08.2021 в 20:46.
kp+ вне форума  
 
Непрочитано 26.08.2021, 09:37
#73
Mr. Darcy


 
Регистрация: 24.08.2021
Сообщений: 23


Цитата:
Сообщение от kp+ Посмотреть сообщение
Вот, подправил свой лисп.
Вах! Заработало! Спасибо большое!
Только опять с кодировкой что-то (надо будет повозиться с разным сохранением).
Mr. Darcy вне форума  
 
Непрочитано 21.03.2022, 22:53
#74
DmAK


 
Регистрация: 28.10.2010
Сообщений: 20


Цитата:
Сообщение от Nike Посмотреть сообщение
Для выбираемых блоков

Код:
[Выделить все]
 (defun c:ths (/ i bn_list th i bd el en)
  (setq i 0)
  (setq ss (ssget '((0 . "INSERT"))))
  (setq th (getreal "Укажите высоту текста: "))
  (while (< i (sslength ss))
    (setq bn (cdr (assoc 2 (entget (ssname ss i)))))
    (if (not (member bn bn_list))
      (setq bn_list (append bn_list (list bn)))
    ) ; end if
    (setq i (1+ i))
  ) ;_ end of while
  (setq i 0)
  (while (< i (length bn_list))
    (if (setq bd (tblobjname "block" (nth i bn_list)))
      (while (setq bd (entnext bd))
        (setq el (entget bd))
        (setq en (cdr (assoc 0 el)))
        (if (= en "TEXT")
          (progn
            (setq el (subst (cons 40 th) (assoc 40 el) el))
            (entmod el)
          ) ; end progn
        ) ; end if
      ) ; end while
    ) ; end if
    (setq i (1+ i))
  ) ; end while
  (command "_regenall")
  (princ)
)
Доброго всем времени суток и мирного неба!
Для моего случая этот код подходит.
Вопрос, а можно добавить в этот код выбор определенного стиля текста, к которому будет применено изменение высоты? Спасибо автору за актуальную до сих пор ветку и всем, кто отвечает!
DmAK вне форума  
 
Непрочитано 22.03.2022, 09:51
1 | 1 #75
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


DmAK, добавил переменную с именем стиля, во второй строке надо вписать нужное имя. В строке 18 (из исходного кода) добавил условие - проверку стиля.

Код:
[Выделить все]
  (defun c:ths (/ TStyle i bn_list th i bd el en)
  (setq TStyle "Standard")
  (setq i 0)
  (setq ss (ssget '((0 . "INSERT"))))
  (setq th (getreal "Укажите высоту текста: "))
  (while (< i (sslength ss))
    (setq bn (cdr (assoc 2 (entget (ssname ss i)))))
    (if (not (member bn bn_list))
      (setq bn_list (append bn_list (list bn)))
    ) ; end if
    (setq i (1+ i))
  ) ;_ end of while
  (setq i 0)
  (while (< i (length bn_list))
    (if (setq bd (tblobjname "block" (nth i bn_list)))
      (while (setq bd (entnext bd))
        (setq el (entget bd))
        (setq en (cdr (assoc 0 el)))
        (if (and (= en "TEXT") (= (cdr (assoc 7 el)) TStyle))
          (progn
            (setq el (subst (cons 40 th) (assoc 40 el) el))
            (entmod el)
          ) ; end progn
        ) ; end if
      ) ; end while
    ) ; end if
    (setq i (1+ i))
  ) ; end while
  (command "_regenall")
  (princ)
 )
skkkk вне форума  
 
Непрочитано 22.03.2022, 10:37
#76
koui


 
Регистрация: 24.01.2017
Сообщений: 126


Немного схожий вопрос, спрошу тут же: а как сделать цвета всех блоков "По Слою"? приходят чертежи АР шибко разноцветные, там все элементы типа дверей/окон выполнены блоками с уникальными именами (видимо, экспорт из Ревит). цвета присвоены внутри блока. заходить в каждый блок и менять очень долго. разрывать блоки не хочу, но приходится.
koui вне форума  
 
Непрочитано 22.03.2022, 11:06
#77
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989


Цитата:
Сообщение от koui Посмотреть сообщение
цвета всех блоков "По Слою"
Подготовка подосновы
BGBLFIX - Нормализация блоков
Nike вне форума  
 
Непрочитано 22.03.2022, 12:23
#78
koui


 
Регистрация: 24.01.2017
Сообщений: 126


Цитата:
Сообщение от Nike Посмотреть сообщение
Подготовка подосновы
BGBLFIX - Нормализация блоков
ох, точно, спасибо! я даже видел этот лисп, к своему стыду, тогда подумал, что оно мне не нужно.
koui вне форума  
 
Непрочитано 28.03.2022, 08:07
#79
Mr. Darcy


 
Регистрация: 24.08.2021
Сообщений: 23


Цитата:
Сообщение от koui Посмотреть сообщение
а как сделать цвета всех блоков "По Слою"?
Команда setbylayer
Mr. Darcy вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как изменить размер текста во всех блоках с одинаковым имене

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск