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

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

Как узнать толщину линии конкретного слоя, не открывая диспетчер слоев?

Ответ
Поиск в этой теме
Непрочитано 20.01.2015, 10:03
Как узнать толщину линии конкретного слоя, не открывая диспетчер слоев?
VAV
 
Проектировщик
 
Воронеж
Регистрация: 28.10.2009
Сообщений: 331

Как узнать толщину линии конкретного слоя, не открывая диспетчер слоев?
Когда толщина линии задана как "по слою", то чтобы узнать, какой толщины она будет при печати приходится открывать диспетчер слоев и там уже смотреть заданую толщину линий этого слоя. Как-то можно это сделать быстрее? Например, чтобы толщина отображалась вместе с названием слоя на панели инструментов "слои".
Просмотров: 9583
 
Непрочитано 21.01.2015, 12:42
1 | #21
skkkk


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


kp+, я именно так я и сделал в свое время и был несказанно доволен - понравилось. Слева сверху закреплен Диспетчер Слоев, ниже - Панель Свойств. Моник широкий, очень удобно. Причем поначалу колонки менял местами, в таком порядке, как в выпадающем меню на панели "Слои". Но часто по невыявленным причинам колонки возвращались в исходное состояние, что очень подбешивало, и в итоге я оставил их так. Но при оптимальной ширине этих закрепленных слева панелей колонка "Вес" не влезает.
Получилось, что VAV подтолкнул меня на рождение такой идеи. Думаю, что это должно быть довольно удобно.

Я тут набросал на скорую руку предварительный вариант этой идеи, используя в академических целях код VVA из одной темы, код mmax'а из другой, а также скопировал пару строк Krieger'а несколькими постами выше. Должен сказать, что значительно облегчил себе жизнь. Спасибо авторам, надеюсь они не станут возражать. Учитывая наказ Алексея Кулика, упомянутый в моем посте #10, предупреждаю: в коде присутствуют реакторы - целых три!

Для работы кода необходимо добавить на панель "Свойства" кнопку - любую, можно просто, без макросов и картинок. Добавить ее нужно на четвертое место после элементов "Цвет", "Тип" и "Вес". Этому четвертому месту соответствует порядковый номер - цифра 3 в коде (начиная с нуля), сопровожденная комментарием. Стоп, пока пробуем добавить кнопку в начало панели, а в коде - цифра ноль. Если место будет другим, номер этот нужно поменять в коде, как и название панели, если хочется расположить на другой панели или если Автокад английский (см. также примечание внизу поста). Программно реализовывать это я не стал - смысл невелик. Далее, в папку на путях доступа нужно добавить иконки, имя каждой из которых соответствует отображаемому на ней номеру. Две у нас уже есть: 0 и 5, - но пока не будет остальных, Автокад будет ворчать при выборе объекта или активации слоя, для веса которых нет соответствующей иконки. Затем код нужно добавить в автозагрузку, перезагрузить КАД и тестировать.
Код:
[Выделить все]
 (vl-load-com)
(defun LayerWeightControl ( / adoc button ss weight i i-weight icon-file icon)
	(setq adoc (vla-get-ActiveDocument (vlax-get-acad-object))
		  button  
			(vla-Item
				(vla-Item
					(vla-get-Toolbars
						(vla-Item 
							(vla-get-MenuGroups (vlax-get-acad-object))
							"ACAD" ;_Группа меню
						)
					)
					"Свойства"     ;_Имя панели
				)
				0				   ;_ Номер кнопки на панели, начиная с нуля
			)
		  ss (ssget "_I")
	)
	(cond 
	  (	ss ; если есть выделенные объекты
		(setq weight (vla-get-LineWeight
						(vla-Item
							(vla-get-Layers adoc)
							(vla-get-Layer (vlax-ename->vla-object (ssname ss 0)))
						)
					)
		)
		(if (> (setq i (sslength ss)) 1)
			(progn
				(setq i-weight weight)
				(while (and (> i 0) (= i-weight weight))
					(setq i-weight 
								(vla-get-LineWeight
									(vla-Item
										(vla-get-Layers adoc)
										(vla-get-Layer (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
									)
								)
					)
				)
				(if (/= i-weight weight) (setq weight "Пустая иконка"))
			)
		)
	  )
	  (	(null ss) ; если нет выделенных объектов
		(setq weight (vla-get-LineWeight
						(vla-Item
							(vla-get-Layers adoc)
							(getvar "CLAYER")
						)
					)
		)
	  )
	)
	(setq icon-file (strcat (vl-princ-to-string weight) ".bmp"))
	(vla-GetBitmaps button 'SmallBitmapName 'BigBitmapName)
	(if (/= (strcase(vl-filename-base SmallBitmapName)) (vl-princ-to-string weight))
		(progn
			(if (setq icon (findfile icon-file))
				(vla-SetBitmaps button icon icon)
				(alert (strcat "Файл \"" icon-file "\" не найден!"))	
			)
		)
	)
)


;;; Реактор на завершение команд изменения текущего слоя или его свойств:
(vlr-command-reactor nil '((:vlr-commandEnded . commandEnded)))

;;; Реакция на завершение команд изменения текущего слоя:
(defun commandEnded (reac data)
	(if 
		(vl-position (car data) 
			(list "LAYER" 
				  "_LAYER" 
				  "-LAYER" 
				  "_-LAYER" 
				  "SETVAR" 
				  "_SETVAR" 
				  "_LAYERP" 
				  "LAYERP" 
				  "LAYMCUR"
			)
		)
		(LayerWeightControl)
    )
	(princ)
)

  
;;; Реактор на активацию файла (чтобы изменять иконку при перелистывании чертежей по Ctrl+Tab):
(vlr-docmanager-reactor nil '((:VLR-documentToBeActivated . documentToBeActivated)))

;;; Реакция на активацию файла:
(defun documentToBeActivated (reac data / ) 
	(LayerWeightControl)
)


;;; Реактор на изменение набора выбранных объектов:
(vlr-miscellaneous-reactor nil '((:vlr-pickfirstModified . pickfirstModified)))

;;; Реакция на изменение набора выбранных объектов:
(defun pickfirstModified (reac data /)
	(LayerWeightControl)
)
(princ)
Сразу предвижу трудность в рисовании иконок. Очевидно, что возникнут проблемы с восприятием иконки, на которой будет трехзначное число, а оно по-любому будет, например, для веса 1.06. Поэтому, подумав, я решил изобразить вариант с размещением этого числа (с запятой и знаками разрядности как в оригинале) на двух иконках. Увидеть, что получилось, можно в первом вложении. Аляповато, конечно, учитывая еще, что и рисование никогда не было моим коньком, но думаю, это лучше, чем ломать глаза, как во вложении втором. Для этого придется, правда делать больше иконок и немного переписывать код, но думаю, овчинка выделки будет стоить.
В общем, тестируем

----- добавлено через ~12 мин. -----
Обратите внимание на зачеркнутый фрагмент. Я тестировал кнопку в начале панели, на первом месте, а когда решил сделать снимки экрана, перенес ее в конец. Но почему-то, когда кнопка стоит после элементов управления (цвет, тип, вес) код не срабатывает. Видимо, придется выносить ее в отельную панель. И название панели изменить в коде.
Миниатюры
Нажмите на изображение для увеличения
Название: Пример 1.JPG
Просмотров: 40
Размер:	19.1 Кб
ID:	142283  Нажмите на изображение для увеличения
Название: Пример 2.JPG
Просмотров: 40
Размер:	17.7 Кб
ID:	142284  

Последний раз редактировалось skkkk, 21.01.2015 в 13:29.
skkkk вне форума  
 
Автор темы   Непрочитано 21.01.2015, 13:34
#22
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


Оо, спасибо, буду тестировать. Только вот не понятно:
Цитата:
Сообщение от skkkk Посмотреть сообщение
в папку на путях доступа нужно добавить иконки
Где именно нужно создать папку с иконками?
VAV вне форума  
 
Непрочитано 21.01.2015, 13:47
#23
skkkk


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


Цитата:
Сообщение от VAV Посмотреть сообщение
Где именно нужно создать папку с иконками?
Можно просто иконки добавить в папку, например, C:\Program Files\Autodesk\AutoCAD 2011\Support, но это не совсем порядочно. Лучше создать папку в удобном месте и в окне настроек (команда _.OPTIONS) во вкладке Файлы добавить эту папку в список путей доступа к вспомогательным файлам.
skkkk вне форума  
 
Автор темы   Непрочитано 22.01.2015, 09:23
#24
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


skkkk, попробовал. Результаты такие: в первом же файле (чистый чертеж, который загружается автокадом при открытии), в котором я подгрузил ваш лисп все заработало, иконка менялась. Потом я загрузил уже свой чертеж и в нем уже ничего не работало. Ни при смене слоев, ни при выборе объектов. Переключаюсь на первый чертеж - все работает, потом обратно на второй - опять не работает. Потом я закрыл все чертежи и создал новый. В нем тоже ничего не работало. Пробовал даже вторично подгружать лисп - безрезультатно. Может я не правильно подгружаю лисп? Я делаю это так (в русскоязычной локализации):команда ЗАГПРИЛ и далее выбираю нужный лисп и загружаю его.
кое-что не так делал. сейчас еще потестирую и отпишусь

Последний раз редактировалось VAV, 22.01.2015 в 09:31.
VAV вне форума  
 
Автор темы   Непрочитано 22.01.2015, 11:02
#25
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


Итак.Для начала я подгружаю ваш лисп. Делаю это так (в русскоязычной локализации):команда ЗАГПРИЛ и далее выбираю нужный лисп и загружаю его. Я так понял этим действием я активирую лисп лишь в том чертеже,в котором я его запустил. Поэтому чтобы лисп работал и в последующих открываемых чертежах, кроме этого в окне загрузка/выгрузка приложений (ЗАПРИЛ) я запихиваю этот лисп в автозагрузку. После этих действий все работает корректно: иконка меняется.
Теперь закрываю автокад и открываю его вновь. Сразу говорю: папка, где лежит ваш лисп я не добавлял в список доверенных местоположений. Поэтому когда дело доходит до подгрузки файла с вашим кодом вылазит стандартное сообщение о том, что файл находится вне указанных доверенных местоположений и предлагают пользователю самому выбрать загружать файл или нет. И проблема в том, что это окно висит 1 секунду. Если я успеваю нажать кнопку "загрузить", то все работает. Если успеваю нажать кнопку "не загружать", то, соответственно, автокад работает без этого файла. Но, если я не успеваю за эту одну секунду сделать выбор и нажать "загрузить" или "не загружать", то окно пропадает и автокад дальше не грузится. В командной строке висит такая строка: s::startup-load (прикладываю скрин). Никакие кнопки не работают. Приходится выбивать автокад из диспетчера задач. Если добавить папку в доверенные источники, то все подгружается корректно. Почему так? Например с прогой ModPlus это окошко висит до тех пор, пока я не сделаю свой выбор.
Миниатюры
Нажмите на изображение для увеличения
Название: зависание при открыытии0.png
Просмотров: 35
Размер:	25.3 Кб
ID:	142373  Нажмите на изображение для увеличения
Название: зависание при открыытии.png
Просмотров: 29
Размер:	14.0 Кб
ID:	142374  
VAV вне форума  
 
Непрочитано 22.01.2015, 11:38
#26
skkkk


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


Матчасть.

----- добавлено через ~5 ч. -----
Цитата:
Сообщение от VAV Посмотреть сообщение
Сразу говорю: папка, где лежит ваш лисп я не добавлял в список доверенных местоположений.
А нужно добавить в доверенные, в чем проблема-то? И в автозагрузку этот файл - и дело с концом. Или страх перед предупреждением Кулика Алексея о реакторах? Ну так все плохое, что может случится - может случится и при разовой загрузке, все равно любое приложение юзер всегда использует на свой страх и риск, а тестировать его лучше не в рабочих файлах, которые есть риск запороть, а в копиях. Самое страшное в таком случае может быть, пожалуй переустановка Автокада.
Цитата:
Сообщение от VAV Посмотреть сообщение
Почему так? Например с прогой ModPlus это окошко висит до тех пор, пока я не сделаю свой выбор.
Этого я сказать не могу, да и не интересно разбираться, если честно. Зачем? Да и версия у меня другая. Если есть намерение пользоваться так добавляем в доверенные, в автозагрузку и пользуемся.

А вот что насчет того, на одной ли кнопке размещать или на двух? И сейчас на кнопке макроса нет, а можно поставить, написав еще одну функцию и повесив на нее. Можно будет тогда менять вес текущего слоя прям с этой кнопки, если объекты не выбраны, или вес слоя выбранного объекта.
skkkk вне форума  
 
Автор темы   Непрочитано 22.01.2015, 18:15
#27
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


Ну ладно, добавлю в довернные. Надеюсь все корректно будет работать.
На счет кнопок. Мне кажется на одной можно разместить. Вроде бы три цифры на одной кнопке вполне читаемы. По поводу макроса тоже хорошая идея. Было бы не плохо.
VAV вне форума  
 
Непрочитано 22.01.2015, 19:38
#28
skkkk


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


VAV, стало быть, вопрос в иконках
Над макросом нужно подумать. Либо сделать, чтоб при нажатии на кнопку вываливалось меню при включенном динамическом вводе, например, такое, как у команды _PEDIT. Динамический ввод, если не нравится, можно включать программно только на время выбора, затем отключать. Или делать эту кнопку в виде подменю, и нажав ее и не отпуская выбирать из выпадающих кнопок нужную. Если не ошибаюсь, такой механизм реализован по умолчанию на кнопке "Вставить блок". Первый вариант легко реализуем. Второй - быстро не обещаю. И даже пока не уверен, можно ли его воплотить.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.JPG
Просмотров: 39
Размер:	24.0 Кб
ID:	142405  Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 36
Размер:	14.7 Кб
ID:	142406  
skkkk вне форума  
 
Автор темы   Непрочитано 23.01.2015, 11:02
#29
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


skkkk, иконки выложу, как сделаю.
Меню и вываливающееся пойдет. На счет програмного включения/отключения динамического ввода с ним стоит заморачиваться, на мой взгляд, только если можно сделать такой режим: если дин. ввод до использования макроса был включен, то ничего не менять. А если был выключен, то включить на время выбора, а потом отключить.
VAV вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как узнать толщину линии конкретного слоя, не открывая диспетчер слоев?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего нужны фильтры слоев?Как ими пользоваться? Aysulu AutoCAD 43 17.04.2019 10:59
Линии электрических соединений Shoorup Программирование 23 07.02.2015 15:13
Почему не проходит теплорасчет? Suom Конструкции зданий и сооружений 15 10.08.2011 17:22