OBJECT ARX 插入块

////添加块到块表中================
static void TESTaddblkcmd(){

AcDbBlockTable* pBlkTbl;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
////创建新块
AcDbBlockTableRecord* pBlkTblRcd;
pBlkTblRcd = new AcDbBlockTableRecord();


////根据用户的输入设置块表记录的名称
TCHAR blkName[256];


if(acedGetString(Adesk::kFalse,_T("\n输入块名称"),blkName) != RTNORM){

pBlkTbl->close();
delete pBlkTblRcd;
return;
}


pBlkTblRcd->setName(blkName);


////将块表记录添加到块表中


AcDbObjectId blkDefId;
pBlkTbl->add(blkDefId,pBlkTblRcd);
pBlkTbl->close();


////向块表记录中添加实体
AcGePoint3d ptStart(-10,0,0),ptEnd(10,0,0);
AcDbLine* pLine1 = new AcDbLine(ptStart,ptEnd);
ptStart.set(0,-10,0);
ptEnd.set(0,10,0);
AcDbLine *pLine2 = new AcDbLine(ptStart,ptEnd);


AcGeVector3d vecNormal(0,0,1);
AcDbCircle *pCircle = new AcDbCircle(AcGePoint3d::kOrigin,vecNormal,6);
AcDbObjectId entId;
pBlkTblRcd->appendAcDbEntity(entId,pLine1);
pBlkTblRcd->appendAcDbEntity(entId,pLine2);
pBlkTblRcd->appendAcDbEntity(entId,pCircle);


////关闭实体块表记录


pLine1->close();
pLine2->close();
pCircle->close();
pBlkTblRcd->close();


}


////插入块参照
static void TESTaddblkrefcmd(){

////获得用户输入的块定义名称
CString strBlkDef;

if(acedGetString(Adesk::kFalse,_T("\n输入块名称\n"),strBlkDef.GetBuffer()) != RTNORM){
return;
}
acutPrintf(strBlkDef);




////获得当前数据库的块表
AcDbBlockTable* pBlkTbl;


acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);



////查找用户指定的块定义是否存在



if(!pBlkTbl->has(strBlkDef)){
acutPrintf(_T("\n当前图形中未包含块定义"));
pBlkTbl->close();
return;


}


////获得用户输入的块参照的插入点
ads_point pt;
if(acedGetPoint(NULL,_T("\n输入块参照的插入点"),pt) != RTNORM){

pBlkTbl->close();
return;
}


AcGePoint3d ptInsert = asPnt3d(pt);


////获得用户制定的块表记录
AcDbObjectId blkDefId;
pBlkTbl->getAt(strBlkDef,blkDefId);


////创建块参照对象
AcDbBlockReference* pBlkRef = new AcDbBlockReference(ptInsert,blkDefId);


////将块参照添加到模型空间


AcDbBlockTableRecord* pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb::kForWrite);

AcDbObjectId entId;
pBlkTblRcd->appendAcDbEntity(entId,pBlkRef);


////关闭数据库对象
pBlkTbl->close();
pBlkTblRcd->close();
pBlkTbl->close();
}


////===================================================插入带有属性的块定义


static void TESTaddblk2cmd(){


////获得当前图形的数据库块表
AcDbBlockTable* pBlkTbl;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);
////创建新的块表记录


AcDbBlockTableRecord* pBlkTblRcd;


pBlkTblRcd = new AcDbBlockTableRecord();


////根据用户的输入设置块表记录的名称


CString blkName;
if(acedGetString(Adesk::kFalse,_T("\n输入块表记录名称:"),blkName.GetBuffer()) != RTNORM){

pBlkTbl->close();
delete pBlkTblRcd;
return;
}
pBlkTblRcd->setName(blkName);


////将块表记录添加到块表中
AcDbObjectId blkDefId;
pBlkTbl->add(blkDefId,pBlkTblRcd);
pBlkTbl->close();




////向块表记录添加实体
AcGePoint3d ptStart(-10,0,0);
AcGePoint3d ptEnd(10,0,0);


AcDbLine* pLine1 = new AcDbLine(ptStart,ptEnd);
ptStart.set(0,-10,0);
ptEnd.set(0,10,0);
AcDbLine* pLine2 = new AcDbLine(ptStart,ptEnd);
AcGeVector3d vecNormal(0,0,1);
AcDbCircle* pCircle = new AcDbCircle(AcGePoint3d::kOrigin,vecNormal,6);
////创建一个属性,输入直径
AcDbAttributeDefinition* pAttDef = new AcDbAttributeDefinition(ptEnd,_T("20"),_T("直径"),_T("输入直径"));
AcDbObjectId entId;
pBlkTblRcd->appendAcDbEntity(entId,pLine1);
pBlkTblRcd->appendAcDbEntity(entId,pLine2);
pBlkTblRcd->appendAcDbEntity(entId,pCircle);
pBlkTblRcd->appendAcDbEntity(entId,pAttDef);


////关闭实体和块表记录
pLine1->close();
pLine2->close();
pCircle->close();
pAttDef->close();
pBlkTblRcd->close();
}


你可能感兴趣的:(数据库,object,cmd,delete,图形)