Re[5]: Где взять IID_IAcadEntity
От: andreyVC  
Дата: 09.01.06 09:33
Оценка:
Здравствуйте, ekamaloff, Вы писали:


E>Для того, чтобы ты мог использовать AutoCAD в качестве Automation сервера, следует предварительно сымпортировать его библиотеку типов в твой проект. Один из наиболее простых путей — это использование директивы #import (можешь почитать статью "Директива #import"
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
). В качестве filename можешь использовать например ProgID ("progid:AutoCAD.Application") или путь к главному исполняемому файлу AutoCAD-a (обычно библиотеки типов лежат в них).


я сделал импорт acad.tlb — у меня AutoCAD2000

Вот мой код:
void CTestACADDlg::OnACAD()
{
using namespace AutoCAD;
::CoInitialize(NULL);
try
{
CLSID clsid ;
_com_util::CheckError(CLSIDFromProgID (L"AutoCAD.Application", &clsid));
IAcadApplicationPtr pApp;

if (FAILED(pApp.GetActiveObject(clsid)))
{
_com_util::CheckError(pApp.CreateInstance(clsid));
}
pApp->put_Visible(VARIANT_TRUE);
IAcadDocumentsPtr pDocs;
_com_util::CheckError(pApp->get_Documents(&pDocs));
IAcadDocumentPtr pDoc;
//_com_util::CheckError(pDoc = pDocs->Open(_bstr_t("c:\\downtown.dwg"),_variant_t(false)));

pDoc = pDocs->Add();
IAcadModelSpacePtr modsp;
modsp = pDoc->GetModelSpace();
IAcadCirclePtr circle;

double center[]={100,100,0};
COleSafeArray saCenter;
saCenter.CreateOneDim(VT_R8,3,center);

circle= modsp->AddCircle(saCenter,50);

IAcadEntityPtr entity;
entity =(IAcadEntityPtr)circle;
IAcadHatchPtr Hatch;
Hatch= modsp->AddHatch(0,"ANSI31",TRUE);

SAFEARRAY* sa;
sa = SafeArrayCreateVectorEx(VT_DISPATCH,0,1,(void*)&IID_IDispatch);
sa->fFeatures = FADF_DISPATCH | FADF_HAVEIID | FADF_FIXEDSIZE;


IDispatch* pIAcadEntity;
HRESULT hr;
hr = entity->QueryInterface(IID_IAcadEntityPtr,(void **)&pIAcadEntity);
if (FAILED(hr)) return;


long idx[1] = {0};
hr = SafeArrayPutElement(sa,idx,pIAcadEntity);
if (FAILED(hr)) return;


VARIANT ConturArray;
VariantInit(&ConturArray);
ConturArray.vt = VT_ARRAY|VT_DISPATCH|VT_BYREF;
ConturArray.pparray = &sa;


hr = Hatch->AppendOuterLoop(ConturArray);
if (FAILED(hr)) return;


pIAcadEntity->Release();
SafeArrayDestroy(sa);
}
catch(const _com_error e)
{
// if (e.ErrorMessage()!=NULL) acutPrintf("Error: %s",e.ErrorMessage());
}
::CoUninitialize();

}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.