⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exam03.cpp

📁 objectARX实例
💻 CPP
字号:
     #include <adslib.h>
     #include <rxdlinkr.h>
     #include <aced.h>
     #include <dbents.h>
     #include <geassign.h>
     #include <dbsymtb.h>
     #include <dbapserv.h>

Acad::ErrorStatus newLine();

void addLineCommand()
{
//{{BEGIN_LEVEL_ADVANCED
    if (newLine()==Acad::eOk)
        acutPrintf("Success\n");
    else
        acutPrintf("Failed\n");
//{{END_LEVEL_ADVANCED
}

Acad::ErrorStatus 
postToDatabase(/*[in]*/AcDbEntity* pEnt,/*[out]*/AcDbObjectId& idObj)

{
	Acad::ErrorStatus	  es;
	AcDbBlockTable*		pBlockTable;
	AcDbBlockTableRecord*  pSpaceRecord;
	//确定当前有正在工作的数据库
    if (acdbHostApplicationServices()->workingDatabase()==NULL)
        return Acad::eNoDatabase;
    //获得当前图形的指针
    //获得图形的块表,打开准备读取数据
    if ((es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead))==Acad::eOk){
	//获得建模空间的记录,打开准备写数据  
	
        if ((es = pBlockTable->getAt(ACDB_MODEL_SPACE, pSpaceRecord, AcDb::kForWrite))==Acad::eOk){
    //添加实体指针到建模空间后关闭指针和建模空间记录
	
            if ((es = pSpaceRecord->appendAcDbEntity(idObj, pEnt))==Acad::eOk)
                pEnt->close();
            pSpaceRecord->close();
        }
	//关闭块表
	    pBlockTable->close();

    }
	//返回状态信息
	return es;
}

Acad::ErrorStatus newLine()
{

	ads_point pt1, pt2;//定义两个ads_point的点
	int retval;

	try 
	{
		//从用户处获得第一点

	if ((retval = acedGetPoint(NULL, "\nSelect lower left:  ",        pt1)) != RTNORM) 
			throw retval;

		//以第一点为基点, 从用户处获得第二点.
		

		if ((retval = acedGetPoint(pt1, "\nSelect upper right:  ", pt2)) != RTNORM)
			throw retval;

	}
	catch (int e)
	{
		if (e == RTCAN)
    //判断输入错误程序中断
			return Acad::eUserBreak;
		if (e == RTERROR)
     //判断无效输入
			return Acad::eInvalidInput;
	}

	
// 将ads_point类型的点转换为AcGePoint3d类型之后创建直线
	AcDbLine* pLine = new AcDbLine(asPnt3d(pt1), asPnt3d(pt2));

//如果创建直线出错,返回错误信息
	if (!pLine)
	{
		acedAlert("Not enough memory to create a Line!");
		return Acad::eOutOfMemory;
	}
    AcDbObjectId id;  //定义对象ID
	return postToDatabase(pLine, id);
}

extern "C" AcRx::AppRetCode 
acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt) 
{
    switch (msg) {
    case AcRx::kInitAppMsg:

        acrxDynamicLinker->unlockApplication(pkt); 
		

		acrxDynamicLinker->registerAppMDIAware(pkt);

        //注册命令
		
    acedRegCmds->addCommand("EXAM03","addline","addline",ACRX_CMD_MODAL,addLineCommand);

        break;
    case AcRx::kUnloadAppMsg:
        //当应用程序卸载后,为防止AUOTCAD调用此命令,产生不必要的 
        //错误,移走命令组
        
        acedRegCmds->removeGroup("EXAM03");

        break;
    }
    return AcRx::kRetOK;
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -