void addCircleThroughCom() { AutoCAD::IAcadApplication *pAcad; AutoCAD::IAcadDocument *pDoc; AutoCAD::IAcadModelSpace *pMSpace; HRESULT hr = NOERROR; LPUNKNOWN pUnk = NULL; LPDISPATCH pAcadDisp = acedGetIDispatch(TRUE); if(pAcadDisp==NULL) return; hr = pAcadDisp->QueryInterface(AutoCAD::IID_IAcadApplication,(void**)&pAcad); pAcadDisp->Release(); if (FAILED(hr)) return; hr = pAcad->get_ActiveDocument(&pDoc); pAcad->Release(); if (FAILED(hr)) return; hr = pDoc->get_ModelSpace(&pMSpace); pDoc->Release(); if (FAILED(hr)) return; SAFEARRAYBOUND rgsaBound; rgsaBound.lLbound = 0L; rgsaBound.cElements = 3; long i; SAFEARRAY* pStartPoint = NULL; pStartPoint = SafeArrayCreate(VT_R8, 1, &rgsaBound); i = 0; double value = 4.0; SafeArrayPutElement(pStartPoint, &i, &value); i = 1; value = 2.0; SafeArrayPutElement(pStartPoint, &i, &value); i = 2; value = 0.0; SafeArrayPutElement(pStartPoint, &i, &value); VARIANT pt1; pt1.vt = VT_ARRAY | VT_R8; pt1.parray = pStartPoint; AutoCAD::IAcadCircle *pCircle; pMSpace->AddCircle(pt1, 2.0, &pCircle); VariantClear(&pt1); pMSpace->Release(); }
bool AddSupportPath( const CString& arxPath ) { AutoCAD::IAcadPreferences* pPrefer; AutoCAD::IAcadPreferencesFiles* pPreferFiles; HRESULT hr = NOERROR; bool ret = true; TRY { LPDISPATCH pAcadDisp = acedGetAcadWinApp()->GetIDispatch( TRUE ); AutoCAD::IAcadApplication* pAcad = NULL; if ( SUCCEEDED( pAcadDisp->QueryInterface( AutoCAD::IID_IAcadApplication, ( void** )&pAcad ) ) ) { BSTR supportPath; hr = pAcad->get_Preferences( &pPrefer ); pAcad->Release(); hr = pPrefer->get_Files( &pPreferFiles ); pPrefer->Release(); hr = pPreferFiles->get_SupportPath( &supportPath ); CString stemp = supportPath; if( !IsPathExit( stemp, arxPath ) ) { stemp = stemp + _T( ";" ) + arxPath; supportPath = stemp.AllocSysString(); pPreferFiles->put_SupportPath( supportPath ); } SysFreeString( supportPath ); // 用完释放 } pPreferFiles->Release(); } CATCH( COleDispatchException, e ) { //e->ReportError(); // 调试用 e->Delete(); ret = false; }
void addMenuThroughCom() { AutoCAD::IAcadApplication *pAcad; AutoCAD::IAcadMenuBar *pMenuBar; AutoCAD::IAcadMenuGroups *pMenuGroups; AutoCAD::IAcadMenuGroup *pMenuGroup; AutoCAD::IAcadPopupMenus *pPopUpMenus; AutoCAD::IAcadPopupMenu *pPopUpMenu; AutoCAD::IAcadPopupMenuItem *pPopUpMenuItem; HRESULT hr = NOERROR; CLSID clsid; LPUNKNOWN pUnk = NULL; LPDISPATCH pAcadDisp = NULL; hr = ::CLSIDFromProgID(L"AutoCAD.Application", &clsid); if (SUCCEEDED(hr)) { if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK) { if (pUnk->QueryInterface(IID_IDispatch, (LPVOID*) &pAcadDisp) != S_OK) return; pUnk->Release(); } } if (SUCCEEDED(pAcadDisp->QueryInterface(AutoCAD::IID_IAcadApplication,(void**)&pAcad)) ){ pAcad->put_Visible(true); } else { acutPrintf("\nQueryInterface trouble."); return; } pAcad->get_MenuBar(&pMenuBar); pAcad->get_MenuGroups(&pMenuGroups); pAcad->Release(); long numberOfMenus; pMenuBar->get_Count(&numberOfMenus); pMenuBar->Release(); VARIANT index; VariantInit(&index); V_VT(&index) = VT_I4; V_I4(&index) = 0; pMenuGroups->Item(index, &pMenuGroup); pMenuGroups->Release(); pMenuGroup->get_Menus(&pPopUpMenus); pMenuGroup->Release(); WCHAR wstrMenuName[256]; MultiByteToWideChar(CP_ACP, 0, "AsdkComAccess", -1, wstrMenuName, 256); // Enables the menu to be loaded/unloaded with the same command. if (!bIsMenuLoaded) { pPopUpMenus->Add(wstrMenuName, &pPopUpMenu); if (pPopUpMenu != NULL) { WCHAR wstrMenuItemName[256]; MultiByteToWideChar(CP_ACP, 0, "&Add A ComCircle", -1, wstrMenuItemName, 256); WCHAR wstrMenuItemMacro[256]; MultiByteToWideChar(CP_ACP, 0, "AsdkComCircle ", -1, wstrMenuItemMacro, 256); VariantInit(&index); V_VT(&index) = VT_I4; V_I4(&index) = 0; pPopUpMenu->AddMenuItem(index, wstrMenuItemName, wstrMenuItemMacro, &pPopUpMenuItem); VariantInit(&index); V_VT(&index) = VT_I4; V_I4(&index) = 1; pPopUpMenu->AddSeparator(index, &pPopUpMenuItem); MultiByteToWideChar(CP_ACP, 0, "Auto&LISP Example", -1, wstrMenuItemName, 256); MultiByteToWideChar(CP_ACP, 0, "(prin1 \"Hello\") ", -1, wstrMenuItemMacro, 256); VariantInit(&index); V_VT(&index) = VT_I4; V_I4(&index) = 2; pPopUpMenu->AddMenuItem(index, wstrMenuItemName, wstrMenuItemMacro, &pPopUpMenuItem); VariantInit(&index); V_VT(&index) = VT_I4; V_I4(&index) = numberOfMenus - 2; pPopUpMenu->InsertInMenuBar(index); pPopUpMenuItem->Release(); bIsMenuLoaded = true; } else { acutPrintf("\nMenu not created."); } } else { VariantInit(&index); V_VT(&index) = VT_BSTR; V_BSTR(&index) = wstrMenuName; pPopUpMenus->RemoveMenuFromMenuBar(index); bIsMenuLoaded = false; } pPopUpMenus->Release(); }
void addCircleThroughCom() { AutoCAD::IAcadApplication *pAcad; AutoCAD::IAcadDocument *pDoc; AutoCAD::IAcadModelSpace *pMSpace; HRESULT hr = NOERROR; CLSID clsid; LPUNKNOWN pUnk = NULL; LPDISPATCH pAcadDisp = NULL; hr = ::CLSIDFromProgID(L"AutoCAD.Application", &clsid); if (SUCCEEDED(hr)) { if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK) { if (pUnk->QueryInterface(IID_IDispatch, (LPVOID*) &pAcadDisp) != S_OK) return; pUnk->Release(); } } if (SUCCEEDED(pAcadDisp->QueryInterface(AutoCAD::IID_IAcadApplication,(void**)&pAcad)) ){ pAcad->get_ActiveDocument(&pDoc); pDoc->get_ModelSpace(&pMSpace); pAcad->Release(); pDoc->Release(); } SAFEARRAYBOUND rgsaBound; rgsaBound.lLbound = 0L; rgsaBound.cElements = 3; long i; SAFEARRAY* pStartPoint = NULL; pStartPoint = SafeArrayCreate(VT_R8, 1, &rgsaBound); i = 0; double value = 4.0; SafeArrayPutElement(pStartPoint, &i, &value); i = 1; value = 2.0; SafeArrayPutElement(pStartPoint, &i, &value); i = 2; value = 0.0; SafeArrayPutElement(pStartPoint, &i, &value); VARIANT pt1; pt1.vt = VT_ARRAY | VT_R8; pt1.parray = pStartPoint; AutoCAD::IAcadCircle *pCircle; pMSpace->AddCircle(pt1, 2.0, &pCircle); pMSpace->Release(); }