CAD二次开发学习笔记三(封装添加实体到数据库函数)
学会查看ObjectARX帮助文档。
AcGe开头图形计算。
AcDb图形数据库。
在acrxEntryPoint.cpp添加如下代码:
AcGe开头图形计算。
AcDb图形数据库。
在acrxEntryPoint.cpp添加如下代码:
大气象
//将实体添加到数据库
//cad中的实体最终都要添加到数据库中才能被显示(图纸其实是一个数据库格式的),所以它的作用就是添加实体到数据库中
static Acad::ErrorStatus AddToDb(AcDbEntity* ent, AcDbObjectId& objId)
{
Acad::ErrorStatus es;
AcDbBlockTable* pBlockTable;
AcDbBlockTableRecord* pSpaceRecord;
if ((es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead))
!= Acad::eOk) {
return es;
}
if ((es = pBlockTable->getAt(ACDB_MODEL_SPACE,
pSpaceRecord,
AcDb::kForWrite)) != Acad::eOk) {
return es;
}
if ((es = pBlockTable->close()) != Acad::eOk) {
return es;
}
if ((es = pSpaceRecord->appendAcDbEntity(objId, ent)) != Acad::eOk) {
return es;
}
return pSpaceRecord->close();
}
public:
// - ArxProject2.cmd3 command (do not rename)
static void ArxProject2cmd3(void)
{
// Add your code for command ArxProject2.cmd3 here
AcGePoint3d ptStart(0,0,0);
AcDbCircle *pCircle=new AcDbCircle();
pCircle->setCenter(ptStart);
pCircle->setRadius(1000);
//也可以这样定义圆
//AcDbCircle *pCircle=new AcDbCircle(ptStart,AcGeVector3d(0,0,1),100);
AcDbObjectId circleId;
//调用画实体函数
if(AddToDb(pCircle,circleId)!=Acad::eOk)//传入指针,传出id
AfxMessageBox( _T("加入实体到数据库失败!"));
pCircle->close();
}
//cad中的实体最终都要添加到数据库中才能被显示(图纸其实是一个数据库格式的),所以它的作用就是添加实体到数据库中
static Acad::ErrorStatus AddToDb(AcDbEntity* ent, AcDbObjectId& objId)
{
Acad::ErrorStatus es;
AcDbBlockTable* pBlockTable;
AcDbBlockTableRecord* pSpaceRecord;
if ((es = acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead))
!= Acad::eOk) {
return es;
}
if ((es = pBlockTable->getAt(ACDB_MODEL_SPACE,
pSpaceRecord,
AcDb::kForWrite)) != Acad::eOk) {
return es;
}
if ((es = pBlockTable->close()) != Acad::eOk) {
return es;
}
if ((es = pSpaceRecord->appendAcDbEntity(objId, ent)) != Acad::eOk) {
return es;
}
return pSpaceRecord->close();
}
public:
// - ArxProject2.cmd3 command (do not rename)
static void ArxProject2cmd3(void)
{
// Add your code for command ArxProject2.cmd3 here
AcGePoint3d ptStart(0,0,0);
AcDbCircle *pCircle=new AcDbCircle();
pCircle->setCenter(ptStart);
pCircle->setRadius(1000);
//也可以这样定义圆
//AcDbCircle *pCircle=new AcDbCircle(ptStart,AcGeVector3d(0,0,1),100);
AcDbObjectId circleId;
//调用画实体函数
if(AddToDb(pCircle,circleId)!=Acad::eOk)//传入指针,传出id
AfxMessageBox( _T("加入实体到数据库失败!"));
pCircle->close();
}
我这个博客废弃不用了,今天想寻找外链的时候,突然想到这个博客权重很高。
有需要免费外链的,留言即可,我准备把这个博客变成免费的友情链接站点。