Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD

Автор Тема: Работа с Панелью свойств в .NET (OPMNetExt) для AutoCAD  (Прочитано 3850 раз)

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

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Те, кто интересовался, как добавить свои свойства в Панель свойств при помощи 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
 
« Последнее редактирование: 22-01-2017, 18:56:06 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Исправленная версия от Virupaksha Aithal для AutoCAD 2017 и VS 2015: http://forums.autodesk.com/autodesk/attachments/autodesk/34/33606/1/OPMNetExt-master.zip   
« Последнее редактирование: 22-01-2017, 18:56:19 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 144
  • Отец modplus.org
Стоит из названия убрать "для AutoCAD 2016" и может даже закрепить
« Последнее редактирование: 22-01-2017, 18:56:31 от Александр Ривилис »
ModPlus
Отвечаю в надежде получить плюсики в карму =))

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Стоит из названия убрать "для AutoCAD 2016" и может даже закрепить
Согласен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Добавил версию, адаптированную под AutoCAD 2018.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 144
  • Отец modplus.org
Объясните мне, не знакомому с С++:
1. Чтобы открыть проект по ссылкам нужен VS 2015 (2010)? У меня 2017 - не открывается.
2. Для каждой версии автокада (2010-2018) должна собираться отдельная библиотека? Универсальной сделать невозможно?
3. Ко второму пункту - от разрядности платформы тоже зависит? 32 или 64
ModPlus
Отвечаю в надежде получить плюсики в карму =))

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Чтобы открыть проект по ссылкам нужен VS 2015 (2010)? У меня 2017 - не открывается.
Для какой версии AutoCAD? VS 2017 без установленного VS 2015 не подойдёт.
2. Для каждой версии автокада (2010-2018) должна собираться отдельная библиотека? Универсальной сделать невозможно?
Универсальной сделать невозможно. Для версии 2010...2012,2013...2014,2015...2016,2017,2018 нужны отдельные модули.
3. Ко второму пункту - от разрядности платформы тоже зависит? 32 или 64
Да. Т.е. количество модулей увеличивается в два раза.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 144
  • Отец modplus.org
Для какой версии AutoCAD? VS 2017 без установленного VS 2015 не подойдёт.
Получается, что если мне нужно иметь библиотеки для 2010-2018 автокадов, то у меня должны быть установлены VS 2010, 2012, 2013, 2015? Какой ужас)) С .Net все проще конечно
ModPlus
Отвечаю в надежде получить плюсики в карму =))

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Ты пропустил VS 2008 SP1 (для AutoCAD 2010...2012).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
VS 2013 не нужен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 144
  • Отец modplus.org
Еще вопрос - если я делаю проект к которому подключаю ссылку на библиотеку OPM, мне нужно для этого проекта указывать платформу? По сути мой проект не зависит от платформы и целевое значение платформы установлено в AnyCPU. При использовании "минимального" набора ссылок (acdbmgd.dll, acmgd.dll (accoremgd.dll)) такой вариант работает как надо.
Будет ли правильным оставить AnyCPU, добавить ссылку на библиотеку OPM для моей платформы (х64), а уже при использовании моего проекта в процессе загрузки в AutoCAD предусмотреть вариант загрузки библиотеки OPM (x68 или x64)
ModPlus
Отвечаю в надежде получить плюсики в карму =))

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Будет ли правильным оставить AnyCPU, добавить ссылку на библиотеку OPM для моей платформы (х64), а уже при использовании моего проекта в процессе загрузки в AutoCAD предусмотреть вариант загрузки библиотеки OPM (x68 или x64)
Думаю, что это будет неправильно. По сути здесь такая же ситуация, как и с AutoCAD COM/ActiveX.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Александр, я перестроил оба этих проекта у себя, получил нужные DLL и загрузил asdkOPMNetSample.dll в C3D2018.
По идее при выборе на чертеже отрезка в его свойствах должно появиться пользовательское свойство "My integer property"... Однако у меня, видимо, загрузка модуля не происходит - я добавил в метод Initialize вывод в командную строку, чтобы отсеживать этапы загрузки, но не отрабатывается даже первая строка.
Во время загрузки DLL ошибок и сообщений нет.


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

Единственное замечание - при открытии этого решения один из проектов не загружается:


Приходится открывать файл arx-config.props в текстовом редакторе и править путь к каталогу Object ARX:


Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 144
  • Отец modplus.org
Александр, я перестроил оба этих проекта у себя, получил нужные DLL и загрузил asdkOPMNetSample.dll в C3D2018.
По идее при выборе на чертеже отрезка в его свойствах должно появиться пользовательское свойство "My integer property"... Однако у меня, видимо, загрузка модуля не происходит - я добавил в метод Initialize вывод в командную строку, чтобы отсеживать этапы загрузки, но не отрабатывается даже первая строка.
Во время загрузки DLL ошибок и сообщений нет.
Так как архив с проектом скачан из интернета, то у построенной библиотеки скорее всего установился идентификатор "заблокировано". Откройте свойства dll файла и снимите блокировку
ModPlus
Отвечаю в надежде получить плюсики в карму =))

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Приходится открывать файл arx-config.props в текстовом редакторе и править путь к каталогу Object ARX:
У тебя на картинке моя настройка пути к ObjectARX SDK - она у меня не на стандартном месте. Так что действительно нужно править конфигурационный файл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Вообще-то я не очень понимаю зачем тебе нужно перекомпилировать. В моём архиве уже готовые dll-файлы для подключения:
OPMNetExt-master\Release\asdkOPMNetExt.dll - для x86
OPMNetExt-master\x64\Release\asdkOPMNetExt.dll - для x64
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
А вот интересно, как эти свойства добавить не к классу целиком, а к одному конкретному объекту, например, в ExtensionDictionary которого есть определенные записи?

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Вообще-то я не очень понимаю зачем тебе нужно перекомпилировать. В моём архиве уже готовые dll-файлы для подключения:
Чтобы у меня был живой проект, с которым я могу экспериментировать )

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 839
  • Карма: 144
  • Отец modplus.org
А вот интересно, как эти свойства добавить не к классу целиком, а к одному конкретному объекту, например, в 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.         };
ModPlus
Отвечаю в надежде получить плюсики в карму =))

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Чтобы у меня был живой проект, с которым я могу экспериментировать )
Проект и так бы был "живой". Добавлял бы как добавляешь dll-файлы AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
А вот интересно, как эти свойства добавить не к классу целиком, а к одному конкретному объекту, например, в 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.  
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Да, я как раз с ним разбираюсь.
Получилось внутри метода 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.

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Еще один вопрос: свои свойства можно группировать?

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще один вопрос: свои свойства можно группировать?
Вообще можно, но не через OPMNetExt. Там не реализован интерфейс ICategorizeProperties, который необходим для группировки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Вообще можно, но не через OPMNetExt. Там не реализован интерфейс ICategorizeProperties, который необходим для группировки.
Александр, а вы можете помочь реализовать этот интерфейс? Я пример нашел:
https://github.com/kevinzhwl/ObjectARXCore/blob/master/2004/inc/axtempl.h
но без хорошего знания С++ ничего не понимается :(

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Я его реализовал для AutoCAD 2018, но тестировал по-минимуму (и только для x64). Выглядит это так:

(аналогично тому как это сделано в моём GeomProps)
Проверяй.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Проверяй.
Александр, спасибо!
Чуть позже посмотрю.

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Еще один вопрос назрел: можно ли как-то использовать списки в качестве данных, чтобы в свойствах выбирать из combobox?

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще один вопрос назрел: можно ли как-то использовать списки в качестве данных, чтобы в свойствах выбирать из combobox?
Теоретически можно. Практически - это перебор. Я туда не полезу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Коллеги, нашел на форуме, как добавить собственные перечисления:
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 проектах?

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Я правильно понимаю, что если в проекте OPMNetExt переопределить GetCustomPropertyCtrl, как показано по ссылке выше, то потом можно будет использовать в .NET проектах?
Нет. Ты не понимаешь разницу между static и dynamic property. То что ты показал - это static property, которые содержатся в COM-обертке класса примитива и только там. А OPMNetExt оперирует dynamic property. Я кое что сделал, чтобы в OPMNetExt можно было использовать перечисления (используется интерфейс IDynamicEnumProperty). Пока работает частично. Когда закончу - выложу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Алексей Терно
Я правильно понял что тебе нужно? Посмотри видео:
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Я правильно понял что тебе нужно?
Да - именно это!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну тогда посмотри этот код.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Алексей Терно
Я так понимаю, что код ты посмотрел, но я в очередной раз не увидел никакой реакции на то, что я для тебе делаю. ;) Так и запишем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Александр, да - пример посмотрел, он работает так, как мне надо, стал переделывать под свои нужды и он перестал работать :( Не успел до конца разобраться, где у меня ошибка, как возникла срочная необходимость переключиться на другую задачу. В начале следующей недели должен вернуться к этой задаче и тогда уже сделаю свой код рабочим и выложу тут свою модификацию  :)

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
И спасибо Вам огромное за Ваш труд!!!

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
И спасибо Вам огромное за Ваш труд!!!
Так и быть прощаю. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 347
  • Карма: 58
Александр Ривилис,  спасибо за сборку для 18 акада.
Под 2017 так же собралась и теперь у мультилинии хотя бы базовые геометрические свойства появились, работать стало намного удобнее.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Под 2017 так же собралась и теперь у мультилинии хотя бы базовые геометрические свойства появились, работать стало намного удобнее.
Эту фразу я не понял. Ты добавил для мультилинии динамические свойства?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • ****
  • Сообщений: 347
  • Карма: 58
Пересобрал программу под 2017х64 автокад и да, добавил динамические свойства мультилинии.

Длину показывает, площадь показывает, уровень показывает и позволяет поменять.
Чуть позже при помощи выпадающего списка добавлю выбор и редактирование вершин (по крайней мере попробую).

ЗЫ.
Раньше мультилиниями не пользовался, а тут архитекторы к ним пристрастились и теперь приходится искать инструменты для работы...

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Коллеги, а это нормально, что после перестроения в проекте есть файлы:
\OPMNetExt.VC.db
\ipch\OPMNETEXT-3f21b66b\ASDKOPMNETEXT-ef141531.ipch
Соответственно 144 и 120 Мб? Причем сама итоговая DLL весит всего 54 Кб.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 7231
  • Карма: 831
  • Рыцарь ObjectARX
  • Skype: rivilis
Коллеги, а это нормально, что после перестроения в проекте есть файлы:
\OPMNetExt.VC.db
\ipch\OPMNETEXT-3f21b66b\ASDKOPMNETEXT-ef141531.ipch
Соответственно 144 и 120 Мб? Причем сама итоговая DLL весит всего 54 Кб.
Абсолютно нормально. Почитай про precompiled headers.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Терно

  • ADN Club
  • ***
  • Сообщений: 181
  • Карма: 16
    • C3D Extensions
  • Skype: alexeyterno
Абсолютно нормально. Почитай про precompiled headers.
Теперь понятно :)
Спасибо!