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

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

Как отключить скрытие заднего плана в атрибутах блоков

Ответ
Поиск в этой теме
Непрочитано 11.04.2017, 16:41 #1
Как отключить скрытие заднего плана в атрибутах блоков
kserg
 
Регистрация: 22.04.2004
Сообщений: 269

Подскажите пожалуйста как, например в AutoCAD2008, отключить скрытие заднего плана в атрибутах блоков на примере прилагаемого фрагмента чертежа, сохраненного в версии 2004?
Блоков много - сам чертеж большой.

Вложения
Тип файла: dwg
DWG 2004
123.dwg (175.1 Кб, 30 просмотров)

Просмотров: 4120
 
Непрочитано 11.04.2017, 18:14
#2
kp+

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


Цитата:
Сообщение от kserg Посмотреть сообщение
Подскажите пожалуйста как, например в AutoCAD2008, отключить скрытие заднего плана в атрибутах блоков на примере прилагаемого фрагмента чертежа, сохраненного в версии 2004?
Блоков много - сам чертеж большой.
Уточните, где надо отключить маски атрибутов:
1) в нескольких отдельно взятых блоках?
2) во всех блоках с определенным именем?
3) во всех-всех-всех блоках чертежа?
И должно ли отключение масок затронуть определение блоков, или только вставленные в чертеж экземпляры?
Для случая, похожего на №1 я недавно писал небольшой код здесь: https://forum.dwg.ru/showthread.php?...50#post1626350

Можно его немного подправить:

Код:
[Выделить все]
 (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 2) ; background fill setting (off)
								(cons 63 256) ; background color
								(cons 45 2) ; fill box scale
								(cons 441 0) ; transparency of background fill
							)
							(list
								(cons 90 2) ; background fill setting (off)
							)
						
					))
				);eo IF
)

Последний раз редактировалось kp+, 12.04.2017 в 11:10.
kp+ вне форума  
 
Автор темы   Непрочитано 12.04.2017, 07:46
#3
kserg


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


Вероятны все 3 варианта, но на первом месте - вариант, когда рамкой выделяешь часть чертежа с такими блоками.

Ваш код я при поиске в интернете ранее находил и пробовал использовать (кстати, он - единственный из всех вариантов, ранее находимых в интернете, дающий какой-то результат).
Результат применения:
1. Ваша команда при ее вводе выдает сообщение "; ошибка: неверный тип аргумента: lentityp nil"
и повторно идет (автоматом) на выполнение, после чего, в после повторного указания на атрибут в ответ на повторный запрос атрибута (извините за тавтологию) - выполняет требуемое.
2. AutoCAD валится при открытии файла, в котором применялась Ваша команда

Проверялось на AutoCAD2008 и AutoCAD2010.

На странице, которую я ранее находил с Вашим кодом (тема "Как автоматически преобразовать однострочный атрибут в многострочный") упоминалась ссылка на "Background Mask" Lee Mac http://www.theswamp.org/index.php?topic=41512.0, где он предлагал для атрибутов подкорректировать некие строки. Однако, после скачивания его кода, не нашел там их (строки).

Последний раз редактировалось kserg, 12.04.2017 в 08:01.
kserg вне форума  
 
Непрочитано 12.04.2017, 10:06
1 | #4
Deniska_che

Генпланист
 
Регистрация: 19.04.2013
St. Petersburg
Сообщений: 154


Встречный вопрос: как включить скрытие заднего плана в атрибутах блоков?
Deniska_che вне форума  
 
Непрочитано 12.04.2017, 10:12
#5
kp+

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


Цитата:
Сообщение от kserg Посмотреть сообщение
на первом месте - вариант, когда рамкой выделяешь часть чертежа с такими блоками
В принципе, нетрудно допилить, только позже.

Цитата:
Сообщение от kserg Посмотреть сообщение
2. AutoCAD валится при открытии файла, в котором применялась Ваша команда
Интересно девки пляшут...видимо, та комбинация настроек, что я задал для групп 90, 63, 45, 441 и проч., не совсем корректна и несовместима с жизнью внутри себя. Надо будет поэкспериментировать. Впрочем, Вы тоже можете. Хелп по DXF-группам для атрибутов в помощь.

Цитата:
Сообщение от Deniska_che Посмотреть сообщение
Встречный вопрос: как включить скрытие заднего плана в атрибутах блоков?
Мой код по ссылке из #2 именно это и делает.

Последний раз редактировалось kp+, 12.04.2017 в 11:10.
kp+ вне форума  
 
Непрочитано 12.04.2017, 10:56
#6
sertor

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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Для случая, похожего на №1 я недавно писал небольшой код здесь: http://forum.dwg.ru/showthread.php?t=139575
Ссылка ведет в эту же тему. Подправлю и пару слов в благодарность. Спасибо большое!
__________________
Как-то так.
sertor вне форума  
 
Автор темы   Непрочитано 12.04.2017, 12:07
#7
kserg


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


kp+

На скорую руку :

Цитата:
Интересно девки пляшут...видимо, та комбинация настроек, что я задал для групп 90, 63, 45, 441 и проч., не совсем корректна и несовместима с жизнью внутри себя. Надо будет поэкспериментировать. Впрочем, Вы тоже можете. Хелп по DXF-группам для атрибутов в помощь.
Вроде как от Вашего кода достаточно было одного :

Код:
[Выделить все]
 (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-false)
... и все нормально потом (открывается файл с этим - без ошибок).
kserg вне форума  
 
Непрочитано 12.04.2017, 12:13
#8
kp+

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


Цитата:
Сообщение от kserg Посмотреть сообщение
Вроде как от Вашего кода достаточно было одного : (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-false)
Этим легким движением руки брюки многострочный отребут превращается в элегантные шорты однострочный. Т.к. для однострочного маска не предусмотрена в принципе, то она, конечно, слетает. Если Вам этого достаточно, если многострочность ни одному из атрибутов по сути не требуется - то все танцы с бубном вокруг DXF-кодов (строки с 3 по 32) можно убрать.
kp+ вне форума  
 
Автор темы   Непрочитано 12.04.2017, 12:29
| 1 #9
kserg


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


Нет. Конечно же сжигать мосты не хотелось бы (атрибутам желательно бы остаться - многострочными)... Придется ковырять дальше.
kserg вне форума  
 
Непрочитано 12.04.2017, 12:40
#10
kp+

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


Цитата:
Сообщение от kserg Посмотреть сообщение
атрибутам желательно бы остаться - многострочными
Попробуйте убрать многострочность и снова вернуть с минимальными настройками. Т.е. после
Код:
[Выделить все]
 (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-false)
поставить
Код:
[Выделить все]
 (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-true)
kp+ вне форума  
 
Автор темы   Непрочитано 12.04.2017, 12:48
#11
kserg


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


Ну да. Это работает.
Спасибо.

Интересно, а если пройтись по таблице определений блоков - этот финт (отключение/включение скрытия заденго фона) прокатил бы ?

Последний раз редактировалось kserg, 12.04.2017 в 12:55.
kserg вне форума  
 
Непрочитано 12.04.2017, 13:13
#12
kp+

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


Цитата:
Сообщение от kserg Посмотреть сообщение
Интересно, а если пройтись по таблице определений блоков - этот финт (отключение/включение скрытия заденго фона) прокатил бы ?
Только после attsync, который на чертежах вроде Вашего может причинить больше "разрушения", чем принести пользы.
kp+ вне форума  
 
Непрочитано 12.04.2017, 16:45
#13
frostmourn


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


Только учитывайте, что если атрибут действительно использовал несколько строк, то после переключения его в однострочный и обратно всё останется в одной строке. Может, в вашем случае не важно, но лучше про такое помнить.
frostmourn вне форума  
 
Автор темы   Непрочитано 13.04.2017, 07:16
#14
kserg


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


Спасибо.

Думаю для подстраховки все-таки пересмотреть варианты комбинации настроек, задаваемых для групп 90, 63, 45, 441 и т.д.
kserg вне форума  
 
Непрочитано 13.04.2017, 09:20
#15
kp+

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


Цитата:
Сообщение от kserg Посмотреть сообщение
Думаю для подстраховки все-таки пересмотреть варианты комбинации настроек, задаваемых для групп 90, 63, 45, 441 и т.д.
Есть другое решение. Признаки многострочности (абзацы и проч.) задается кодами форматирования в текстовой строке.
Код:
[Выделить все]
 (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-false)
их убирает, с соотв. изменением текстовой строки.
Но перед ним можно поставить
Код:
[Выделить все]
 (setq st (vla-get-textstring att))
, чтобы сохранить исх. текстовую строку до поры.
После
Код:
[Выделить все]
 (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-true)
поставить
Код:
[Выделить все]
 (vla-put-textstring att st)
и вернуть все признаки многострочности на место
kp+ вне форума  
 
Автор темы   Непрочитано 14.04.2017, 07:40
#16
kserg


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


Кажется мне, все гораздо проще. При необходимости восстановления прежнего состояния атрибута - взять его требуемые параметры из таблицы определений блоков и все....
kserg вне форума  
 
Непрочитано 14.04.2017, 09:01
#17
kp+

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


Цитата:
Сообщение от kserg Посмотреть сообщение
Кажется мне, все гораздо проще. При необходимости восстановления прежнего состояния атрибута - взять его требуемые параметры из таблицы определений блоков и все....
Параметры форматирования абзацев, которые суть основа и первейшая цель многострочности, сидят именно в кодах форматирования, которые зарыты в значении текстовой строки. См. соотв. раздел хэлпа
Например, есть многостр. отребут, в котором, как нам видно в редакторе, написано:
Код:
[Выделить все]
1)Петя
2) Вася
В свойствах мы можем увидеть другую картину:
Код:
[Выделить все]
1)Петя\P2) Вася
Т.е. текст, который нам видится многострочным, на самом деле всегда записывается одной строкой. А переносы задаются либо шириной текста, либо кодами форматирования, в т.ч. знаками абзаца.
Код
Код:
[Выделить все]
 (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-false)
символы кодов форматирования убирает, вместе с признаком многострочности.

После возврата признака многострочности с помощью
Код:
[Выделить все]
 (vla-put-mtextattribute (vlax-ename->vla-object att) :vlax-true)
коды форматирования не вернуться, им неоткуда взяться. Поэтому перед снятием признака многострочности надо сохранить значение текста, приличествующее многострочному тексту, а потом, при возврате признака многострочности, восстановить его, вместо почищенного, который соответствует однострочному варианту.
kp+ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как отключить скрытие заднего плана в атрибутах блоков

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Осуществить скрытие заднего плана таблицы, как...? Redj-ЭС AutoCAD 12 19.08.2018 23:30
Мультивыноска - скрытие заднего плана Sart AutoCAD 4 09.02.2017 10:07
Xerox 510 при печати через HDI игнорирует маскировки и скрытие заднего плана у текста fox_it AutoCAD 11 24.11.2014 09:35
Скрытие заднего плана Mtext: проблемы с печатью на EnCad T200 kp+ AutoCAD 11 11.08.2014 15:30