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

ADN Club => Civil 3D API => Тема начата: Alxd от 18-05-2016, 12:40:26

Название: Использование FeatureLine в C++
Отправлено: Alxd от 18-05-2016, 12:40:26
Есть код написанный на С++ работающий в обычном AutoCAD'е с обычными примитивами. Хочу добавить к нему возможность выбора FeatureLine в Civil 3D, но не хочу переписывать код на C#. Тем более, что от FeatureLine мне надо только одно свойство - BaseCurve. Никто не озадачивался возможностью получения Curve из FeatureLine в C++? Скажем, с помощью GetProcAddress или #import?

Только что провел тесты и выявил интересный факт.
Приложение на С++ признает FeatureLine как обычный AcDbCurve, но pCurve2->getPlane(plane2, planarity2)) по возвращаемым данным сообщает, что кривая плоская!
Приложение на C# (без поддержки Civil 3D) признает FeatureLine как обычный Curve и даже трехмерный!

Вот такая несправедливость. Может я чего напутал, но пока так.
Название: Re: Использование FeatureLine в C++
Отправлено: Александр Ривилис от 18-05-2016, 15:38:49
Скажем, с помощью GetProcAddress или #import?
Из .NET??? Наивный. :)
Приложение на С++ признает FeatureLine как обычный AcDbCurve, но pCurve2->getPlane(plane2, planarity2)) по возвращаемым данным сообщает, что кривая плоская!
Приложение на C# (без поддержки Civil 3D) признает FeatureLine как обычный Curve и даже трехмерный!
Думаю, что и C++ и C# должны признавать его как одну и ту же кривую. Не уверен, что эта кривая совпадает с BaseCurve - это проверь сам. Если совпадает - отлично. Если нет, то есть только один вариант для написания на C++ - использовать mixed C++. В результате ты получишь не arx, а .NET dll, которая грузится через NETLOAD. Но можно использовать и возможности ObjectARX и .NET API.

Название: Re: Использование FeatureLine в C++
Отправлено: Alxd от 18-05-2016, 15:41:35
В части GetProcAddress я имел ввиду импорт "сишного" класса AeccFeatureLine (или как там он называется).
Название: Re: Использование FeatureLine в C++
Отправлено: Александр Ривилис от 18-05-2016, 15:42:26
В части GetProcAddress я имел ввиду импорт "сишного" класса AeccFeatureLine (или как там он называется).
Откуда ты его возьмёшь?
Название: Re: Использование FeatureLine в C++
Отправлено: Александр Ривилис от 18-05-2016, 16:04:08
Кстати у FeatureLine нет свойства BaseCurve: http://docs.autodesk.com/CIV3D/2016/ENU/API_Reference_Guide/html/856470c7-bf8f-2fa4-db5f-d290252f36c0.htm
Ты бы уточнил что именно имеешь в виду.
Название: Re: Использование FeatureLine в C++
Отправлено: Alxd от 18-05-2016, 16:23:46
Вот такая конструкция в C# работает:
Код - C# [Выбрать]
  1. FeatureLine featureLine = dbObj as FeatureLine;
  2. baseCurve = featureLine.BaseCurve;
Название: Re: Использование FeatureLine в C++
Отправлено: Александр Ривилис от 18-05-2016, 16:53:34
Кстати, остался еще вариант с методом explode. В результате ты (теоретически) должен получить 2D/3D-полилинию.
Название: Re: Использование FeatureLine в C++
Отправлено: Александр Ривилис от 18-05-2016, 16:57:51
Ну и еще один вариант - использование COM/ActiveX модели Civil 3D в чистом ObjectARX. Получить вершины FeatureLine можно так: http://adndevblog.typepad.com/infrastructure/2012/10/getting-civil-3d-land-featureline-vertices.html