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

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

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

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

Всем здравствуйте! Подскажите пожалуйста, существует ли в природе штатная команда или *.lisp автоматического преобразования однострочного атрибута в многострочный. В идеале, в сочетании, осуществить бы, у преобразованного атрибута, скрытие заднего плана. Это просто необходимо при использовании в геодезии блоков в виде точек. Спасибо!
Просмотров: 9000
 
Непрочитано 12.03.2017, 12:42
#2
Кулик Алексей aka kpblc
Moderator

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


Заходишь в редактор блоков, выделяешь атрибут и в свойствах устанавливаешь многострочный - да.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.03.2017, 13:34
#3
config


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Заходишь в редактор блоков, выделяешь атрибут и в свойствах устанавливаешь многострочный - да.
Да, спасибо, этим методом я и пользуюсь. Немного "разверну свое повествование". Допустим, имеется топоплан с 1000 точками, представленными в виде блоков с атрибутами. Некоторые точки, а точнее атрибуты (предположим, несколько десятков), перекрывают нужные для отображения объекты. В таком случае, я по ходу редактирования, копирую эти блоки в новый чертеж, переименовываю, преобразовываю и вставляю обратно с исходными координатами. Так, вот, чтобы несколько уменьшить эти "телодвижения" и "прыгания" с чертежа в чертеж, и хотелось бы несколько усовершенствовать эту методу. Как я себе представляю, с помощью лиспа , например, Подготовка подосновы, переименовываю нужный блок, а вот дальше - загвоздка. Вот на этом этапе и хотелось бы, чтобы в этом же чертеже, преобразовать однострочные атрибуты в многострочные и выполнить скрытие заднего плана. Прощупал ToolPac, Express Tools, искал на форуме. Увы...
config вне форума  
 
Непрочитано 12.03.2017, 14:48
#4
Кулик Алексей aka kpblc
Moderator

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


1000 точек - это 1000 вхождений или 1000 разных блоков? Если первое - то меняешь один раз, потом _.attsync
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.03.2017, 15:20
#5
sertor

Геодезист
 
Регистрация: 23.05.2012
Ухта
Сообщений: 1,373


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
1000 точек - это 1000 вхождений или 1000 разных блоков? Если первое - то меняешь один раз, потом _.attsync
Блоки-то одноименные, а вот скрытие заднего плана нужно делать для части из них.

----- добавлено через 37 сек. -----
Я так понял из написанного.
__________________
Как-то так.
sertor вне форума  
 
Автор темы   Непрочитано 12.03.2017, 15:27
#6
config


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


Цитата:
Сообщение от sertor Посмотреть сообщение
Блоки-то одноименные, а вот скрытие заднего плана нужно делать для части из них.
Да, с переименованием.
config вне форума  
 
Непрочитано 12.03.2017, 19:20
#7
trir


 
Регистрация: 18.12.2010
Сообщений: 4,823


В Civil 3D это делается гораздо проще...
trir вне форума  
 
Автор темы   Непрочитано 12.03.2017, 19:39
#8
config


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


Цитата:
Сообщение от trir Посмотреть сообщение
В Civil 3D это делается гораздо проще...
Ума не приложу как? Вы имеете ввиду Map 3D? Понимаю, что не по теме, но все же, если можно, объясните чуть подробнее. Или укажите источник, где можно почитать.
config вне форума  
 
Непрочитано 12.03.2017, 19:41
#9
trir


 
Регистрация: 18.12.2010
Сообщений: 4,823


В Civil 3D для этого есть cogo-точки, их можно разделять на группы и назначать им стили для отображения
trir вне форума  
 
Автор темы   Непрочитано 12.03.2017, 19:52
#10
config


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


Цитата:
Сообщение от trir Посмотреть сообщение
В Civil 3D для этого есть cogo-точки, их можно разделять на группы и назначать им стили для отображения
Спасибо, с этим я курсе. Но главная моя задача - скрытие заднего плана в атрибутах блока.
config вне форума  
 
Непрочитано 12.03.2017, 19:55
#11
trir


 
Регистрация: 18.12.2010
Сообщений: 4,823


у cogo-точки кажется можно настроить скрытие заднего плана для текста в метке
trir вне форума  
 
Автор темы   Непрочитано 12.03.2017, 20:10
#12
config


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


Цитата:
Сообщение от trir Посмотреть сообщение
у cogo-точки кажется можно настроить скрытие заднего плана для текста в метке
Да, спасибо, этого не знал. Но к сожалению, величина этой границы закреплена жестко и не регулируется. А по-умолчанию, она слишком велика и перекрывает соседние объекты. В чистом AutoCAD это реализовано, на мой взгляд, более гибко.
config вне форума  
 
Непрочитано 13.03.2017, 08:10
#13
trir


 
Регистрация: 18.12.2010
Сообщений: 4,823


Цитата:
величина этой границы закреплена жестко и не регулируется
чушь, "Промежуток" можно установить в 0 и тогда граница идёт уже по буквам
trir вне форума  
 
Непрочитано 13.03.2017, 14:32
#14
kp+

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


Я так понял, надо "придать многострочность" отдельно взятым атрибутам отдельно взятых блоков?
Тогда (для единичных атрибутов):
Код:
[Выделить все]
 (defun c:sa2ma ()
       (vla-put-mtextattribute (vlax-ename->vla-object (car (nentsel "выберите отребут"))) :vlax-true)
)
__________________
Одно меня лишь радует - я это вижу сам! (С)

Последний раз редактировалось kp+, 13.03.2017 в 14:37.
kp+ вне форума  
 
Непрочитано 13.03.2017, 14:42
#15
Кулик Алексей aka kpblc
Moderator

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


kp+, думаешь, сработает? Со вхождением-то атрибута?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.03.2017, 15:01
#16
kp+

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
kp+, думаешь, сработает? Со вхождением-то атрибута?
Проверял, получилось
__________________
Одно меня лишь радует - я это вижу сам! (С)
kp+ вне форума  
 
Непрочитано 13.03.2017, 15:08
#17
trir


 
Регистрация: 18.12.2010
Сообщений: 4,823


Цитата:
Проверял, получилось
а что будет, если обновить блоки через _battman?
trir вне форума  
 
Непрочитано 13.03.2017, 15:08
#18
Кулик Алексей aka kpblc
Moderator

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


Ух ты! Но не дай боже запустить после этого _.attsync
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.03.2017, 15:21
#19
kp+

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


Цитата:
Сообщение от trir Посмотреть сообщение
а что будет, если обновить блоки через _battman?
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Но не дай боже запустить после этого _.attsync
Грешным делом попробовал. Ничего страшного не произошло. Акад не упал. Всего лишь атрибут утратил многострочность, при этом сохранив содержимое (только без кодов форматирования Мтекста).
__________________
Одно меня лишь радует - я это вижу сам! (С)
kp+ вне форума  
 
Непрочитано 13.03.2017, 15:28
#20
trir


 
Регистрация: 18.12.2010
Сообщений: 4,823


в принципе программно можно на вхождения вешать какие угодно атрибуты, даже на блоки в принципе без атрибутов, но это до первого _.attsync
trir вне форума  
 
Непрочитано 13.03.2017, 15:33
#21
kp+

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


А топикстартер _attsync и не собирался применять, я так понял
__________________
Одно меня лишь радует - я это вижу сам! (С)
kp+ вне форума  
 
Автор темы   Непрочитано 13.03.2017, 18:23
#22
config


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


kp+, спасибо огромное, работает! Обновление атрибутов совсем не обязательно. Это вполне можно опустить. Но если возможно, еще одна просьба, для логического завершения этой опции. Как-бы сделать лиспом скрытие заднего плана в связке с преобразованием в многострочник? Такое возможно? Пусть и без _attsync. Спасибо!
config вне форума  
 
Непрочитано 13.03.2017, 18:47
2 | #23
kp+

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


Цитата:
Сообщение от config Посмотреть сообщение
Обновление атрибутов совсем не обязательно
Оно категорически противопоказано
Цитата:
Сообщение от config Посмотреть сообщение
Как-бы сделать лиспом скрытие заднего плана в связке с преобразованием в многострочник?
Lee Mac уже все сделал: http://www.theswamp.org/index.php?topic=43827.0
вот моя деревянная телега с его реактивным двигателем адаптированная версия:
Код:
[Выделить все]
  (defun c:sa2ma (/ ATT EL)
   (setq att (car (nentsel "выберите отребут")))
   (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-true)
				; set background mask by Lee Mac http://www.theswamp.org/index.php?topic=43827.0
				(setq el (entget att))
				(if (member '(101 . "Embedded Object") el)
					(entmod (append
						; el without mask related pairs
						(vl-remove-if
							(function (lambda ( pair )
								(member (car pair) '(45 63 90 421 431 441))
							))
							el
						)
						; new mask related pairs
						
							(list
								(cons 90 3) ; background fill setting (transparent)
								(cons 63 256) ; background color
								(cons 45 1) ; fill box scale
								(cons 441 0) ; transparency of background fill
							)
							(list
								(cons 90 2) ; background fill setting (off)
							)
						
					))
				);eo IF
)
Цитата:
Сообщение от config Посмотреть сообщение
Пусть и без _attsync
Об _attsync после применения вышеприведенного кода забыть под страхом потери результатов работы!
__________________
Одно меня лишь радует - я это вижу сам! (С)
kp+ вне форума  
 
Автор темы   Непрочитано 13.03.2017, 19:04
#24
config


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


kp+, супер! Преклоняюсь. Спасибо Вам огромное! То, что "доктор прописал"!
config вне форума  
 
Непрочитано 13.03.2017, 21:36
#25
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,978


Сделайте под однострочным атрибутом (под чем нужно) в блоке маскировку-wipeout, и два состояния видимости - с маской и без. И включайте-отключайте маскировку на здоровье и Ваше, и атрибутов, и блоков, сколько и когда нужно. Никакой _attsync при этом не помешает.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Автор темы   Непрочитано 13.03.2017, 21:43
#26
config


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


Цитата:
Сообщение от АлексЮстасу Посмотреть сообщение
Сделайте под однострочным атрибутом (под чем нужно) в блоке маскировку-wipeout
Нет, маскировка, на мой взгляд - зло. Я думаю не стоит объяснять почему. Столько "копий на этом сломано". А в данном случае - скрытие заднего плана. Это совсем другое дело.
config вне форума  
 
Непрочитано 13.03.2017, 22:01
#27
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,978


Цитата:
Сообщение от config Посмотреть сообщение
Нет, маскировка, на мой взгляд - зло. Я думаю не стоит объяснять почему. Столько "копий на этом сломано". А в данном случае - скрытие заднего плана. Это совсем другое дело.
Мы этим "злом" пользовались, пользуемся и пользоваться будем как раз для скрытия заднего плана. Исключительно для добра.
Объясните, почему зло?
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 13.03.2017, 22:23
#28
trir


 
Регистрация: 18.12.2010
Сообщений: 4,823


В AtoCAD'е периодически слетает порядок прорисовки...
trir вне форума  
 
Непрочитано 13.03.2017, 23:12
1 | #29
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от config Посмотреть сообщение
Нет, маскировка, на мой взгляд - зло. Я думаю не стоит объяснять почему.
Насколько я понимаю, скрытие заднего фона обращается к тому же самому функционалу.
Цитата:
Сообщение от trir Посмотреть сообщение
В AtoCAD'е периодически слетает порядок прорисовки...
Как правило, "слет" обуславливается строго определенными действиями пользователя. Частично я разбирал это здесь: http://autolisp.ru/2013/09/18/draworder-inside-blocks/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.03.2017, 00:33
#30
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 10,154


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Как правило, "слет" обуславливается строго определенными действиями пользователя. Частично я разбирал это здесь: http://autolisp.ru/2013/09/18/draworder-inside-blocks/
получается, что порядок отрисовки каким то образом завязан на хэндл объектов? Ведь при копировании и последующей вставки примитивы получают следующие свободные хэндлы...
Сергей812 вне форума  
 
Непрочитано 14.03.2017, 02:11
#31
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,978


Редко и у нас маски закрывали нужные элементы. Почти всегда лечилось аудитом.
Да, правильность порядка отображения заложена в порядке создания маски и ее текста или пр. Сначала маску, а потом соотв. атрибут или пр.

Соглашусь с еще неназванным недостатком, что у маскировки нет такого замечательного свойства, как у скрытия заднего плана многострочных текстов-атрибутов - размер маскировки для текстов разной длины нуждается в редактировании вручную.

Есть другой вариант: сделать в блоке два атрибута - многострочный со скрытым задним планом и однострочный, но с пр. одинаковыми свойствами, и состояния видимости - с "маской", т.е. многострочный и без, однострочный.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 15.03.2017, 23:37
#32
skkkk


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Насколько я понимаю, скрытие заднего фона обращается к тому же самому функционалу.
Возможно и так, но я ни разу не видел, чтобы скрытие заднего плана выскакивало на передний, а с маскировками - сколько угодно. Лечится, правда, чаще всего аудитом с последующей регенерацией, но это лишние действия.
Я бы все же пошел по пути АлексЮстасу - сделал бы динамический блок с двумя видимостями и менял бы видимость программно у выбранных (множественно - хоть рамкой, хоть кликом) блоков. Все коды для этого на форуме уже есть.
skkkk на форуме  
 
Непрочитано 16.03.2017, 00:04
#33
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 10,154


сталкивался еще с тем, что маскировка в некоторых блоках внезапно отваливалась от операции динамического поворота - т.е. все остальные примитивы вращаются, а маскировка стоит на месте.
Сергей812 вне форума  
 
Непрочитано 16.03.2017, 02:41
1 | #34
АлексЮстасу

топограф, технолог
 
Блог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,978


Во-первых, я попробовал сделать блоки с многострочными атрибутами. Где атрибут считывает Z своего блока - как раз для геодезических отметок. Раньше многострочные никогда не делал. То ли я их не умею готовить, то ли с многострочными что-то по жизни не так, но в таких атрибутах поля у меня при вставке блоков работают через раз. Сделал - работают. Закрыл файл, открыл - вставляются, но вместо значения атрибута пишет название поля "InsertionPoint". И в 2012-м и в 2016-м. С однострочными такого за многие годы не наблюдалось.
Во-вторых, беру частично свои слова обратно, т.к. можно проще - достаточно одного атрибута со скрытым фоном, и не нужно никакого определения видимости. Зачем вообще два варианта? Если скрывать нечего, то и скрытие фона не мешает. Если есть что скрывать - он и скроет.

А по поводу адских маскировок=вайпаутов - если блок правильно сделан, то ничто никуда не налезает и не съезжает. Мистики с маскировками в блоках не наблюдал, хотя таких блоков понаделал предостаточно - сотни, и пользовались ими интенсивно десятки людей лет десять.
Вложения
Тип файла: dwg
DWG 2004
отметка_многострочный_атрибут_2.dwg (137.8 Кб, 22 просмотров)
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума  
 
Непрочитано 20.06.2019, 15:31
#35
allar8


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


Не понятно в чем проблема преобразования однострочного атрибута в многострочный - в свойствах жи просто поставить Да напротив "Несколько строк"
Или я просто тему не понял
А вот наобот бы - многострочный в однострочный без создания нового атрибута преобразовать видимо нельзя
allar8 вне форума  
 
Непрочитано 20.06.2019, 16:03
1 | #36
kp+

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


Цитата:
Сообщение от allar8 Посмотреть сообщение
А вот наобот бы - многострочный в однострочный
В коде из #14 :vlax-true заменить на :vlax-false, и все получится. Только что проверил. С теми же оговорками:
- работает только для отдельно взятых экземпляров атрибутов;
- после _attsync "многострочность" атрибутов возвращается к исходному состоянию.

Цитата:
Сообщение от allar8 Посмотреть сообщение
Не понятно в чем проблема преобразования однострочного атрибута в многострочный - в свойствах жи просто поставить Да напротив "Несколько строк"
Без _attsync чуда не будет, как ни проводи эту операцию - хоть через редактор блоков, хоть через диспетчер атрибутов (_battman). А насколько разрушительны иногда результаты _attsync - думаю, Вы не хуже меня знаете.
__________________
Одно меня лишь радует - я это вижу сам! (С)

Последний раз редактировалось kp+, 20.06.2019 в 16:14.
kp+ вне форума  
 
Непрочитано 21.06.2019, 20:39
#37
allar8


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
В коде из #14 :vlax-true заменить на :vlax-false, и все получится.
Супер то что надо. Спасибо!

----- добавлено через ~10 мин. -----
Цитата:
Сообщение от kp+ Посмотреть сообщение
после _attsync "многострочность" атрибутов возвращается к исходному состоянию.
Если зайти внутрь блока и выполнить sa2ma то после выхода из блока и выполнения _attsync атрибут превращается в однострочный
Т.е. все как надо. Спасибо. Давно искал такую команду
allar8 вне форума  
 
Непрочитано 30.09.2022, 10:15
#38
Sege


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


Коллеги, поднимаю тему. Появилась потребность преобразования всех атрибутов всех выделенных блоков в "многострочный" с "маской".
С помощью (setq att (car (nentsel "выберите отребут"))) мы получаем уникальное имя _конкретного_ атрибута в одном указанном блоке.
Получается, надо перебрать все атрибуты в наборе, полученным (ssget), получить их имя (экземпляр) аналогично nentsel и уже сделать преобразование?
Sege вне форума  
 
Непрочитано 30.09.2022, 13:06
#39
Oleg T


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


А что, много разноименных блоков? Стандартными средствами для одноименных можно переопределить блоки с преобразованием атрибутов в многострочные и затем - ATTSYNC.
Oleg T вне форума  
 
Непрочитано 30.09.2022, 13:25
#40
Sege


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


Цитата:
Сообщение от Oleg T Посмотреть сообщение
А что, много разноименных блоков? Стандартными средствами для одноименных можно переопределить блоки с преобразованием атрибутов в многострочные и затем - ATTSYNC.
ATTSYNC сбрасывает положение атрибутов на первоначальное. А это плохо когда все уже сделано. Или можно сделать так, чтобы ATTSYNC не сбрасывал?

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

Код:
[Выделить все]
 
(defun c:att_mask (/ ATT EL)
  (prompt "Укажите блоки")
  (setq k 0) 
  (setq nabor (ssget '((0 . "INSERT"))))
  (repeat (sslength nabor)
  (setq np (ssname nabor k))
 (while (eq (cdr (assoc 0 (entget (entnext np)))) 
	   "ATTRIB"
       ) ;_ конец eq
  (setq att (cdr (assoc -1 (entget (entnext np)))))
   (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-true)
				(setq el (entget att))
				(if (member '(101 . "Embedded Object") el)
					(entmod (append
						; el without mask related pairs
						(vl-remove-if
							(function (lambda ( pair )
								(member (car pair) '(45 63 90 421 431 441))
							))
							el
						)
						; new mask related pairs
						
							(list
								(cons 90 3) ; background fill setting (transparent)
								(cons 63 256) ; background color
								(cons 45 1) ; fill box scale
								(cons 441 0) ; transparency of background fill
							)
							(list
								(cons 90 2) ; background fill setting (off)
							)
						
					))
				);eo IF
				(setq np (entnext np))
)
(setq k (+ 1 k))
)
)
----- добавлено через ~9 мин. -----
Программа вроде работает, но почему-то сбрасывает положение атрибута, который подвергся преобразованию в mtext + mask
Sege вне форума  
 
Непрочитано 30.09.2022, 14:35
1 | #41
koMon


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


преобразование атрибутов в мтекст, назначение маски в цвет экрана, без проверок
Код:
[Выделить все]
 (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
Санкт-Петебург
Сообщений: 66


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

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

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


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


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


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


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


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


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

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

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


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


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

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


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


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


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


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


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


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

пенсионер
 
Регистрация: 19.07.2005
Россия
Сообщений: 2,956


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

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


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


чтобы не создавать ветку
Нужно еще ширину мультитекста атрибута в выбранных блоках обнулить на 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
С.-Петербург
Сообщений: 38,934


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


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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 38,934


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


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


Цитата:
Сообщение от Кулик Алексей 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