明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3052|回复: 2

请教各位,图中的块参照如何遍历?

[复制链接]
发表于 2007-7-17 17:34:00 | 显示全部楼层 |阅读模式

我现在要取图层上的所有块参照的块名,使用选择集没做出来,程序如下

rb.restype =2;
char Sbuf[16];
strcpy(Sbuf,"BLOCKREFERENCE");
rb.resval.rstring = Sbuf;
rb.rbnext = NULL;
ads_name ss;
acedSSGet("X",NULL,NULL,&rb,ss);

不知道失败的原因,只好采用遍历的方法,看到前面有帖子有遍历块表里的块名的方法,采用之,发现没办法用取到的块表块名来取块参照的块名,苦思两天了,不知道是为什么,请大家不吝赐教!!谢谢了!!

   pTable->getAt(saBlockName.GetAt(i),Id);
    //AcDbEntity *pEnt;
    AcDbObject *pObj;
    Acad::ErrorStatus es;
    es = acdbOpenAcDbObject(pObj,Id,AcDb::kForRead);
    //es = acdbOpenObject(pEnt,Id,AcDb::kForRead);(使用时出错es ==eNotAnEntity,因此采用acdbOpenAcDbObject)
    //AcRxObject ent = pEnt->AcRxObject;
    AcDbBlockReference *pBlkRef=new AcDbBlockReference;//= (AcDbBlockReference*)pObj
   
    if(pBlkRef->isKindOf(AcDbBlockReference::desc()))
    {
    pBlkRef= AcDbBlockReference::cast(pObj);(!!!!!!!出错地点:pBlkRef的返回值为0)
    }
   
    AcDbObjectId pBlkTblRecId;
    //pBlkTblRecId = pBlkRef->blockTableRecord();
    pBlkTblRecId = pBlkRef->objectId();

发表于 2007-7-17 21:34:00 | 显示全部楼层
AcDbBlockTableRecord *pBlockDef;
acdbOpenObject(pBlockDef, blockId, AcDb::kForRead);

AcDbBlockTableRecordIterator *pIterator;
pBlockDef->newIterator(pIterator);
AcGePoint3d basePoint;
AcDbEntity *pEnt;
AcDbAttributeDefinition *pAttdef;
for (pIterator->start(); !pIterator->done();
pIterator->step())//将source.dwg中所有的Attibute进行遍历
{
pIterator->getEntity(pEnt, AcDb::kForRead);
pAttdef = AcDbAttributeDefinition::cast(pEnt);
if (pAttdef != NULL && !pAttdef->isConstant()) {
AcDbAttribute *pAtt = new AcDbAttribute();
pAtt->setPropertiesFrom(pAttdef);
pAtt->setInvisible(pAttdef->isInvisible());
basePoint = pAttdef->position();
basePoint += pBlkRef->position().asVector();
pAtt->setPosition(basePoint);
pAtt->setHeight(pAttdef->height());
pAtt->setRotation(pAttdef->rotation());
pAtt->setTag("Tag");
pAtt->setFieldLength(25);
char *pStr = pAttdef->tag();
pAtt->setTag(pStr);
acutDelString(pStr);
pAtt->setFieldLength(pAttdef->fieldLength());
pAtt->setTextString("-");

AcDbObjectId attId;

pBlkRef->appendAttribute(attId, pAtt);
pAtt->close();
}
pEnt->close(); // use pEnt... pAttdef might be NULL
}
delete pIterator;
 楼主| 发表于 2007-7-18 09:27:00 | 显示全部楼层

和我的要求不一样啊,我要遍历的是块参照的块名啊,这个得到的是attibute,继续求答案,大侠们再帮帮忙啊,

而且我这边的基础不是很好,有没有介绍基础的好书推荐一下呢?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 19:36 , Processed in 0.165758 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表