|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
азы - это основы языка, как создать первый плагин под акад и т.п. А потом начинается чтение справки, форумов и пробы, пробы, пробы (благо сделать резервную копию кода программы не проблема). Копируете чужой код, пробуете.. Работает - начинаете разбирать каждую строчку и комментировать этот код. В голове начинает это все укладываться постепенно. Либо забыть про всё это
Цитата:
----- ну и еще одна ссылка - более подробного учебника за эти года, пожалуй, не видел. Пока еще доступно) Последний раз редактировалось Сергей812, 31.07.2024 в 14:54. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
adn-cis.org
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,606
|
Повесил объектный реактор на динамический блок с атрибутами. В функции-обработчике события :vlr-subObjModified планировал менять некоторые динамические параметры. Однако получаю вот такую ошибку:
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
А какой именно реактор был повешен? Хотя бы тип реактора.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Для С++/ObjectARX выделил отдельную тему: https://forum.dwg.ru/showthread.php?t=171769
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,606
|
Странное поведение блока с параметром видимости (круг и овал). Сделал блок, у которого два состояния видимости. На блок повесил объектный реактор, который делает много всякого и среди прочего - читает состояние видимости:
Код:
1. Состояние, когда блок вставлен в чертеж, все с ним пока как надо. 2. Переключена видимость с круга на овал. Здесь уже проблемка - должны были появиться ручки линейного параметра, которые видны на картинке 3. Отмечу, что в этот момент уже сработал объектный реактор. 3. Нажимаю ESC и просто выделяю блок - теперь он снова выглядит как надо. 4. Переключаю видимость на круг - и снова визуальный дефект в виде ручек линейного параметра, которые должны были отключиться, так как относятся к состоянию видимости "овал". Здесь тоже срабатывает реактор. При этом достаточно просто выделить блок заново - все лишние ручки исчезают, а нужные появляются. А к чему я упомянул чтение параметра видимости, так это к тому, что если я в лисп к нему не обращаюсь, то ручки динамических параметров сразу отображаются как надо, не нужно дополнительно обновлять выделение блока. Что это за глюк такой и как можно его побороть? Напрашивается вариант с программным выделением блока, но какое-то некрасивое решение. Может можно как-то обновить отрисовку этого блока в конце кода функции-обработчике реактора? Update, redraw - не работают. ----- добавлено через ~30 мин. ----- Вот на что еще обратил внимание - после срабатывания реактора (п.2 и п.4) - сбрасывается выделение блока. В обычном блоке без реакторов при переключении видимости выделение не сбрасывается. |
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,606
|
В этом случае сбрасывается выделение.
А как выделить vla объект? Что-то у меня не получается. Код:
----- добавлено через ~8 мин. ----- Опечатка в переменных - ssobj и ssobjs. Добавил еще Код:
![]() ----- добавлено через ~15 мин. ----- Работает вот такая конструкция - после переключения видимости блок остается выделенным и все ручки соответствуют состоянию видимости, но решение какое-то кривое и некрасивое. Код:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
У меня крепнет подозрение, что все можно сделать значительно менее геморно - но для этого надо задачу знать, ради решения которой вся эта катавасия вообще стартанула.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,606
|
Цитата:
Базовые требования: 1. Адаптация длины полки выноски к содержимому при вставке блока и редактировании. 2. Контроль положения текста относительно полки выноски (как для текста выше полки, так и для текста ниже полки). 3. Адаптация выносной линии, чтобы она всегда была по радиусу при смещении полки выноски. 4. При смещении полки выноски за ручку - отзеркаливание полки с текстом при условии, если точка полки пересекает вертикальную ось, проходящую через центр круга. 5. Работающие объектная привязка и ее отслеживание при добавлении блока узла и его изменении. 6. Вариации узла, где вместо круга - овал (вертикальный и горизонтальный). |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Похоже на позиционную выноску от СПДС. Если б не овал, можно было бы простой мультивыноской обойтись. Offtop: В свое время тоже бредил подобной идеей, но от реализации в конце концов отказался.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,606
|
Цитата:
А свой узел я реализовал через реакторы (ну, надо только еще горизонтальный овал доделать, но там все понятно - просто надо сесть и сделать). Он хорошо работает, мне просто не нравится реализация в частности вот этого момента с "нелегальными" ручками параметров, которые видны, хотя не должны быть видны. И наоборот - не видны тогда, когда должны быть видны. Хотелось бы более красивого решения, думаю у меня из-за недостатка знаний это сделано плохо. Странно, что чтение параметра видимости приводит к этой проблеме. ----- добавлено через ~60 мин. ----- Кажется разобрался в чем была проблема. Виновато вовсе не чтение параметра видимости, а функция vla-Update для блока после программной настройки динамических параметров. Вроде как пишут, что эта функция нужна, чтобы настроенные параметры вступили в действие и результат отобразился на экране. Но может быть это было нужно в ранних версиях Автокада (у меня Автокад 2022). Сейчас просто убрал эту функцию - и блок стал адекватно работать. И все параметры отображаются так, как я их программно настроил, и ручки у параметров правильные, и блок остается выделенным (в отличие от того, как было на скриншотах 2 и 4 выше, где у блока слетало выделение). |
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,606
|
Выявил интересную особенность по реакторам. Поправьте знающие, если я ошибаюсь.
Если повесить на примитив объектный реактор vlr-object-reactor, который отслеживает событие копирования :vlr-copied, то в функцию-обработчик передается в списке параметров имя объекта, созданного операцией копирования. Первая интересность состоит в том, что в самой функции-обработчике с этим объектом ничего сделать нельзя, потому что он еще не существует, ему всего лишь присвоено будущее имя. Чтобы работать с этой копией - нужна глобальная переменная, в которую я помещаю имя объекта и командный реактор vlr-command-reactor, который отслеживает событие окончания выполнения команды :vlr-commandEnded. В функции-обработчике этого события скопированный объект уже существует и с ним можно делать что угодно. Такой подход вполне работает с командой COPY. Однако объект скопировать можно еще и командой COPYCLIP и вставить командой PASTECLIP. И тут вторая интересность - после выполнения команды PASTECLIP объект, созданный копированием и от которого у нас есть только имя - все еще не существует. Соответственно в обработчике команды PASTECLIP ничего с объектом сделать нельзя. Судя по всему нужно делать еще один реактор типа vlr-acdb-reactor и там отслеживать событие добавления примитива :vlr-objectAppended и уже там делать то что надо с объектом, вставленным через буфер обмена. Попутно возник вопрос. Как проверить есть ли в базе примитивов чертежа объект с указанным именем? Это надо для проверки перед выполнением каких либо действий над объектом, когда после срабатывания реактора копирования есть только имя объекта, но нет понимания объект уже существует или еще нет. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Ты под именем понимаешь handle? Если да, то handent для неправильного хендла вернет nil
Для операций копирования я бы, скорее всего, использовал командные реакторы - они как-то мне ближе.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404
|
Ну пробуй получить от него entget. nil - объекта еще нет
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.11.2014
Сообщений: 2,606
|
Цитата:
----- добавлено через ~4 мин. ----- Да, можно так проверять существует объект или нет. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |