Использование FeatureLine в C++

Автор Тема: Использование FeatureLine в C++  (Прочитано 6803 раз)

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

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Использование FeatureLine в C++
« : 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 и даже трехмерный!

Вот такая несправедливость. Может я чего напутал, но пока так.
« Последнее редактирование: 18-05-2016, 13:53:21 от Alxd »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование FeatureLine в C++
« Ответ #1 : 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.

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

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Re: Использование FeatureLine в C++
« Ответ #2 : 18-05-2016, 15:41:35 »
В части GetProcAddress я имел ввиду импорт "сишного" класса AeccFeatureLine (или как там он называется).

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование FeatureLine в C++
« Ответ #3 : 18-05-2016, 15:42:26 »
В части GetProcAddress я имел ввиду импорт "сишного" класса AeccFeatureLine (или как там он называется).
Откуда ты его возьмёшь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование FeatureLine в C++
« Ответ #4 : 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
Ты бы уточнил что именно имеешь в виду.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 2
Re: Использование FeatureLine в C++
« Ответ #5 : 18-05-2016, 16:23:46 »
Вот такая конструкция в C# работает:
Код - C# [Выбрать]
  1. FeatureLine featureLine = dbObj as FeatureLine;
  2. baseCurve = featureLine.BaseCurve;

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование FeatureLine в C++
« Ответ #6 : 18-05-2016, 16:53:34 »
Кстати, остался еще вариант с методом explode. В результате ты (теоретически) должен получить 2D/3D-полилинию.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование FeatureLine в C++
« Ответ #7 : 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
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение