032 发表于 2010-4-25 01:36:50

AcDbBlockReference和字段

我一直在文档中使用addBlockWithAttributes示例的修改版本,
我只是注意到它不会将字段从AcDbAttributeDefinition复制到AcDbAttribute...
有人知道如何做到这一点吗?
谢谢
**** Hidden Message *****

个性魅力 发表于 2010-4-25 09:38:01

这有效...
Acad::ErrorStatus BlockWorker::CopyFields(AcDbAttributeDefinition *pAttdef, AcDbAttribute *pAtt)
{
Acad::ErrorStatus es = Acad::eOk;
AcDbObjectId fieldId;
AcDbDictionaryPointer pDict(pAttdef->getFieldDictionary(), AcDb::kForRead);
if(pDict.openStatus() == Acad::eOk)
{
    std::auto_ptr pDictIter(pDict->newIterator());
    for(;!pDictIter->done();pDictIter->next())
    {
      AcDbObjectPointer pField(pDictIter->objectId(),AcDb::kForWrite);
      if( (es = pField.openStatus()) != Acad::eOk)
      {
      acutPrintf(_T("\nFailed to open Field :\nLine %ld [%s] In function %s "),
          __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
      continue;
      }
      AcDbField *pNewField = new AcDbField(
      pField->getFieldCode(AcDbField::kAddMarkers),pField->isTextField());
      if(pField == NULL)
      {
      es = Acad::eNullObjectPointer;
      acutPrintf(_T("\nFailed to create Field:\nLine %ld [%s] In function %s "),
          __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
      continue;
      }
      if( (es = pNewField->postInDatabase(m_pDb)) != Acad::eOk)
      {
      acutPrintf(_T("\nFailed to add Field to Database :\nLine %ld [%s] In function %s "),
          __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
      delete pNewField;
      continue;
      }
      if( (es = pAtt->setField(pDictIter->name(),pNewField,fieldId)) != Acad::eOk)
      {
      acutPrintf(_T("\nFailed to set Field :\nLine %ld [%s] In function %s "),
          __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
      continue;
      }
      if( (es = pNewField->evaluate(0,0))!= Acad::eOk)
      {
      acutPrintf(_T("\nFailed to evaluate Field :\nLine %ld [%s] In function %s "),
          __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
      }
      if( (es = pNewField->close()) != Acad::eOk)
      {
      acutPrintf(_T("\nFailed to close Field :\nLine %ld [%s] In function %s "),
          __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
      }
    }
}
return es;
}
页: [1]
查看完整版本: AcDbBlockReference和字段