Добавление свойств в панель свойств и в диалог QSelect

Автор Тема: Добавление свойств в панель свойств и в диалог QSelect  (Прочитано 14639 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 818
  • Карма: 166
    • Мои плагины к Автокаду
Хочу поднять старую тему: добавление пользовательских свойств к объектам чертежа и отображение их в панели свойств (OPM) и диалоге QSelect. По всему интернету на эту тему есть только одна статья Kean Walmsley от 2009 года http://through-the-interface.typepad.com/through_the_interface/2009/03/exposing-autocads-properties-palette-functionality-to-net---part-1.html. На тот момент никакого доступа к OPM из кода на C# не было и надо было писать отдельный плагин на C++. Хотелось бы узнать у знатоков:
1.   Не изменилась ли ситуация к лучшему за последние 6 лет? Может уже появилось API под .Net ?
2.   Я смог, в конце концов, откомпилировать пример из той статьи, но свойства, добавляемые этим способом, появляются только в OPM, но не появляются в диалоге QSelect. Почему так? Я попробовал компилировать другие примеры на чистом ObjectARX (например, вот этот http://adndevblog.typepad.com/autocad/2012/04/devtv-non-com-property-system.html) и в результате получил полноценные свойства, которые видны и там и там. К сожалению, я не могу использовать эти примеры для своего проекта – моих знаний в C++ не хватает даже для замены свойства double на строковое :(

Спасибо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
1.   Не изменилась ли ситуация к лучшему за последние 6 лет? Может уже появилось API под .Net ?
Нет. И вряд ли когда-то появится.
 
добавляемые этим способом, появляются только в OPM, но не появляются в диалоге QSelect. Почему так?
Сложно сказать. Откуда берутся свойства в QSELECT нигде не документировано. Думаю что в него попадают только статические свойства собственных примитивов (Custom Entity), а не динамические (как например сделано в моём GeomProps), которые в статье Kean Walmsley описаны.





Мне совершенно непонятно зачем вообще добавлять в QSELECT свои свойства. Если бы мне нужно было бы отбирать примитивы по своим критериям, то я бы написал свою команду, которая это делает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Средствами AutoCAD .NET API можно создать свою, специализированную панель свойств (либо целый набор различных вкладок) и наполнять её произвольным контентом (хоть WinForms, хоть WPF, хоть обеими сразу), каким душа пожелает. Делается это достаточно просто и работает надёжно.

Несомненно, модернизировать уже существующую "родную" панель свойств - это заманчиво, но в виду сложности сего действа я бы не стал испытывать судьбу в этом направлении.

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 818
  • Карма: 166
    • Мои плагины к Автокаду
Как все печально... Мало того, что пользователям не дали самим добавлять свойства, так и программистам усложнили жизнь как могли.. Политика Автодеска?
Цитировать
в него попадают только статические свойства
В коде http://adndevblog.typepad.com/autocad/2012/04/devtv-non-com-property-system.html создаются именно динамические свойства. И они работаю как надо.
Цитировать
зачем вообще добавлять в QSELECT свои свойства
Диалог поиска объектов по свойствам - одно из самых удобных изобретений автокада. Вряд ли пользователь обрадуется, если ему скажут, что искать окружности по радиусам надо одной командой, а по площади - другой.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Диалог поиска объектов по свойствам - одно из самых удобных изобретений автокада. Вряд ли пользователь обрадуется, если ему скажут, что искать окружности по радиусам надо одной командой, а по площади - другой.
Ты можешь подменить эту команду [QSELECT] своей. GUI реализовать по подобию оригинала, добавив в него тот функционал, который ты планировал. Т.о. для пользователя это будет работать прозрачно, как будто это родная команда автокада.

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 818
  • Карма: 166
    • Мои плагины к Автокаду
Цитировать
можно создать свою, специализированную панель свойств
Так и работаем последние 10 лет, с двумя панелями свойств на одном экране. Случайно увидел, что люди как-то заталкивают новые свойства в стандартную панель - обрадовался. Но увы...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Мало того, что пользователям не дали самим добавлять свойства, так и программистам усложнили жизнь как могли.. Политика Автодеска?
Это мы не обсуждаем на форуме: п. 3.9 Правил.
В коде http://adndevblog.typepad.com/autocad/2012/04/devtv-non-com-property-system.html создаются именно динамические свойства. И они работаю как надо.
Там совершенно другая логика подключения свойств. Ну и эти свойства доступны только в последних версиях AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 818
  • Карма: 166
    • Мои плагины к Автокаду
Цитировать
Это мы не обсуждаем на форуме
Извиняюсь, наболело...
Цитировать
эти свойства доступны только в последних версиях AutoCAD
А нет ли где нибудь примерчика на C++ с подключением строкового свойства старым способом, через COM ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
А нет ли где нибудь примерчика на C++ с подключением строкового свойства старым способом, через COM ?
Это свойство будет только в Панели Свойств, но его не будет в QSELECT. Это тебя устроит?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Как вариант, можно было бы посмотреть в сторону WPF PropertyGrid. Написать обёртки для представления свойств базового класса - Entity, а так же для его конкретных реализаций (линии, окружности, полилинии и т.п.). Несомненно, придётся потратить на это некоторое время, однако в результате может получиться портируемое, расширяемое решение, пригодное для многократного повторного использования.

В принципе это можно было бы даже выполнить в виде отдельного проекта, результат которого можно было бы предоставить в тот же онлайновый AppStore by Autodesk (или как он там называется). предоставление API  и документация могли бы сделать это решение интересным не только для пользователя, но и для .net-разработчиков, пишущих код под акад (дабы они могли программно работать с этим). А если дополнительно предоставить для работы с ним API для лиспописателей, то интерес к нему может оказаться ещё выше (не балованы они DCL'ом) :).
имхо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Я к примеру НЕ-COM-свойств добавил строчное свойство. Выглядит так:





Исходники (для AutoCAD 2015) приложил.

avc
Это то, что ты хотел?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 818
  • Карма: 166
    • Мои плагины к Автокаду
Цитировать
Это свойство будет только в Панели Свойств, но его не будет в QSELECT. Это тебя устроит?
А точно не будет? Я пока не понял логики, с какими свойствами дружит QSELECT. Только Не-КОМ ? Тогда не устроит :(
Придется писать для старых версий Автокада через .Net и без поддержки QSELECT. Но хотя бы для новых версий хотелось бы задействовать Не-КОМ свойства.
Пока писал, вы уже пример опубликовали :) AcString значит надо, а я все ACHAR* подставлял... Буду пробовать. Огромное спасибо!

Оффлайн avcАвтор темы

  • ADN Club
  • *****
  • Сообщений: 818
  • Карма: 166
    • Мои плагины к Автокаду
Цитировать
Как вариант, можно было бы посмотреть в сторону WPF PropertyGrid. Написать обёртки для представления свойств базового класса....
Отличный план! Осталось выкроить пару гигачасов свободного времени :) Но настроение поднялось, спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13877
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
А точно не будет?
Ну ты же видишь как происходит в моём GeomProps, в котором свойства подключаются динамически к любым примитивам.
Я пока не понял логики, с какими свойствами дружит QSELECT. Только Не-КОМ ?
Еще со статическими свойствами (свойствами Custom Entity).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Как вариант, можно было бы посмотреть в сторону WPF PropertyGrid.
Андрей, пробовал это использовать? Я пробовал и отказался от его использования. В бесплатной версии у этого контрола нет свойства SelectedObjects. Следовательно, можно вывести свойства только одного объекта. В платной есть, но стоимость довольно существенная, ради одного контрола многовато.
Я недавно пытался найти хотя бы один бесплатный более-менее адекватно работающий WPF PropertyGrid - мои поиски не увенчались успехом.
Правда, если этот котрол очень нужен, можно использовать такой готовый из WinForms, но придется мириться со всеми его недостатками.
Так что, этот вопрос не так просто решается.