Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Александр Ривилис от 17-02-2016, 21:57:07

Название: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 17-02-2016, 21:57:07
Те, кто интересовался, как добавить свои свойства в Панель свойств при помощи AutoCAD .NET API наверняка помнят статью Kean Walmsley: http://through-the-interface.typepad.com/through_the_interface/2009/03/exposing-autocads-properties-palette-functionality-to-net---part-1.html
Прошло много лет с тех пор. Cyrille Fauvel сделал обновлённую версию. Исходник и примеры можно найти здесь: https://github.com/cyrillef/OPMNetExt
 
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 22-01-2017, 16:43:25
Исправленная версия от Virupaksha Aithal (http://adndevblog.typepad.com/autocad/virupaksha-aithal.html) для AutoCAD 2017 и VS 2015: http://forums.autodesk.com/autodesk/attachments/autodesk/34/33606/1/OPMNetExt-master.zip (http://forums.autodesk.com/autodesk/attachments/autodesk/34/33606/1/OPMNetExt-master.zip)   
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Пекшев aka Modis от 22-01-2017, 17:54:39
Стоит из названия убрать "для AutoCAD 2016" и может даже закрепить
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 22-01-2017, 17:55:42
Стоит из названия убрать "для AutoCAD 2016" и может даже закрепить
Согласен.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 23-03-2017, 00:19:22
Добавил версию, адаптированную под AutoCAD 2018.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Пекшев aka Modis от 15-05-2017, 18:30:03
Объясните мне, не знакомому с С++:
1. Чтобы открыть проект по ссылкам нужен VS 2015 (2010)? У меня 2017 - не открывается.
2. Для каждой версии автокада (2010-2018) должна собираться отдельная библиотека? Универсальной сделать невозможно?
3. Ко второму пункту - от разрядности платформы тоже зависит? 32 или 64
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 15-05-2017, 18:51:57
1. Чтобы открыть проект по ссылкам нужен VS 2015 (2010)? У меня 2017 - не открывается.
Для какой версии AutoCAD? VS 2017 без установленного VS 2015 не подойдёт.
2. Для каждой версии автокада (2010-2018) должна собираться отдельная библиотека? Универсальной сделать невозможно?
Универсальной сделать невозможно. Для версии 2010...2012,2013...2014,2015...2016,2017,2018 нужны отдельные модули.
3. Ко второму пункту - от разрядности платформы тоже зависит? 32 или 64
Да. Т.е. количество модулей увеличивается в два раза.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Пекшев aka Modis от 15-05-2017, 19:00:34
Для какой версии AutoCAD? VS 2017 без установленного VS 2015 не подойдёт.
Получается, что если мне нужно иметь библиотеки для 2010-2018 автокадов, то у меня должны быть установлены VS 2010, 2012, 2013, 2015? Какой ужас)) С .Net все проще конечно
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 15-05-2017, 19:09:09
Ты пропустил VS 2008 SP1 (для AutoCAD 2010...2012).
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 15-05-2017, 19:09:42
VS 2013 не нужен.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Пекшев aka Modis от 15-05-2017, 20:19:11
Еще вопрос - если я делаю проект к которому подключаю ссылку на библиотеку OPM, мне нужно для этого проекта указывать платформу? По сути мой проект не зависит от платформы и целевое значение платформы установлено в AnyCPU. При использовании "минимального" набора ссылок (acdbmgd.dll, acmgd.dll (accoremgd.dll)) такой вариант работает как надо.
Будет ли правильным оставить AnyCPU, добавить ссылку на библиотеку OPM для моей платформы (х64), а уже при использовании моего проекта в процессе загрузки в AutoCAD предусмотреть вариант загрузки библиотеки OPM (x68 или x64)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 15-05-2017, 20:44:20
Будет ли правильным оставить AnyCPU, добавить ссылку на библиотеку OPM для моей платформы (х64), а уже при использовании моего проекта в процессе загрузки в AutoCAD предусмотреть вариант загрузки библиотеки OPM (x68 или x64)
Думаю, что это будет неправильно. По сути здесь такая же ситуация, как и с AutoCAD COM/ActiveX.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 03-06-2017, 18:24:06
Александр, я перестроил оба этих проекта у себя, получил нужные DLL и загрузил asdkOPMNetSample.dll в C3D2018.
По идее при выборе на чертеже отрезка в его свойствах должно появиться пользовательское свойство "My integer property"... Однако у меня, видимо, загрузка модуля не происходит - я добавил в метод Initialize вывод в командную строку, чтобы отсеживать этапы загрузки, но не отрабатывается даже первая строка.
Во время загрузки DLL ошибок и сообщений нет.


Я не знаю, куда я смотрел, но у меня все работает :)

Единственное замечание - при открытии этого решения один из проектов не загружается:
(https://s9.postimg.org/juhelzqln/2017-06-03_18-27-28.png) (https://postimg.org/image/juhelzqln/)

Приходится открывать файл arx-config.props в текстовом редакторе и править путь к каталогу Object ARX:
(https://s13.postimg.org/a94u22w1v/2017-06-03_18-29-22.png) (https://postimg.org/image/a94u22w1v/)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Пекшев aka Modis от 03-06-2017, 18:26:37
Александр, я перестроил оба этих проекта у себя, получил нужные DLL и загрузил asdkOPMNetSample.dll в C3D2018.
По идее при выборе на чертеже отрезка в его свойствах должно появиться пользовательское свойство "My integer property"... Однако у меня, видимо, загрузка модуля не происходит - я добавил в метод Initialize вывод в командную строку, чтобы отсеживать этапы загрузки, но не отрабатывается даже первая строка.
Во время загрузки DLL ошибок и сообщений нет.
Так как архив с проектом скачан из интернета, то у построенной библиотеки скорее всего установился идентификатор "заблокировано". Откройте свойства dll файла и снимите блокировку
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 03-06-2017, 18:50:16
Приходится открывать файл arx-config.props в текстовом редакторе и править путь к каталогу Object ARX:
У тебя на картинке моя настройка пути к ObjectARX SDK - она у меня не на стандартном месте. Так что действительно нужно править конфигурационный файл.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 03-06-2017, 18:54:37
Вообще-то я не очень понимаю зачем тебе нужно перекомпилировать. В моём архиве уже готовые dll-файлы для подключения:
OPMNetExt-master\Release\asdkOPMNetExt.dll - для x86
OPMNetExt-master\x64\Release\asdkOPMNetExt.dll - для x64
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 03-06-2017, 19:22:12
А вот интересно, как эти свойства добавить не к классу целиком, а к одному конкретному объекту, например, в ExtensionDictionary которого есть определенные записи?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 03-06-2017, 19:23:10
Вообще-то я не очень понимаю зачем тебе нужно перекомпилировать. В моём архиве уже готовые dll-файлы для подключения:
Чтобы у меня был живой проект, с которым я могу экспериментировать )
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Пекшев aka Modis от 03-06-2017, 19:34:51
А вот интересно, как эти свойства добавить не к классу целиком, а к одному конкретному объекту, например, в ExtensionDictionary которого есть определенные записи?
у интерфейса IDynamicProperty2 есть параметр IsPropertyEnabled.
Использовать типа так можно:
Код - C# [Выбрать]
  1. private readonly XProperty<double> TextHeight = new XProperty<double>()
  2.         {
  3.             //...
  4.             Enabled = new Func<ObjectId, bool>((ObjectId objectId) => Helper.IsMyObject(objectId)),
  5.             //...
  6.         };
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 03-06-2017, 19:52:47
Чтобы у меня был живой проект, с которым я могу экспериментировать )
Проект и так бы был "живой". Добавлял бы как добавляешь dll-файлы AutoCAD.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 03-06-2017, 19:58:05
А вот интересно, как эти свойства добавить не к классу целиком, а к одному конкретному объекту, например, в ExtensionDictionary которого есть определенные записи?
Александр Пекшев aka Modis прав. Пример есть в customPropertySample.cs:
Код - C# [Выбрать]
  1. // Show/Hide property in the OPM, for this object instance
  2. public void IsPropertyEnabled (object pUnk, out int bEnabled) {
  3.     bEnabled =1; // Если     bEnabled = 0, то свойство не видно в Панели свойств.
  4. }
  5.  
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 03-06-2017, 20:18:02
Да, я как раз с ним разбираюсь.
Получилось внутри метода IsPropertyEnabled получить сам объект и, соответственно, все параметры этого объекта:
Код - C# [Выбрать]
  1. public void IsPropertyEnabled (object pUnk, out int bEnabled)
  2. {
  3.     AcadLine l;
  4.     l = (AcadLine)pUnk;
  5.  
  6.     if (l.Length > 10)
  7.         bEnabled = 1;
  8.     else
  9.         bEnabled = 0;
  10. }

Разумеется тут должны быть проверки на соответствие объекта pUnk необходимому типу и проверка на null. Тоже самое и в методе GetCurrentValueName.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 04-06-2017, 16:23:14
Еще один вопрос: свои свойства можно группировать?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 04-06-2017, 16:33:31
Еще один вопрос: свои свойства можно группировать?
Вообще можно, но не через OPMNetExt. Там не реализован интерфейс ICategorizeProperties, который необходим для группировки.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 04-06-2017, 17:13:05
Вообще можно, но не через OPMNetExt. Там не реализован интерфейс ICategorizeProperties, который необходим для группировки.
Александр, а вы можете помочь реализовать этот интерфейс? Я пример нашел:
https://github.com/kevinzhwl/ObjectARXCore/blob/master/2004/inc/axtempl.h
но без хорошего знания С++ ничего не понимается :(
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 04-06-2017, 18:11:53
Я его реализовал для AutoCAD 2018, но тестировал по-минимуму (и только для x64). Выглядит это так:
(https://farm5.staticflickr.com/4206/35092318035_21293d49ca_o.jpg)
(аналогично тому как это сделано в моём GeomProps)
Проверяй.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 05-06-2017, 11:17:49
Проверяй.
Александр, спасибо!
Чуть позже посмотрю.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 19-06-2017, 23:32:31
Еще один вопрос назрел: можно ли как-то использовать списки в качестве данных, чтобы в свойствах выбирать из combobox?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 19-06-2017, 23:35:38
Еще один вопрос назрел: можно ли как-то использовать списки в качестве данных, чтобы в свойствах выбирать из combobox?
Теоретически можно. Практически - это перебор. Я туда не полезу.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 03-07-2017, 12:55:54
Коллеги, нашел на форуме, как добавить собственные перечисления:
https://forums.autodesk.com/t5/objectarx/property-palette-and-custom-entities/m-p/5724429/highlight/true#M32847 (https://forums.autodesk.com/t5/objectarx/property-palette-and-custom-entities/m-p/5724429/highlight/true#M32847)
Код - C++ [Выбрать]
  1. // idl
  2. [propget, id(3), helpstring("property myenum")] HRESULT myenum1([out, retval] long* pVal);
  3. [propput, id(3), helpstring("property myenum")] HRESULT myenum1([in] long newVal);
  4.  
  5. // COM Wrapper header
  6. STDMETHOD(GetPredefinedStrings)(
  7.         /* [in] */ DISPID dispID,
  8.         /* [out] */ CALPOLESTR *pCaStringsOut,
  9.         /* [out] */ CADWORD *pCaCookiesOut);
  10. STDMETHOD(GetPredefinedValue)(
  11.         /* [in] */ DISPID dispID,
  12.         /* [out] */ DWORD dwCookie,
  13.         /* [out] */ VARIANT *pVarOut);
  14.  
  15. // COM Wrapper cpp
  16. //- IAcPiPropertyDisplay
  17. STDMETHODIMP CMyObject::GetCustomPropertyCtrl (VARIANT Id, LCID lcid, BSTR *pProgId) {
  18.             if ( pProgId == NULL )
  19.                         return (E_FAIL) ;
  20.            
  21.             if ( V_I4(&Id) == 3 ) {
  22.                         LPOLESTR progId;
  23.                         ProgIDFromCLSID (CLSID_AcPePropertyEditorEnum, &progId);
  24.                         *pProgId =::SysAllocString (progId);
  25.  
  26.                         return (S_OK) ;
  27.             }
  28.  
  29.             return (E_NOTIMPL) ;
  30. }
  31.  
  32. STDMETHODIMP CMyObject::GetPredefinedStrings(DISPID dispID, CALPOLESTR *pCaStringsOut, CADWORD *pCaCookiesOut)
  33. {
  34.             USES_CONVERSION;
  35.  
  36.             if( (dispID == 0x3))
  37.             {
  38.                         pCaStringsOut->pElems = (LPOLESTR *)::CoTaskMemAlloc(sizeof(LPOLESTR) * 2);
  39.                         pCaCookiesOut->pElems = (DWORD *)::CoTaskMemAlloc(sizeof(DWORD) * 2);
  40.  
  41.                         pCaStringsOut->pElems[0] = ::SysAllocString(L"First");
  42.                         pCaCookiesOut->pElems[0] = 1;
  43.                         pCaStringsOut->pElems[1] = ::SysAllocString(L"Second");
  44.                         pCaCookiesOut->pElems[1] = 2;
  45.  
  46.                         pCaStringsOut->cElems = 2;
  47.                         pCaCookiesOut->cElems = 2;
  48.                         return S_OK;
  49.             }
  50.             return  IOPMPropertyExtensionImpl<CMyObject>::GetPredefinedStrings(dispID,pCaStringsOut,pCaCookiesOut);    
  51. }
  52.  
  53. STDMETHODIMP CMyObject::GetPredefinedValue(DISPID dispID, DWORD dwCookie, VARIANT *pVarOut)
  54. {
  55.             if(dispID == 0x3)
  56.             {
  57.                         if(dwCookie == 1)
  58.                         {
  59.                                     ::VariantCopy(pVarOut, &CComVariant((long)1));
  60.                         }
  61.                         else if(dwCookie == 2)
  62.                         {
  63.                                     ::VariantCopy(pVarOut, &CComVariant((long)2));
  64.                         }
  65.             }
  66.             else
  67.                         return IOPMPropertyExtensionImpl<CMyObject>::GetPredefinedValue(dispID, dwCookie, pVarOut);
  68.  
  69.     return S_OK;
  70. }

Я правильно понимаю, что если в проекте OPMNetExt переопределить GetCustomPropertyCtrl, как показано по ссылке выше, то потом можно будет использовать в .NET проектах?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 03-07-2017, 13:14:21
Я правильно понимаю, что если в проекте OPMNetExt переопределить GetCustomPropertyCtrl, как показано по ссылке выше, то потом можно будет использовать в .NET проектах?
Нет. Ты не понимаешь разницу между static и dynamic property. То что ты показал - это static property, которые содержатся в COM-обертке класса примитива и только там. А OPMNetExt оперирует dynamic property. Я кое что сделал, чтобы в OPMNetExt можно было использовать перечисления (используется интерфейс IDynamicEnumProperty). Пока работает частично. Когда закончу - выложу.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 03-07-2017, 18:47:53
Алексей Терно
Я правильно понял что тебе нужно? Посмотри видео:
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 03-07-2017, 19:47:41
Я правильно понял что тебе нужно?
Да - именно это!
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 03-07-2017, 20:00:16
Ну тогда посмотри этот код.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 06-07-2017, 16:58:31
Алексей Терно
Я так понимаю, что код ты посмотрел, но я в очередной раз не увидел никакой реакции на то, что я для тебе делаю. ;) Так и запишем.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 06-07-2017, 17:06:27
Александр, да - пример посмотрел, он работает так, как мне надо, стал переделывать под свои нужды и он перестал работать :( Не успел до конца разобраться, где у меня ошибка, как возникла срочная необходимость переключиться на другую задачу. В начале следующей недели должен вернуться к этой задаче и тогда уже сделаю свой код рабочим и выложу тут свою модификацию  :)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 06-07-2017, 17:07:03
И спасибо Вам огромное за Ваш труд!!!
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 06-07-2017, 17:09:27
И спасибо Вам огромное за Ваш труд!!!
Так и быть прощаю. :)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Владимир Шу от 21-08-2017, 11:34:58
Александр Ривилис,  спасибо за сборку для 18 акада.
Под 2017 так же собралась и теперь у мультилинии хотя бы базовые геометрические свойства появились, работать стало намного удобнее.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 21-08-2017, 11:37:49
Под 2017 так же собралась и теперь у мультилинии хотя бы базовые геометрические свойства появились, работать стало намного удобнее.
Эту фразу я не понял. Ты добавил для мультилинии динамические свойства?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Владимир Шу от 21-08-2017, 12:03:19
Пересобрал программу под 2017х64 автокад и да, добавил динамические свойства мультилинии.
(https://s28.postimg.org/405msmsq1/2bf4b2ad6863b957ece56bf4f09f472a_1.png) (https://postimg.org/image/405msmsq1/)
Длину показывает, площадь показывает, уровень показывает и позволяет поменять.
Чуть позже при помощи выпадающего списка добавлю выбор и редактирование вершин (по крайней мере попробую).

ЗЫ.
Раньше мультилиниями не пользовался, а тут архитекторы к ним пристрастились и теперь приходится искать инструменты для работы...
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 18-01-2018, 00:34:31
Коллеги, а это нормально, что после перестроения в проекте есть файлы:
\OPMNetExt.VC.db
\ipch\OPMNETEXT-3f21b66b\ASDKOPMNETEXT-ef141531.ipch
Соответственно 144 и 120 Мб? Причем сама итоговая DLL весит всего 54 Кб.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 18-01-2018, 00:52:17
Коллеги, а это нормально, что после перестроения в проекте есть файлы:
\OPMNetExt.VC.db
\ipch\OPMNETEXT-3f21b66b\ASDKOPMNETEXT-ef141531.ipch
Соответственно 144 и 120 Мб? Причем сама итоговая DLL весит всего 54 Кб.
Абсолютно нормально. Почитай про precompiled headers.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 18-01-2018, 01:04:48
Абсолютно нормально. Почитай про precompiled headers.
Теперь понятно :)
Спасибо!
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 23-03-2018, 02:53:44
Адаптация для AutoCAD 2019.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 00:48:38
Я его реализовал для AutoCAD 2018
Александр, здравствуйте!
А как прикрутить данную библиотеку к AutoCAD Civil 3D 2017 ?
У меня ругается и не хочет подгружать ее
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 20-05-2018, 01:00:36
Для 2017-ой версии: http://forums.autodesk.com/autodesk/attachments/autodesk/34/33606/1/OPMNetExt-master.zip
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 01:09:04
Ага, спасибо)
И почему-то подчеркивает Inherits IDynamicProperty2: Classes can inherit only from other Classes..
Что я не так скопировал?)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 20-05-2018, 01:12:11
Что я не так скопировал?)
Понятия не имею.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 01:19:03
Я взял код из примера на C#, конвертировал в VB.NET и компилятор стал подчеркивать Inherits IDynamicProperty2.
Ума не приложу это из-за чего?
(https://s7.postimg.cc/rr32huz87/Clip.jpg) (https://postimg.cc/image/rr32huz87/)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Пекшев aka Modis от 20-05-2018, 01:21:06
конвертировал в VB.NET
На мой взгляд - это самая главная ошибка
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 01:23:58
Какой может быть выход  :-\ ?
Если убрать эту строку работать не будет ?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Алексей Терно от 20-05-2018, 01:33:35
Если убрать эту строку работать не будет ?
Не будет.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 01:39:36
Спасибо, ребят.
Попытался запустить из-под C#,  при загрузке сборки:
NETLOAD
Не удалось загрузить файл или сборку "file:///C:\Users\Bars\Desktop\OPMNetExt-master_2017+\OPMNetExt-master\OPMNetSample\asdkOPMNetExt.dll" либо одну из их зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515) ---> System.NotSupportedException: Предпринята попытка загрузить сборку из сетевого ресурса, что в предыдущих версиях .NET Framework могло привести к помещению сборки в "песочницу". Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому данная загрузка может быть опасной. Если эта нагрузка не предназначена для изоляции сборки, включите переключатель loadFromRemoteSources. Дополнительные сведения см. на странице http://go.microsoft.com/fwlink/?LinkId=155569.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 08:09:45
Откройте свойства dll файла и снимите блокировку
Почему-то не увидел этот параметр в палитре свойств библиотеки.
Где смотреть, подскажи ?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 08:28:03
На мой взгляд - это самая главная ошибка
Тут https://github.com/cyrillef/OPMNetExt вроде заявлена возможность ее использования на VB.NET, однако найти примера именно для VB я не смог.
Печалька
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Владимир Шу от 20-05-2018, 08:42:37
Я взял код из примера на C#, конвертировал в VB.NET и компилятор стал подчеркивать Inherits IDynamicProperty2.
Ума не приложу это из-за чего?
Из-за того, что Вы не очень хорошо знаете VB.NET.
Это в C#  можно наследоваться от классов и интерфейсов, а в VB можно наследоваться от классов и реализовывать интерфейсы. Разницу чувствуете?
Очевидно, что пример Вы конвертировали автоматическими инструментами, а вот они эту разницу зачастую не улавливают.
Код - vb.net [Выбрать]
  1. 'Наследование от класса
  2. Public Class Client
  3.     Inherits Person
  4. ...
  5. End Class
  6.  
  7. 'Реализация интерфейса
  8. Public Class Client
  9.     Implements IAccount
  10. ...
  11. End Class
  12.  
  13. 'Наследоване и реализация
  14. Public Class Client
  15.     Inherits Person
  16.     Implements IAccount
  17. ...    
  18. End Class
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 09:16:50
О, да, как же Вы правы)  :)
Т.е. я вручную к каждому члену прикручиваю реализацию, предварительно сделав метод Public? Как то:
Код - vb.net [Выбрать]
  1.       Public Sub GetDisplayName(<Out> ByRef szName As String) Implements IDynamicProperty2.GetDisplayName
  2.             szName = "My integer property"
  3.         End Sub
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 09:23:29
Владимир Шу, спасибо огромное за подсказку.
Прикрутил реализацию к каждому методу и ошибка пропала.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 09:25:29
Откройте свойства dll файла и снимите блокировку
Победил через Assembly.UnsafeLoadFrom("asdkOPMNetExt.dll")
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 09:29:24
Все, ребят, завелось из-под VB.NET! :)
Всем откликнувшимся спасибо, здоровья и ++++
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 09:30:28
предварительно сделав метод Public
З.ы. Public не причем, сорри)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 10:05:00
Еще проблемка возникла: как можно реализовать сохранение значения свойства для каждого экземпляра объекта ?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 20-05-2018, 16:02:56
Еще проблемка возникла: как можно реализовать сохранение значения свойства для каждого экземпляра объекта ?
В методе SetCurrentValueData сохраняешь значение. Где и как - это твоё дело.
P.S.: Внимательно прочитай у меня в подписи как следует форматировать код для форума и соблюдай это правило.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 16:45:11
Александр Ривилис, спасибо.
А нет ли примера сохранения кастомных свойств в базу данных чертежа?
З.ы.: по форматированию кода исправлюсь)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 20-05-2018, 16:49:37
А нет ли примера сохранения кастомных свойств в базу данных чертежа?
Как минимум нужно понимать куда и что ты собираешься сохранять.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 17:01:10
Александр Ривилис, моя цель проста.
Мне нужно реализовать объединение нескольких произвольно указанных пользователем примитивов (различных классов) в одну группу.
Это похоже на образование блока, но только виртуального - без реального объединения примитивов в блок.
Т.е. выделенным пользователем примитивам в кастомное свойство присваиваю значение ObjectId какого-либо одного примитива из этой выделенной группы - это будет так сказать базовый (опорный) примитив.
А затем по произвольному выделенному на чертеже примитву через сохраненное значение кастомного свойства осуществляю выделение (включение в SelectionSet) остальных примитивов-членов, входящих в группу.
Т.о. как-то нужно произвести запись значений кастомного свойства каждого примитива в БД чертежа.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 20-05-2018, 17:04:20
bars4@inbox.ru
Так почему не воспользоваться именно группой (Group)? Там вроде бы всё что тебе нужно есть.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 17:16:26
Далее по бизнес-логике будет производиться экспорт данных чертежа через DataExtraction в Excel, где будет производиться анализ созданных группировок примитивов, а именно от каждого входящего члена группы будут извлечены значения имени блока, слоя, типа линии, цвет и т.п. (в зависимости что попадет в группу) для интерпретации и отчетов, а так же каждому из этих входящих примитивов потребуется раздать (присвоить, назначить) координату (адрес) опорного примитива данной виртуальной группы, который тоже пойдет в отчеты в виде отдельного поля.
Можно ли будет достичь этого же результата посредством Group как таковых ?
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 20-05-2018, 17:21:18
Можно ли будет достичь этого же результата посредством групп как таковых ?
Я думаю тебе нужно начать с изучения AutoCAD. А точнее выяснить что такое группа в AutoCAD и как это реализовано, где она хранится, как в неё добавить примитивы, как извлечь информацию о примитивах в группе.
К данной теме это не имеет никакого отношения.
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: bars4@inbox.ru от 20-05-2018, 17:23:15
Александр Ривилис, согласен, это уже другая тема. Спасибо)
Название: Re: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD
Отправлено: Александр Ривилис от 15-04-2020, 11:25:52
Портировал OPMNetExt для AutoCAD 2021:  https://adn-cis.org/opmnetext-dlya-autocad-2021.html