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

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

Степень прозрачности маски мультивыноски

Ответ
Поиск в этой теме
Непрочитано 25.03.2020, 14:22 #1
Степень прозрачности маски мультивыноски
Ovolyn
 
Регистрация: 25.03.2020
Сообщений: 5

Добрый день.
При выполнении этажных планов здания часто приходится использовать мультивыноски поверх архитектурной подложки здания. И хотелось бы, чтобы текст мультивыноски был читаемым. Да, можно использовать "Скрытие фона", но при большом количестве текста в мультивыноске становятся невидимымы слишком большие куски плана, что не есть хорошо. В идеале, нужна мультивыноска, которая лишь частично скрывает фон, по аналогии с маской однострочного текста из Экспресс Тулз.
Перерыл и кучу тематических сайтов, включая и данный форум и не нашёл даже такого вопроса (неужели я один озаботился этим, или существует очевидное простое решение, скрытое от меня?), возможно - плохо искал.
Прошу помощи у сообщества - как сделать фон за мультивыноской частично видимым (частично прозрачным)?
Как вариант решения подойдёт даже динамический блок (сделал бы сам на основе аттрибутов и маски, да только совершенно нет идей, как заставить маску менять свой размер при изменении содержимого аттрибута).
Просмотров: 695
 
Непрочитано 25.03.2020, 17:04
| 1 #2
koMon


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


Скрытие фона + прозрачность мультивыноски
koMon вне форума  
 
Автор темы   Непрочитано 25.03.2020, 19:21
#3
Ovolyn


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


Прозрачность мультивыноски делает прозрачной только мультивыноску. А нужно сделать наоборот.
ПС: прозрачность подложки работает только, если в качестве подложки использовать подгружённый рисунок; с dwg подложкой это, почему-то не работает
Ovolyn вне форума  
 
Непрочитано 26.03.2020, 09:54
#4
koMon


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


Прозрачность мультивыноски делает прозрачным и мультивыноску и маску текста мультивыноски и выделение поля, делая таким образом возможность [частично] увидеть всё, что лежит под мультивыноской.
koMon вне форума  
 
Автор темы   Непрочитано 26.03.2020, 11:20
#5
Ovolyn


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


Цитата:
Сообщение от koMon Посмотреть сообщение
Прозрачность мультивыноски делает прозрачным и мультивыноску и маску текста мультивыноски и выделение поля, делая таким образом возможность [частично] увидеть всё, что лежит под мультивыноской.
Не совсем так, - прозрачность мультивыноски делает прозрачной саму мультивыноску и маску текста мультивыноски. Но это, по сути, ничего не меняет. Изначально чёрный текст мультивыноски сливается с чёрными (ОК - обычно подложку я делаю серым цветом) примитивами подложки под выноской.
Теперь полупрозрачный серый текст мультивыноски сливается с полупрозрачной серой подложкой под маской.
ИМХО, так даже хуже, так как разборчивость текста мультивыноски в приоритете.
Ovolyn вне форума  
 
Непрочитано 30.03.2020, 16:18
1 | 1 #6
skkkk


 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,465


Когда возникала такая необходимость, я делал копию выноски одну поверх другой, при этом нижней назначал цвет 255,255,255 и вес побольше (шрифт, разумеется, *.shx, а не *.ttf), а верхней - просто черный и вес потоньше. Задача была практически разовой, поэтому код я (вроде) под это дело не сооружал.
Приведу примерный план действий.
1. Для выбора мультивыносок можно воспользоваться быстрым выбором или конструкцией вроде:
Код:
[Выделить все]
 (defun C:MLSEL ()(sssetfirst nil (ssget '((0 . "MULTILEADER")))))
2. Назначить им вес, допустим 40 и цвет 255,255,255.
3. Выбрать еще один какой-то опорный объект на чертеже, к которому впоследствии привяжемся базовой точкой.
4. Скопировать этот набор в сторону и назначить выноскам вес, например, 25 и цвет 7.
5. Выбрать эти выноски и перенести за базовую точку (из п.3) обратно.
Действия эти желательно производить в конце работы перед печатью, поскольку любая корректировка выносок потребует повтора процедуры - общего или локального.
Процесс кажется по описанию довольно длительным, но если поднатаскаться, то занимает не больше 30-40 секунд.
Впрочем, и лисп там довольно простой будет, если не замахиваться на автоматическое обновление выносок-подложек с помощью реакторов при изменении черных выноскок. Если подойдет такой вариант, можно будет постучать по клаве в качестве разминки, правда не уверен, что получится скоро. Но тогда уже теме дорога в раздел "Программирование".
skkkk вне форума  
 
Автор темы   Непрочитано 30.03.2020, 18:07
#7
Ovolyn


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


Благодарю, skkkk, это дичайший костыль, но он работает. Результат мне понравился.
Теперь буду думать, как это улучшить и автоматизировать.
Спасибо большое
Ovolyn вне форума  
 
Непрочитано 01.04.2020, 16:29
2 | 1 #8
skkkk


 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,465


Решил сделать что-то более ли менее универсальное, поскольку нам порой бывает нужен подобный функционал не только для текстовых объектов.

Можно наделать похожих команд для любых объектов, настроить любые цвета, вес и кое-что еще - см. пояснения в комментариях кода (начиная с 30-й строки).

Код:
[Выделить все]
 ;;; Добавить подложки ВЫБРАННЫХ мультивыносок (Add Background MultiLeaders)
(defun C:ABML (/) (background_objects T nil "MULTILEADER" '(255 255 255) 0.80))
;;; Добавить подложки ВСЕХ мультивыносок (Add All Background MultiLeaders)
(defun C:AABML (/) (background_objects T T "MULTILEADER" '(255 255 255) 0.80)) 
;;; Удалить подложки ВЫБРАННЫХ мультивыносок (Delete Background MultiLeaders)
(defun C:DBML (/) (background_objects nil nil "MULTILEADER" nil nil))
;;; Удалить подложки ВСЕХ мультивыносок (Delete All Background MultiLeaders)
(defun C:DABML (/) (background_objects nil T "MULTILEADER" nil nil))
;;; Добавить подложки ВЫБРАННЫХ Мтекстов (Add Background MultiTexts)
(defun C:ABMT (/) (background_objects T nil "MTEXT" '(255 255 255) 0.80)) 
;;; Удалить подложки ВЫБРАННЫХ Мтекстов (Delete Background MultiTexts)
(defun C:DBMT (/) (background_objects nil nil "MTEXT" nil nil))
;;; Добавить подложки ВЫБРАННЫХ текстовых объектов (Add Background Text Objects)
(defun C:ABTO (/) (background_objects T nil "MULTILEADER,*TEXT" '(255 255 255) 0.80)) 
;;; Удалить подложки ВЫБРАННЫХ текстовых объектов (Delete Background Text Objects)
(defun C:DBTO (/) (background_objects nil nil "MULTILEADER,*TEXT" nil nil))



(defun background_objects 
;;; Функция для добавления/удаления "объектов-подложек", которые являются клонами выбранных объектов другого цвета
;;; Создает новый слой с заданными в аргументах параметрами.
;;; Имя слоя составляется из строк: "Background " + "<тип_объекта>" (3-й аргумент). 
;;; Создает копии выбранных объектов, оставляя их (копии) на том же слое, 
;;; а сами объекты набора переносит на новый слой (слой "подложек"), 
;;; принудительно назначая им свойства (цвет, вес) "Послою", а тип линий - как у текущего объекта.
;;; Таким образом, обеспечивается порядок прорисовки согласно очередности появления объектов в чертеже.
;;; Вспомогательные функция create_layer 
;;; Аргументы:
	(add_or_del_flag		;;; флаг добавления/удаления объектов-подложек. T - добавить, nil - удалить
	 allspace_or_sel_flag 	;;; выбор всех объектов в пространстве или рамкой (T - текущее пространство, nil - вручную)
	 object_types 	 		;;; строка с перечнем типов объектов через запятую, как в фильтре ssget
	 layer_color 			;;; цвет слоя подложки. Варианты:
							;;;   - целое число, например: 1 - красный... 
							;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 layer_lweight 			;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
;;; локальные переменные:
	 / 
	 background_layer_name  ss  background_ss  rest_ss i vla_obj new_vla_obj 
	)
	(setq background_layer_name (strcat "Background " (vl-string-translate "*" "x" (vl-string-translate "," "." object_types))))    ;;; имя слоя "подложек"
	(if (null (tblsearch "layer" background_layer_name))
		(create_layer 
			background_layer_name
			layer_color
			nil
			layer_lweight
			nil
		)
	)
	(cond 
	  ( add_or_del_flag
		(or 
			(setq ss (ssget "_I" (list (cons 0 object_types))))
			(if allspace_or_sel_flag
				(setq ss (ssget "_A" (list (cons 0 object_types)(cons 410 (getvar "CTAB")))))
				(setq ss (ssget (list (cons 0 object_types))))
			)
		)
		(if ss
			(progn
				(sssetfirst nil ss)
				(setq background_ss (ssget "_I" (list (cons 8 background_layer_name))))
				(setq rest_ss (ssget "_I" (list (cons -4 "<NOT")(cons 8 background_layer_name)(cons -4 "NOT>"))))
				(sssetfirst nil nil)
				(if background_ss (vl-cmdf "_.ERASE" background_ss ""))
				(if rest_ss
					(repeat (setq i (sslength rest_ss))
						(setq vla_obj (vlax-ename->vla-object (ssname rest_ss (setq i (1- i)))))
						(setq new_vla_obj (vla-Copy vla_obj))
						(vla-put-Layer vla_obj background_layer_name)
						(vla-put-Color vla_obj 256)
						(vla-put-LineWeight vla_obj -1)
						(if (= (vla-get-Linetype vla_obj) "ByLayer")
							(vla-put-Linetype vla_obj
								(vla-get-Linetype 
									(vla-Item 
										(vla-get-Layers 
											(vla-get-ActiveDocument (vlax-get-acad-object))
										) 
										(vla-get-Layer new_vla_obj)
									)
								)
							)
						)
					)
				)
			)
		)
	  )
	  (	T
		(or 
			(setq background_ss (ssget "_I" (list (cons 0 object_types)(cons 8 background_layer_name))))
			(if allspace_or_sel_flag
				(setq background_ss (ssget "_A" (list (cons 0 object_types)(cons 8 background_layer_name)(cons 410 (getvar "CTAB")))))
				(setq background_ss (ssget (list (cons 0 object_types)(cons 8 background_layer_name))))
			)
		)
		(if background_ss (vl-cmdf "_.ERASE" background_ss ""))
	  )
	)
	(vl-cmdf "_.REGENALL")
)

(defun create_layer 
;;; Функция создания слоя.
;;; Аргументы:
	(layer_name ;;; имя слоя (строка)
	 color      ;;; цвет слоя подложки. Варианты:
					;;;   - целое число, например: 1 - красный... 
					;;;	  - список целых чисел, соответствующих цвету RGB, например '(255 255 1)
	 linetype   ;;; тип линии (строка). nil - по умолчанию ("Continuous")
	 lineweight ;;; вес линии (вещественное число, например, 0.25). nil - по умолчанию
	 no_print   ;;; если T, то слой непечатаемый
	 /
	)	


	(if (and linetype (not (tblobjname "LType" linetype)))
		(vla-load (vla-get-Linetypes (vla-get-ActiveDocument (vlax-get-acad-object))) linetype "acadiso.lin")
	)
	(if	(null (tblsearch "layer" layer_name))
		(entmakex 
			(list 
				(vl-list* 0   "LAYER") 
				(vl-list* 100 "AcDbSymbolTableRecord") 
				(vl-list* 100 "AcDbLayerTableRecord") 
				(vl-list* 2 layer_name)
				(vl-list* 70 0)
				(if	(listp color)
					(vl-list* 420 
						(+
							(lsh (car  color) 16) ; R
							(lsh (cadr color)  8) ; G
							(caddr color)	      ; B
						) 
					) 
					(vl-list* 62 color)
				)
				(if	linetype
					(vl-list* 6 linetype)
					(vl-list* 6 "Continuous")
				)
				(if lineweight		 
					(vl-list* 370 (fix (* lineweight 100)))
					(vl-list* 370 -3); вес по умолчанию	
				)
				(if no_print
					(vl-list* 290 0) ; непечатаемый
					(vl-list* 290 1) ; печатаемый
				)
			)
		)

	)
)
(princ 
"Утилита добавления/удаления подложек для объектов загружена
ABML  - добавить подложки ВЫБРАННЫХ мультивыносок (Add Background MultiLeaders)
AABML - добавить подложки ВСЕХ мультивыносок (Add All Background MultiLeaders)
DBML  - удалить подложки ВЫБРАННЫХ мультивыносок (Delete Background MultiLeaders)
DABML - удалить подложки ВСЕХ мультивыносок (Delete All Background MultiLeaders)
ABMT  - добавить подложки Мтекстов (Add Background MultiTexts)
DBMT  - удалить подложки Мтекстов (Delete Background MultiTexts)
ABTO  - добавить подложки ВЫБРАННЫХ текстовых объектов (Add Background Text Objects)
DBTO  - удалить подложки ВЫБРАННЫХ текстовых объектов (Delete Background Text Objects)
"
)
(princ)
Миниатюры
Нажмите на изображение для увеличения
Название: 2020-04-01 at 16-18-37.gif
Просмотров: 27
Размер:	4.91 Мб
ID:	224586  

Последний раз редактировалось skkkk, 01.04.2020 в 20:33.
skkkk вне форума  
 
Автор темы   Непрочитано 01.04.2020, 19:25
#9
Ovolyn


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


Спасибо огромное, skkkk,
Ваш лисп - действительно, очень универсальная штука
А главное, - очень красиво и структурировано написано и откомментировано, поймёт даже человек, совершенно не знающий лисп (например - я)
Ovolyn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Степень прозрачности маски мультивыноски

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Степень огнестойкости здания очистных сооружений ливневой канализации Tyhig Пожарная безопасность 2 10.01.2017 16:39
При открытии чертежа разными версиями почему-то разворачивает мультивыноски? rtyu AutoCAD 9 07.12.2016 10:00
LISP. Не отображается часть полки мультивыноски kacugu LISP 2 16.05.2016 08:52
Помогите присвоить степень огнестойкости и конструктивной пожарной опасности пром. зданию. hav85 Пожарная безопасность 12 06.11.2015 02:45
Проблема с постановкой мультивыноски tructor AutoCAD 35 21.01.2015 16:03