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

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

Как автоматически преобразовать однострочный атрибут в многострочный?

Ответ
Поиск в этой теме
Непрочитано 12.03.2017, 12:19
Как автоматически преобразовать однострочный атрибут в многострочный?
config
 
Регистрация: 20.02.2015
Сообщений: 79

Всем здравствуйте! Подскажите пожалуйста, существует ли в природе штатная команда или *.lisp автоматического преобразования однострочного атрибута в многострочный. В идеале, в сочетании, осуществить бы, у преобразованного атрибута, скрытие заднего плана. Это просто необходимо при использовании в геодезии блоков в виде точек. Спасибо!
Просмотров: 10145
 
Непрочитано 30.09.2022, 14:35
1 | #41
koMon


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


преобразование атрибутов в мтекст, назначение маски в цвет экрана, без проверок
Код:
[Выделить все]
 (setq insert_ss (ssget '((0 . "insert") (66 . 1))) insert_index -1)
(repeat (sslength insert_ss)
	(foreach attribute (vlax-invoke (vlax-ename->vla-object (ssname insert_ss (setq insert_index (1+ insert_index)))) 'getattributes)
		(cond 
			(
				(zerop (vlax-get attribute 'invisible))
					(setq attribute_alignment_point (vla-get-textalignmentpoint attribute)
						  attribute_alignment (vla-get-alignment attribute) 
					)
					(vla-put-mtextattribute attribute :vlax-true) 
					(entmod (append (entget (vlax-vla-object->ename attribute)) '((90 . 3) (63 . 256) (45 . 1.1) (441 . 0))))
					(cond
;						(
;							(zerop attribute_alignment)
;						)
						(
							(member attribute_alignment '(1 2 4 6 7 8 9 10 11 12 13 14))
								(vla-put-textalignmentpoint attribute attribute_alignment_point)
						)
;						(
;							(member attribute_alignment '(3 5))
;						)
						(
							t
						)
					)
			)
			(
				t
			)
		)
	)
)
__________________
K Lisp

Последний раз редактировалось koMon, 03.10.2022 в 12:58.
koMon вне форума  
 
Непрочитано 30.09.2022, 14:49
#42
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 103


Спасибо. Все тоже самое, только в 3 раза короче! )

Но до сих пор не могу понять: разные блоки преобразуются по-разному. Где-то есть смещение атрибута после преобразования, а где-то атрибут остается на своем месте.
Причем это не зависит установлено ли в свойствах атрибутах "Установленный"
(во вложении файл с примером)

Последний раз редактировалось Sege, 03.10.2022 в 08:48.
Sege вне форума  
 
Непрочитано 30.09.2022, 16:28
#43
koMon


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


это связано скорее всего с установкой выравнивания текста в атрибуте текстовом и мтекстовом. бороть нужно пересчётом и переназначением.
__________________
K Lisp
koMon вне форума  
 
Непрочитано 30.09.2022, 16:39
#44
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 103


Цитата:
Сообщение от koMon Посмотреть сообщение
это связано скорее всего с установкой выравнивания текста в атрибуте текстовом и мтекстовом. бороть нужно пересчётом и переназначением.
к сожалению, выравнивание никак не вливает. Везде переопределил и поставил "середина по центру" -> результат такой же
Sege вне форума  
 
Непрочитано 30.09.2022, 16:59
1 | #45
koMon


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


именно это выравнивание и влияет ятд. в автокаде смена выравнивания для текста происходит не относительно точки вставки текста, как казалось бы должно было быть по логике, а относительно точки выравнивания. таким образом, чтобы текст (атрибут) остался на своём месте нужно взять две эти точки у текстового атрибута и переназначить их у атрибута, изменённого в мтекст.

----- добавлено через ~35 мин. -----
Sege, в #41 добавил спонтанное учитывание выравнивания атрибута
__________________
K Lisp

Последний раз редактировалось koMon, 30.09.2022 в 17:13.
koMon вне форума  
 
Непрочитано 02.10.2022, 10:15
#46
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 103


Цитата:
Сообщение от koMon Посмотреть сообщение
именно это выравнивание и влияет ятд. в автокаде смена выравнивания для текста происходит не относительно точки вставки текста, как казалось бы должно было быть по логике, а относительно точки выравнивания. таким образом, чтобы текст (атрибут) остался на своём месте нужно взять две эти точки у текстового атрибута и переназначить их у атрибута, изменённого в мтекст.

----- добавлено через ~35 мин. -----
Sege, в #41 добавил спонтанное учитывание выравнивания атрибута
Круто! Спасибо, теперь "спонтанного" вырывания не происходит!
Sege вне форума  
 
Непрочитано 03.10.2022, 11:12
#47
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 103


koMon, а есть возможность только для "видимых" атрибутов сделать "маску"? Если атрибуты невидимые - игнорировать преобразование.
Sege вне форума  
 
Непрочитано 03.10.2022, 12:54
1 | #48
koMon


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


да
__________________
K Lisp
koMon вне форума  
 
Непрочитано 04.10.2022, 08:51
#49
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 103


Цитата:
Сообщение от koMon Посмотреть сообщение
да
Еще раз спасибо!
Sege вне форума  
 
Непрочитано 04.10.2022, 15:14
#50
VitalyAF


 
Регистрация: 19.07.2005
Россия
Сообщений: 3,224


Я т.д. что,
1. наличие/отсутствие маскировки можно реализовать дин. блоком
2. +lisp с выбором динблоков по именам, атрибутам (юзал такой давно...)
PS
т.е. вместо блока динблок

Последний раз редактировалось VitalyAF, 04.10.2022 в 16:35.
VitalyAF вне форума  
 
Непрочитано 12.10.2022, 10:26
#51
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 103


чтобы не создавать ветку
Нужно еще ширину мультитекста атрибута в выбранных блоках обнулить на 1

Что не так?

Код:
[Выделить все]
 
(defun c:att0 ()
(setq insert_ss (ssget '((0 . "insert") (66 . 1))) insert_index -1)
(repeat (sslength insert_ss)
	(foreach attribute (vlax-invoke (vlax-ename->vla-object (ssname insert_ss (setq insert_index (1+ insert_index)))) 'getattributes)
    (vla-put-scalefactor attribute 1)
)
)
)
Sege вне форума  
 
Непрочитано 12.10.2022, 13:48
#52
Кулик Алексей aka kpblc
Moderator

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


Обнулить на 1 - это как? И одно дело - коэффициент сжатия, другое - ширина текста. Ну и прочих условий там тоже хватает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.10.2022, 13:58
#53
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 103


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Обнулить на 1 - это как? И одно дело - коэффициент сжатия, другое - ширина текста. Ну и прочих условий там тоже хватает.
Имеется:
- блок с атрибутом в виде мтекста,
- мультитекст в мультилинии, где в поле имеется ссылка на данный блок (конкретный атрибут блока)

В итоге данные в поле выдираются с "внутренним форматирование", которые прописаны в атрибуте блоке
Примерно так: \W0.9000;текст атрибута

Поэтому хочется очистить от внутреннего форматирования (во внутреннем форматировании стоит коэф.сжатия-растяжения меньше 1)

Последний раз редактировалось Sege, 12.10.2022 в 14:06.
Sege вне форума  
 
Непрочитано 12.10.2022, 14:11
#54
Кулик Алексей aka kpblc
Moderator

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


У тебя в голове полнейшая каша. Настройки описания многострочного атрибута - это одно, а внесенные во вхождение атрибута данные - совсем другое.
Ищи на форуме код по очистке форматирования (ключевое слово stripmtext)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.10.2022, 14:19
#55
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 103


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
У тебя в голове полнейшая каша. Настройки описания многострочного атрибута - это одно, а внесенные во вхождение атрибута данные - совсем другое.
Ищи на форуме код по очистке форматирования (ключевое слово stripmtext)
Алексей, SMT (от LeeMac) конкретно для моего случая - не работает с атрибутом блока в виде МTEXT

А вот указанный код - "обнуляет" атрибут блока (делает его шириной=1 и в итоге ранее описанные манипуляции выдирают данные без форматирования):
Код:
[Выделить все]
 (vla-put-scalefactor (vlax-ename->vla-object (car (nentsel "\nSelect attribute: "))) 1)
----- добавлено через ~24 мин. -----
Примерно так получилось, вроде работает:
Код:
[Выделить все]
 
 (defun c:att0 ()
 (vl-load-com)
  (prompt "Select blocks:")
  (setq ss (ssget (list '(0 . "INSERT")(cons 66  1))) i -1)
  (repeat (sslength ss)
  (setq i (1+ i))
  (setq blk (vlax-ename->vla-object (ssname ss i))
        atrs (vlax-invoke blk 'Getattributes))
  (foreach att atrs
  (vla-put-scalefactor att 1)
  (vla-update att)))
  (princ)
  )

Последний раз редактировалось Sege, 12.10.2022 в 15:06.
Sege вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как автоматически преобразовать однострочный атрибут в многострочный?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись значения в многострочный атрибут (LISP) tujn08 LISP 3 09.06.2015 09:02
Многострочный атрибут блока Нитонисе AutoCAD 20 05.12.2014 15:02
C# AutoCAD. Как сделать многострочный атрибут? Sfinks7s1 Программирование 5 17.09.2013 14:22
Почему многострочный атрибут блока становиться в одну строку? Alexg-12 AutoCAD 13 10.06.2013 15:58
Можно ли создать многострочный атрибут блока, который будет динамически растягиваться? ACAD 2007. Vavapet Динамические блоки 2 01.03.2011 15:00