//# 类似函数: //# 替换函数: //# 现存缺陷: //# 示例程序: //# 测试要求:
//# 历史记录: 2003年11月24日 , zjw ,完成 //
//# DOC.END
int oxaGetVar(const CString strSym, double &vOut ) {
resbuf rbVar;
int iRt=acedGetVar(strSym, &rbVar) ; if (iRt!=RTNORM) {
return iRt; }
if (rbVar.restype==RTREAL) {
vOut=rbVar.resval.rreal; }
return RTNORM; }
///////////////////////////////////////////////////////////////////////////////// //# DOC.BEGIN
//# 函数名称: oxaGetVar //# 函数编号: OXA //# 函数声明:
//# 函数参数: const CString strSym, // CString &vOut //# 返回值: int //# 函数分类:
//# 函数功能:获取系统变量, 封装acedGetVar() //# 注意事项: //# 涉及的全局变量: //# 调用的OXARX函数: //# 函数算法:
//# ACAD版本:R14 R15 R16 //# 配合函数: //# 类似函数: //# 替换函数: //# 现存缺陷: //# 示例程序: //# 测试要求:
//# 历史记录: 2003年11月24日 , zjw ,完成 //
//# DOC.END
int oxaGetVar(const CString strSym, CString &vOut ) {
resbuf rbVar;
int iRt=acedGetVar(strSym, &rbVar) ; if (iRt!=RTNORM) {
return iRt; }
if (rbVar.restype==RTSTR) {
vOut=rbVar.resval.rstring; }
return RTNORM; }
// 函数名 : SetCurTextStyle // 描述 : 设置当前TextStyle // 返回 : Acad::ErrorStatus // 参数 : const char* lpStyleName
// 参数 : AcDbDatabase* pDb/* = NULL */
Acad::ErrorStatus SetCurTextStyle(const char* lpStyleName, AcDbDatabase* pDb/* = NULL */) {
AcDbDatabase* pCurDb = pDb; if (pCurDb == NULL)
pCurDb = acdbHostApplicationServices()->workingDatabase();
AcDbTextStyleTableRecordPointer spRecord(lpStyleName, pCurDb, AcDb::kForRead); Acad::ErrorStatus es = spRecord.openStatus();
if (es == Acad::eOk) {
es = pCurDb->setTextstyle(spRecord->objectId()); } return es; }
// Function name : SetCurLayer // Descrīption : 设置当前层 // Return type : Acad::ErrorStatus // Argument : const char* lpLayerName // Argument : AcDbDatabase* pDb/* = NULL */
Acad::ErrorStatus SetCurLayer(const char* lpLayerName, AcDbDatabase* pDb/* = NULL */) {
AcDbDatabase* pCurDb = pDb; if (pCurDb == NULL)
pCurDb = acdbHostApplicationServices()->workingDatabase();
AcDbLayerTableRecordPointer spRecord(lpLayerName, pCurDb, AcDb::kForRead); Acad::ErrorStatus es = spRecord.openStatus(); if (es == Acad::eOk) {
es = pCurDb->setClayer(spRecord->objectId()); } return es; }
//获取属性块中所有属性的字符串值,并且存于链表中 CODE:
void FEGroups::iterateDictionary() {
//obtain the GROUP dictionary by looking up \//
/* AcDbDictionary *pNamedobj;
acdbHostApplicationServices()->workingDatabase()
->getNamedObjectsDictionary(pNamedobj, AcDb::kForRead); // Get a pointer to the ASDK_DICT dictionary. //
AcDbDictionary *pDict;
pNamedobj->getAt(\ AcDb::kForRead); pNamedobj->close(); */
// Get a pointer to the ACAD_GROUP dictionary AcDbDictionary *pDict;
acdbHostApplicationServices()->workingDatabase() ->getGroupDictionary(pDict, AcDb::kForRead); // Get an iterator for the ASDK_DICT dictionary. //
AcDbDictionaryIterator* pDictIter = pDict->newIterator(); AcDbGroup *pGroup; char* name;
for (; !pDictIter->done(); pDictIter->next()) { // Get the current record, open it for read, and // print its name. //
pDictIter->getObject((AcDbObject*&)pGroup, AcDb::kForRead); pGroup->getName(name); pGroup->close();
acutPrintf(\}
delete pDictIter; pDict->close(); }
//检测AutoCAD是否已经运行 CODE:
void Autocadtest() {
// TODO: Add your control notification handler code here IAcadApplication m_autocad; IAcadDocuments m_acaddocs;
IAcadDocument m_acaddoc; IAcadModelSpace m_acadmodel; LPDISPATCH pDisp; LPUNKNOWN pUnk; CLSID clsid; BeginWaitCursor();
::CLSIDFromProgID(L\ if(::GetActiveObject(clsid,NULL,&pUnk)==S_OK) {
VERIFY(pUnk->QueryInterface(IID_IDispatch,(void**) &pDisp)==S_OK); m_autocad.AttachDispatch(pDisp); pUnk->Release(); } else {
if(!m_autocad.CreateDispatch(\ {
AfxMessageBox(\ exit(1); } }
m_autocad.SetVisible(true);
m_acaddocs.AttachDispatch(m_autocad.GetDocuments(),true); m_acaddoc.AttachDispatch(m_acaddocs.Add(vtMissing),true); m_acadmodel.AttachDispatch(m_acaddoc.GetModelSpace(),true); m_acadmodel.AddCircle(pVal,100);
m_acadmodel.ReleaseDispatch(); m_acaddoc.ReleaseDispatch(); m_acaddocs.ReleaseDispatch(); m_autocad.ReleaseDispatch(); }
//计算多边形的形心坐标
BOOL GetPolyCentroid(AcDbPolyline * pPline, ads_point CenPt) {
unsigned int i, iCount = 0;
AcDbVoidPtrArray curveSegments, regions;