📄 exam03.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 + -