插入块改变比例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CString blockname;
m_listctrl.GetLBText(m_listctrl.GetCurSel(),blockname);
//blockname = "CHART-20";
//寻找是否已经定义
AcDbDatabase *pCurDb = acdbHostApplicationServices()->workingDatabase(); AcDbBlockTable *pBlkTable;
AcDbObjectId blockId ;
pCurDb->getBlockTable(pBlkTable, AcDb::kForRead);
if(!pBlkTable->has(blockname))
{
pBlkTable->close();
AcDbDatabase *pDwg =new AcDbDatabase (Adesk::kFalse) ;
char dir[MAX_PATH];
GetModuleFileName(NULL,dir,MAX_PATH);
dir[CString(dir).ReverseFind('\')]='\0';
//AfxMessageBox(CString(dir)+"\\survingpack\"+blockname+".dwg");
pDwg->readDwgFile (CString(dir)+"\\survingpack\"+blockname+".dwg") ;
Acad::ErrorStatus es = pCurDb->insert (blockId, blockname, pDwg);//, Adesk::kFalse) ; //
delete pDwg ;
if ( es != Acad::eOk )
{
acutPrintf ("\n插入块错误.") ;
return;
}
}
else
pBlkTable->getAt(blockname, blockId);
BeginEditorCommand();
//ShowWindow(SW_HIDE);
ads_point pt={0,0,0};
int rc=acedGetPoint(NULL,"\n选择插入点:",pt);
if (rc==RTCAN||rc==RTNONE)
{
acutPrintf("\n*取消了插入操作*");
CancelEditorCommand();
return;
}
CompleteEditorCommand();
//---- 设置插入点,旋转角度,比例等等
AcDbBlockReference *pBlkRef =new AcDbBlockReference(AcGePoint3d(pt[0],pt[1],pt[2]),blockId) ;
//pBlkRef->setBlockTableRecord (blockId) ;
pBlkRef->setScaleFactors(AcGeScale3d(m_scale,m_scale,1));
//pBlkRef->setPosition(AcGePoint3d(pt[0],pt[1],pt[2])) ;
pBlkRef->setRotation (m_angle) ;
pBlkRef->setLayer(NULL); //设置图层
//获得模型空间块表记录
AcDbBlockTable *pBlockTable ;
acdbHostApplicationServices()->workingDatabase()->getBlockTable (pBlockTable, AcDb::kForRead) ;
AcDbBlockTableRecord *pBlockTableRecord ;
pBlockTable->getAt (ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite) ; pBlockTable->close () ;
pBlockTableRecord->appendAcDbEntity(pBlkRef);
//获得属性
AcDbBlockTableRecord *pBlkDefRecord;
acdbOpenObject(pBlkDefRecord, blockId, AcDb::kForRead);
if(pBlkDefRecord->hasAttributeDefinitions())
{
//AcDbObjectIterator* pBlkIterator = pBlkRef->attributeIterator(); //修改
AcDbBlockTableRecordIterator *pIterator;
pBlkDefRecord->newIterator(pIterator);
for(pIterator->start(); !pIterator->done();pIterator->step())
{
AcDbEntity *pEnt;
pIterator->getEntity(pEnt, AcDb::kForRead);
AcDbAttributeDefinition *pAttDef = AcDbAttributeDefinition::cast(pEnt);
if(pAttDef != NULL && !pAttDef->isConstant())
{
AcDbAttribute* pAtt = new AcDbAttribute();