zjh2785 发表于 2016-6-12 03:04:30

【求助】如何获取一个属性块的指定值

我定义了一个属性块,块名为“BG”,里面有一条属性,用来表示高程的,

然后图形里面这块有若干个,每个块里的属性值都不一样,

我想实现一个功能,就是输入一个命令后提示要我选择这个属性块,完了就直接显示出里面的属性。
如下图所示:

下面是我的部分代码
ads_name ssResult;
ads_point ssptres;
AcDbObjectId blkDefId;

acedEntSel(L"选择一个块:", ssResult, ssptres);
acdbGetObjectId(blkDefId, ssResult);
AcDbBlockTableRecord *pBlkDefRcd;
acdbOpenObject(pBlkDefRcd, blkDefId, AcDb::kForRead);//返回值46,eNotThatKindOfClass),好象是说类型不对.

本想先得到块表记录->判断是否包含属性->遍历Entity->读取TextString。
但上面红色部分代码出问题了,找了一晚上没搞出个什么名堂,各位兄弟麻烦支支招,跪谢~~~


springwillow 发表于 2016-7-5 17:25:35

本帖最后由 springwillow 于 2016-7-5 17:32 编辑

给你个参考AcDbEntity *pBent;
                        TCHAR *pName;
                        ads_name ssResult;
                        ads_point ssptres;
                        AcDbObjectId objId;
                        acedEntSel(_T("选择一个块:"), ssResult, ssptres);
                        acdbGetObjectId(objId, ssResult);
                        Acad::ErrorStatus es = acdbOpenAcDbEntity(pBent, objId, AcDb::kForRead);
                        if(es != Acad::eOk)
                              continue;
                        AcDbBlockReference *pBlkRef = AcDbBlockReference::cast(pBent);
                        AcDbObjectIterator *pIter = pBlkRef->attributeIterator();
                        for (pIter->start(); !pIter->done(); pIter->step())
                        {
                              AcDbObjectId idAtt = pIter->objectId();
                              AcDbAttribute *pEntity = NULL;
                              es = acdbOpenObject(pEntity,idAtt,AcDb::kForRead);
                              if (es != Acad::eOk)
                                        continue;
                              pEntity->textString();//属性值
                              pEntity->close();

                        }
                        delete pIter;
                        pBent->close();
页: [1]
查看完整版本: 【求助】如何获取一个属性块的指定值