ObjectARX, AutoCAD. Среда программирования библиотеки C++


Использование MFC и ClassWizard, чтобы Обратиться К AutoCAD ActiveX Автоматизация - часть 3


 

14 Сделают запрос активного документа для пространства модели.

pDisp = IDoc. GetModelSpace ();

IMSpace. AttachDispatch (pDisp);

 

15 круг требует средней точки и радиуса. Чтобы делать этот эффективным и прозрачным к различным языкам программирования, интерфейс COM использует РАЗЛИЧНЫЙ тип. Точка сохранена в ВАРИАНТЕ как SAFEARRAY. Следующие кодовые наборы SAFEARRAY и память это в ВАРИАНТЕ:

SAFEARRAYBOUND rgsaBound;

rgsaBound.lLbound = 0L;

rgsaBound.cElements = 3;

SAFEARRAY* pStartPoint = NULL;

pStartPoint = SafeArrayCreate(VT_R8, 1, &rgsaBound);

// X value.

//

long i = 0;

double value = 4.0;

SafeArrayPutElement(pStartPoint, &i, &value);

// Y value.

//

i++;

value = 2.0;

SafeArrayPutElement(pStartPoint, &i, &value);

// Z value.

//

i++;

value = 0.0;

SafeArrayPutElement(pStartPoint, &i, &value);

VARIANT pt1;

VariantInit(&pt1);

V_VT(&pt1) = VT_ARRAY | VT_R8;

V_ARRAY(&pt1) = pStartPoint;

 

16 Вызывают AddCircle метод от объекта IAcadModelSpace:

IMSpace. AddCircle (pt1, 2.0);

 

Полная функция должна теперь напомнить

void addCircleThroughMfcCom()

{

IAcadApplication IApp;

IAcadDocument IDoc;

IAcadModelSpace IMSpace;

IDispatch *pDisp = acedGetAcadWinApp()->GetIDispatch(FALSE);

IApp.AttachDispatch(pDisp);

IApp.SetVisible(true);

pDisp = IApp.GetActiveDocument();

IDoc.AttachDispatch(pDisp);

pDisp = IDoc.GetModelSpace();

IMSpace.AttachDispatch(pDisp);

SAFEARRAYBOUND rgsaBound;

rgsaBound.lLbound = 0L;

rgsaBound.cElements = 3;

SAFEARRAY* pStartPoint = NULL;

pStartPoint = SafeArrayCreate(VT_R8, 1, &rgsaBound);

// X value

long i = 0;

double value = 4.0;

SafeArrayPutElement(pStartPoint, &i, &value);

// Y value

i++;

value = 2.0;

SafeArrayPutElement(pStartPoint, &i, &value);

// Z value

i++;

value = 0.0;

SafeArrayPutElement(pStartPoint, &i, &value);

VARIANT pt1;

VariantInit(&pt1);

V_VT(&pt1) = VT_ARRAY | VT_R8;

V_ARRAY(&pt1) = pStartPoint;

IMSpace.AddCircle(pt1, 2.0);

}

 




Начало  Назад  Вперед



Книжный магазин