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

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

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

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

Всем здравствуйте! Подскажите пожалуйста, существует ли в природе штатная команда или *.lisp автоматического преобразования однострочного атрибута в многострочный. В идеале, в сочетании, осуществить бы, у преобразованного атрибута, скрытие заднего плана. Это просто необходимо при использовании в геодезии блоков в виде точек. Спасибо!
Просмотров: 10142
 
Непрочитано 13.03.2017, 15:33
#21
kp+

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


А топикстартер _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
Сообщений: 5,090


Цитата:
Сообщение от 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
Москва
Сообщений: 3,030


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


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


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

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


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


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


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

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


Цитата:
Сообщение от 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
Сообщений: 11,002


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

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


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

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

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


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


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


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


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

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


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

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


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


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

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


Цитата:
Сообщение от 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
Сообщений: 650


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

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


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


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


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


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


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


Цитата:
Сообщение от 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 вне форума  
Ответ
Вернуться   Форум 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