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

16/05/2013

Как преобразовать AcGeMatrix3d в VARIANT

Вопрос:
В классе AcAxMatrix3d есть метод для преобразования VARIANT в AcGeMatrix3d, но нет метода для обратного преобразования. А как можно сделать обратное преобразование?

Ответ:
Следующий код выполняет преобразование AcGeMatrix3d в VARIANT:

Код - C++: [Выделить]
  1. HRESULT GetVariantFromMatrix(VARIANT* pVal, AcGeMatrix3d mat)
  2. {
  3.  // Объявим наш Variant как массив плавающих чисел (double).
  4. pVal->vt = VT_ARRAY | VT_R8;
  5.  
  6. SAFEARRAYBOUND rgsaBound[2];// двумерный массив...
  7. rgsaBound[0].lLbound = 0L;// Размер первого измерений - 4
  8. rgsaBound[0].cElements = 4;
  9. rgsaBound[1].lLbound = 0L;// Размер второго измерения - 4
  10. rgsaBound[1].cElements = 4;
  11.  
  12. pVal->parray = SafeArrayCreate(VT_R8, 2, &rgsaBound[0]);// Создаем VARIANT
  13.  if (! pVal->parray)
  14.   return E_OUTOFMEMORY;
  15.  
  16.  // Теперь заполним его.
  17. HRESULT hr;
  18.  long i[2];
  19.  for (i[0]=0;i[0]<4;i[0]++)
  20.   for(i[1]=0;i[1]<4;i[1]++)
  21.    if (hr = SafeArrayPutElement(pVal->parray, &i[0],
  22.     (void*)&mat.operator()(i[0],i[1])) != S_OK)
  23.     return hr;
  24.  
  25.  return S_OK;
  26. }

Источник: http://adndevblog.typepad.com/autocad/2012/12/how-to-convert-acgematrix3d-to-variant.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=34.0

Опубликовано 16.05.2013
Отредактировано 05.06.2013 в 23:47:13