leigis 发表于 2009-2-10 08:40:48

帮助!!我是初学者?帮帮我!!

嗨,我已经学习了几天的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 *****

七十年代生人 发表于 2009-2-10 10:46:01

我的另一个猜测是,也许你需要阅读UNICODE......
HTH,欢迎来到沼泽...

贝小姐 发表于 2009-2-10 10:57:37

不太确定你想完成什么,但也许这会给你一些想法。
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]
查看完整版本: 帮助!!我是初学者?帮帮我!!