IvSrg (Всі повідомлення користувача)

Форум пользователей программных комплексов ЛИРА-САПР, МОНОМАХ-САПР, САПФИР-3D, ЭСПРИ

У зв'язку з великою кількістю неіснуючих підписок на оновлення форуму була проведена очистка. Якщо ви перестали отримувати повідомлення з оновленнями, прохання провести підписку знову.
Вибрати дату в календаріВибрати дату в календарі

Сторінки: 1
Программирование в Сапфир, Какие библиотеки за что отвечают
 
Спасибо за пример!

Не хватало предварительной инициализации VARINT как массива перед вызовом GetPoints()
Код
VARIANT vPoints;
vPoints.vt = VT_ARRAY | VT_VARIANT; // так нужно для всех массивов
         
SAFEARRAYBOUND sab;
sab.lLbound = 0; sab.cElements = 0;
vPoints.parray = SafeArrayCreate(VT_VARIANT, 1, &sab);

long lPnts = pAxis->GetPoints(&vPoints);
Теперь все работает.
Программирование в Сапфир, Какие библиотеки за что отвечают
 
Может быть я не уточнил, но речь идет о доступе к Сапфиру из сторонней программы, а не о написании плагина.
Делаю все тоже самое, но через COM - не выходит!
Пробовал создавать стену - также не получается задать положение ее осевой.
Вот решил попробовать получить данные готовой стены - и снова не выходит.

Для получения описания классов и методов C++ использую SAPFIR.tlb лежащую в папке
С:\Program Files (x86)\LIRA SAPR\LIRA SAPR 2015 DEMO\Sapfir 2015 (Study version)
Программирование в Сапфир, Какие библиотеки за что отвечают
 
Здравствуйте!

Создаю приложение на С++ используя ваш API, и пытаюсь получить данные об элементах модели созданной в САПФИР 2015 (Демо версия)
Нарисовал стену в Сапфире и попытался прочитать ее положение  в     пространстве (код ниже).
Кусок связанный с получением приложения, документа, проекта, этажа работает без вопросов, поэтому опускаю.
Методы GetPoints() и у AutoPolyLinу и AutoLine возвращают 0. В чем может быть проблема?

                     
Код
// поиск стены на этаже
long lType(10);  // MT_WALL
long lMdlT(0);
IAutoModelPtr pModel;
long lIndx(0);
do
{
   pModel = m_spfStorey->GetModelByIndex(lIndx);
   if(pModel)
      lMdlT = pModel->GetTypeModel();
   lIndx++;
}
while(lIndx < lMdlAll && lMdlT != lType);

if(lMdlT != lType)
   return E_UNEXPECTED;

// получаем осевую
IAutoPolyLinePtr pAxis = pModel->GetAxisLine();
if(pAxis)
{
   lMdlT = pAxis->GetTypeModel();   // здесь 4 - TM3_POLYLINE

   VARIANT vPoints;
   VariantInit(&vPoints);

   long lPnts = pAxis->GetPoints(&vPoints);    // здесь  0 ???

   long lLines = pAxis->GetCountLine();  //  здесь 1
   if(lLines > 0)
   {
      IAutoLinePtr pLine = pAxis->GetLine(0);
      if(pLine)
      {
         VARIANT vPoints;
         VariantInit(&vPoints);
         
         long lPnts = pLine->GetPoints(&vPoints);   // здесь  0 ???
      }
   }
}          
Змінено: Pavel Frantov - 27.10.2016 12:13:14
Сторінки: 1