|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как узнать толщину линии конкретного слоя, не открывая диспетчер слоев?
Проектировщик
Воронеж
Регистрация: 28.10.2009
Сообщений: 331
|
||
Просмотров: 9591
|
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Давайте оперировать общепринятой терминологией: речь ведь идет о весе, правда?
Элемент управления слоями (выпадающее меню) в панели "Слои" не подлежит адаптации ни штатными средствами, ни лиспом. Сомневаюсь, что и другим языкам это под силу, думаю, этот элемент зашит глубоко в ядре. Но что-то все же на ум приходит. Вариант 1 - простой в реализации, но по удобству использования - так себе. Создается кнопка с командой (ну или просто команда), при вызове которой нужно будет указать объект, и в командной строке отобразится вес его слоя. Вариант 2 - более удобный, но сложный в реализации. Нужно создать прямо в Адаптации (_CUI) в правом верхнем углу или где-то найти иконки для кнопок с надписями, состоящими из чисел - всех возможных значений веса. Например для значения "ПоСлою" - кнопка "С", "ПоБлоку" - кнопка "Б" "По умолчанию" - "У", "0.09" - "9", "0.25" - "25" и так далее. Затем на лиспе, используя наработки VVA из этой темы, а также реакторы, менять эту кнопку, установленную, скажем на той же панели "Слои" рядом с выпадающим меню слева, в зависимости от значения веса текущего слоя. Таким образом, в этой кнопке будет решение вопроса этой темы. Скажу сразу: за реализацию второго варианта возьмусь только при условии наличия готовых иконок, что иконки я делать не буду ![]() Последний раз редактировалось skkkk, 19.03.2015 в 11:46. |
|||
![]() |
|
||||
Регистрация: 30.05.2012
Сообщений: 100
|
Цитата:
А задача в том, чтобы узнать конкретно - сколько это, ПоСлою: 0.09 или, допустим, 1.2.
__________________
В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
skkkk, второй вариант действительно хорош, но вот Vassa, в посте №3 верно подметил. Если можно сделать, чтобы на этой кнопке отображалась иконка, которая будет соответствовать информации о весе, взятой именно со свойств текущего слоя, то это и будет решением этой задачи.
|
|||
![]() |
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Цитата:
__________________
Делай хорошо, плохо само получится. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ок, ребята... Есть слой с весом линии, например, 0.20. На нем располагается отрезок, на который принудительно установлен вес 0.20. Теперь задача - используя эту самую кнопку, определить, что вес линии назначен "не по слою".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Vassa, да, сглупил я. Я прекрасно понял суть задачи, просто зря не подумав написал о "послое" и о "поблоке". Там больше в тему "По умолчанию".
VAV, да-да, Можно даже сделать, чтобы там отображалось значение веса выделенного объекта, в то время как в инструментальной панели "Свойства" будет написано "ПоСлою". Если выделено несколько объектов с разными значениями, то там будет либо прочерк, либо пустая иконка. Krieger, можно и туда, но кнопку можно поставить в привычное взгляду место, там где вся информация о слоях или свойствах объекта, а для взгляда в эту строку нужно пересечь весь экран. Для тех, кто не в теме: это в самом нижнем левом углу окна Автокада. |
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
skkkk, ну тогда уж для полного удобства было бы хорошо, чтобы при отсутствии выделенных объектов отображался вес текущего слоя, а при выделенном объекте - именно его вес. Это ведь реализуемо? Тогда я готов сделать иконки всех толщин. Больше я вряд ли смогу чем-то помочь решении в этой задачи
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
----- добавлено через ~6 мин. ----- Цитата:
Да. По крайней мере, я не вижу препятствий на первый взгляд. Если реакторы не пугают. А то Алексей предупреждал: Цитата:
![]() Можно пока, для пробы, чтобы удостовериться, что это реализуемо, сделать пару-тройку иконок для первых значений. Если все срастется, тогда и доделать остальные. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Смущает еще одно: кнопки для такой цели - это как-то несерьезно что ли. Кто знает, можно ли запрограммировать НЕ на лиспе элемент управления, подобный таковому в панели "Свойства", например, тому же весу? Пусть без иллюстрации физической толщины линии, а просто с текстом. За неимением лучшего, конечно, можно обойтись пока и кнопкой.
Я в свою очереть в такие сроки - не обещаю. Только по мере возможности. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Krieger, почему "рыба"? Вполне себе рабочий код. Определяет назначенный слою вес по клику на объект этого слоя. Без вызова дополнительных функций, автоматически. А что, тоже ведь вариант.
Вполне отвечает на вопрос темы. Как узнать..? Просто загрузить код Krieger'а, кликнуть на объект и смотреть в статусную строку. Правда перед выбором следующего объекта надо сбросить активный выбор. |
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
Krieger, спасибо, там полегче теперь будет чертить. Но при выборе объектов в командной строке всегда вылазит ошибка: ; ошибка: неверный тип аргумента: lselsetp nil. И можно ли сделать так, чтобы при отсутствии выбранных объектов в строке отображалась толщина текущего слоя?
Но и идея skkkk мне тоже нравится: можно расположить кнопку рядом с панелью "свойства" и вся информация будет в одном месте. Прикладываю две иконки:для толщины 0,00 и 0,05. |
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
|
|||
![]() |
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,176
|
Цитата:
На широкоэкранном мониторе вполне удобно. Опция доступна начиная с версии 2008, кажется. В 2010 точно есть. В какой Вы работаете? Последний раз редактировалось kp+, 20.01.2015 в 15:59. |
|||
![]() |
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,176
|
Цитата:
Впрочем, дело вкуса. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
kp+, я именно так я и сделал в свое время и был несказанно доволен - понравилось. Слева сверху закреплен Диспетчер Слоев, ниже - Панель Свойств. Моник широкий, очень удобно. Причем поначалу колонки менял местами, в таком порядке, как в выпадающем меню на панели "Слои". Но часто по невыявленным причинам колонки возвращались в исходное состояние, что очень подбешивало, и в итоге я оставил их так. Но при оптимальной ширине этих закрепленных слева панелей колонка "Вес" не влезает.
![]() Получилось, что VAV подтолкнул меня на рождение такой идеи. Думаю, что это должно быть довольно удобно. Я тут набросал на скорую руку предварительный вариант этой идеи, используя в академических целях код VVA из одной темы, код mmax'а из другой, а также скопировал пару строк Krieger'а несколькими постами выше. Должен сказать, что значительно облегчил себе жизнь. ![]() Для работы кода необходимо добавить на панель "Свойства" кнопку - любую, можно просто, без макросов и картинок. Добавить ее нужно на четвертое место после элементов "Цвет", "Тип" и "Вес". Этому четвертому месту соответствует порядковый номер - цифра 3 в коде (начиная с нуля), сопровожденная комментарием. Стоп, пока пробуем добавить кнопку в начало панели, а в коде - цифра ноль. Если место будет другим, номер этот нужно поменять в коде, как и название панели, если хочется расположить на другой панели или если Автокад английский (см. также примечание внизу поста). Программно реализовывать это я не стал - смысл невелик. Далее, в папку на путях доступа нужно добавить иконки, имя каждой из которых соответствует отображаемому на ней номеру. Две у нас уже есть: 0 и 5, - но пока не будет остальных, Автокад будет ворчать при выборе объекта или активации слоя, для веса которых нет соответствующей иконки. Затем код нужно добавить в автозагрузку, перезагрузить КАД и тестировать. Код:
В общем, тестируем ![]() ----- добавлено через ~12 мин. ----- Обратите внимание на зачеркнутый фрагмент. Я тестировал кнопку в начале панели, на первом месте, а когда решил сделать снимки экрана, перенес ее в конец. Но почему-то, когда кнопка стоит после элементов управления (цвет, тип, вес) код не срабатывает. Видимо, придется выносить ее в отельную панель. И название панели изменить в коде. Последний раз редактировалось skkkk, 21.01.2015 в 13:29. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Можно просто иконки добавить в папку, например, C:\Program Files\Autodesk\AutoCAD 2011\Support, но это не совсем порядочно. Лучше создать папку в удобном месте и в окне настроек (команда _.OPTIONS) во вкладке Файлы добавить эту папку в список путей доступа к вспомогательным файлам.
|
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
skkkk, попробовал. Результаты такие: в первом же файле (чистый чертеж, который загружается автокадом при открытии), в котором я подгрузил ваш лисп все заработало, иконка менялась. Потом я загрузил уже свой чертеж и в нем уже ничего не работало. Ни при смене слоев, ни при выборе объектов. Переключаюсь на первый чертеж - все работает, потом обратно на второй - опять не работает. Потом я закрыл все чертежи и создал новый. В нем тоже ничего не работало. Пробовал даже вторично подгружать лисп - безрезультатно. Может я не правильно подгружаю лисп? Я делаю это так (в русскоязычной локализации):команда ЗАГПРИЛ и далее выбираю нужный лисп и загружаю его.
кое-что не так делал. сейчас еще потестирую и отпишусь Последний раз редактировалось VAV, 22.01.2015 в 09:31. |
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
Итак.Для начала я подгружаю ваш лисп. Делаю это так (в русскоязычной локализации):команда ЗАГПРИЛ и далее выбираю нужный лисп и загружаю его. Я так понял этим действием я активирую лисп лишь в том чертеже,в котором я его запустил. Поэтому чтобы лисп работал и в последующих открываемых чертежах, кроме этого в окне загрузка/выгрузка приложений (ЗАПРИЛ) я запихиваю этот лисп в автозагрузку. После этих действий все работает корректно: иконка меняется.
Теперь закрываю автокад и открываю его вновь. Сразу говорю: папка, где лежит ваш лисп я не добавлял в список доверенных местоположений. Поэтому когда дело доходит до подгрузки файла с вашим кодом вылазит стандартное сообщение о том, что файл находится вне указанных доверенных местоположений и предлагают пользователю самому выбрать загружать файл или нет. И проблема в том, что это окно висит 1 секунду. Если я успеваю нажать кнопку "загрузить", то все работает. Если успеваю нажать кнопку "не загружать", то, соответственно, автокад работает без этого файла. Но, если я не успеваю за эту одну секунду сделать выбор и нажать "загрузить" или "не загружать", то окно пропадает и автокад дальше не грузится. В командной строке висит такая строка: s::startup-load (прикладываю скрин). Никакие кнопки не работают. Приходится выбивать автокад из диспетчера задач. Если добавить папку в доверенные источники, то все подгружается корректно. Почему так? Например с прогой ModPlus это окошко висит до тех пор, пока я не сделаю свой выбор. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Матчасть.
----- добавлено через ~5 ч. ----- Цитата:
Цитата:
![]() А вот что насчет того, на одной ли кнопке размещать или на двух? И сейчас на кнопке макроса нет, а можно поставить, написав еще одну функцию и повесив на нее. Можно будет тогда менять вес текущего слоя прям с этой кнопки, если объекты не выбраны, или вес слоя выбранного объекта. |
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
Ну ладно, добавлю в довернные. Надеюсь все корректно будет работать.
На счет кнопок. Мне кажется на одной можно разместить. Вроде бы три цифры на одной кнопке вполне читаемы. По поводу макроса тоже хорошая идея. Было бы не плохо. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VAV, стало быть, вопрос в иконках
![]() Над макросом нужно подумать. Либо сделать, чтоб при нажатии на кнопку вываливалось меню при включенном динамическом вводе, например, такое, как у команды _PEDIT. Динамический ввод, если не нравится, можно включать программно только на время выбора, затем отключать. Или делать эту кнопку в виде подменю, и нажав ее и не отпуская выбирать из выпадающих кнопок нужную. Если не ошибаюсь, такой механизм реализован по умолчанию на кнопке "Вставить блок". Первый вариант легко реализуем. Второй - быстро не обещаю. И даже пока не уверен, можно ли его воплотить. |
|||
![]() |
|
||||
Проектировщик Регистрация: 28.10.2009
Воронеж
Сообщений: 331
![]() |
skkkk, иконки выложу, как сделаю.
Меню и вываливающееся пойдет. На счет програмного включения/отключения динамического ввода с ним стоит заморачиваться, на мой взгляд, только если можно сделать такой режим: если дин. ввод до использования макроса был включен, то ничего не менять. А если был выключен, то включить на время выбора, а потом отключить. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Для чего нужны фильтры слоев?Как ими пользоваться? | Aysulu | AutoCAD | 43 | 17.04.2019 10:59 |
Линии электрических соединений | Shoorup | Программирование | 23 | 07.02.2015 15:13 |
Почему не проходит теплорасчет? | Suom | Конструкции зданий и сооружений | 15 | 10.08.2011 17:22 |