16/05/2013
Как преобразовать AcGeMatrix3d в VARIANT
Вопрос:
В классе AcAxMatrix3d есть метод для преобразования VARIANT в AcGeMatrix3d, но нет метода для обратного преобразования. А как можно сделать обратное преобразование?
Ответ:
Следующий код выполняет преобразование AcGeMatrix3d в VARIANT:
Код - C++: [Выделить]
- HRESULT GetVariantFromMatrix(VARIANT* pVal, AcGeMatrix3d mat)
- {
- // Объявим наш Variant как массив плавающих чисел (double).
- pVal->vt = VT_ARRAY | VT_R8;
- SAFEARRAYBOUND rgsaBound[2];// двумерный массив...
- rgsaBound[0].lLbound = 0L;// Размер первого измерений - 4
- rgsaBound[0].cElements = 4;
- rgsaBound[1].lLbound = 0L;// Размер второго измерения - 4
- rgsaBound[1].cElements = 4;
- pVal->parray = SafeArrayCreate(VT_R8, 2, &rgsaBound[0]);// Создаем VARIANT
- if (! pVal->parray)
- return E_OUTOFMEMORY;
- // Теперь заполним его.
- HRESULT hr;
- long i[2];
- for (i[0]=0;i[0]<4;i[0]++)
- for(i[1]=0;i[1]<4;i[1]++)
- if (hr = SafeArrayPutElement(pVal->parray, &i[0],
- (void*)&mat.operator()(i[0],i[1])) != S_OK)
- return hr;
- return S_OK;
- }
Источник: 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
Отредактировано 05.06.2013 в 23:47:13