帮助!!我是初学者?帮帮我!!
嗨,我已经学习了几天的Objectarx。谁能告诉我我的功能有什么问题。我的英语不好。谢谢。
void leiArxMFC1_plist(void)
{
AcDbLayerTable *pLayerTbl;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pLayerTbl, AcDb::kForRead);
if (!pLayerTbl->has("dgx"))
{
acutPrintf("\n no\"dgx\"!");
pLayerTbl->close();
return;
}
AcDbObjectId layerId;
pLayerTbl->getAt("dgx", layerId);
pLayerTbl->close();
AcDbBlockTable *pBlkTbl;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl, AcDb::kForRead);
AcDbBlockTableRecord *pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd,
AcDb::kForRead);
pBlkTbl->close();
AcDbBlockTableRecordIterator *pItr;
pBlkTblRcd->newIterator(pItr);
AcDbEntity *pEnt;
ads_name entName;
for (pItr->start(); !pItr->done(); pItr->step())
{
pItr->getEntity(pEnt, AcDb::kForWrite);
AcDbObjectId entId;
entId = pEnt->objectId();
------------------------------------------------------
acdbGetAdsName(entName,entId);
struct resbuf *rbEnt;
struct resbuf *rb;
rbEnt = acdbEntGet(entName);
rb = rbEnt;
---------------------------------------------------
while (rb != NULL)
{
switch (rb->restype)
{
case 8:
acutPrintf("\n layer:%s", rb->resval.rstring);
break;
case 39:
acutPrintf("\n T:%s", rb->resval.rstring);
break;
case 30:
if (rb->resval.rreal == 60)
{
pEnt->setColorIndex(1);
}
acutPrintf("\n elven:%d", rb->resval.rreal);
break;
default:
break;
}
rb = rb->rbnext;
}
pEnt->close();
}
delete pItr;
pBlkTblRcd->close();
}
丹尼尔编辑:添加代码标签
**** Hidden Message ***** 我的另一个猜测是,也许你需要阅读UNICODE......
HTH,欢迎来到沼泽...
不太确定你想完成什么,但也许这会给你一些想法。
ps:欢迎来到沼泽
static void SwampHelpdoit(void)
{
const CString layerName = "dgx";
AcDbObjectId objId;
AcDbObjectId BTRid;
ads_name entName;
struct resbuf *rbEnt = NULL;
struct resbuf *rbTmp = NULL;
AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
AcDbLayerTablePointer pLayerTbl(pDb->layerTableId(),AcDb::kForRead);
if(pLayerTbl.openStatus() != Acad::eOk)
{
acutPrintf(_T("\nFailed to open LayerTable"));
return;
}
if(!pLayerTbl->has(layerName))
{
acutPrintf(_T("\nError: Layer %s was not found"),layerName);
return;
}
AcDbBlockTablePointer pBlkTbl(pDb->blockTableId(), AcDb::kForRead);
if(pBlkTbl.openStatus() != Acad::eOk)
{
acutPrintf(_T("\nFailed to open BlockTable"));
return;
}
if(pBlkTbl->getAt(ACDB_MODEL_SPACE,BTRid) != Acad::eOk)
{
acutPrintf(_T("\nFailed to get BlockTableRecord"));
return;
}
AcDbBlockTableRecordPointer pBlkTblRcd(BTRid,AcDb::kForRead);
if(pBlkTblRcd.openStatus() != Acad::eOk)
{
acutPrintf(_T("\nFailed to open BlockTableRecord"));
return;
}
AcDbBlockTableRecordIterator* pIterator = NULL;
pBlkTblRcd->newIterator(pIterator);
for (pIterator->start(); !pIterator->done(); pIterator->step())
{
pIterator->getEntityId(objId);
AcDbObjectPointer pEnt(objId, AcDb::kForRead);
acdbGetAdsName(entName,objId);
rbEnt = acdbEntGet(entName);
if (pEnt.openStatus() == Acad::eOk)
{
for (rbTmp=rbEnt;rbTmp->rbnext!=NULL;rbTmp=rbTmp->rbnext)
{
switch (rbTmp->restype)
{
case 8:
acutPrintf(_T("\n layer:%s"), rbTmp->resval.rstring);
break;
case 39:
acutPrintf(_T("\n T:%s"), rbTmp->resval.rstring);
break;
case 30:
if (rbTmp->resval.rreal == 60){
pEnt->upgradeOpen();
pEnt->setColorIndex(1);
}
acutPrintf(_T("\n elven:%f"), rbTmp->resval.rreal);
break;
default:
break;
}
}
}
}
delete pIterator;
}
页:
[1]