Тема: пример работы с мтекстом и полями

Добрый день, подскажите пожалуйста, никак не получается закинуть поля в мтекст, чего-то видимо не хватает. Делаю примерно так:
<code>
  AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
  AcDbBlockTable *pBlockTable;
  acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);

  AcDbBlockTableRecord *pBlockTableRecord;
  pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
  pBlockTable->close();

  AcDbMText* pMText = new AcDbMText;
  pMText->setDatabaseDefaults(pDb);
  pBlockTableRecord->appendAcDbEntity(pMText);

  /**********************************************************************/
  /* Create field objects                                               */
  /**********************************************************************/
  Acad::ErrorStatus res;
  AcDbField* pTextField = new AcDbField;
  AcDbField* pField_1 = new AcDbField;
  AcDbField* pField_2 = new AcDbField;

  /**********************************************************************/
  /* Set and evaluate field objects                                     */
  /**********************************************************************/
  res = pField_1->setEvaluationOption(AcDbField::kAutomatic); //eOk
  AcString fc1(_T("\\AcVar Date \\f M/dd/yyyy"));
  res = pField_1->setFieldCode(fc1); //eOk
  res = pField_1->evaluate(AcDbField::kAutomatic, pDb); //eOk

  res = pField_2->setEvaluationOption(AcDbField::kAutomatic);
  AcString fc2(_T("\\AcVar Date \\f h:mm tt"));
  res = pField_2->setFieldCode(fc2); //eOk
  res = pField_2->evaluate(AcDbField::kAutomatic, pDb); //eOk

  AcDbFieldArray fldArray;
  fldArray.append(pField_1);
  fldArray.append(pField_2);

  pTextField->setEvaluationOption(AcDbField::kAutomatic);
  AcString fc3(_T("Date %<\\_FldIdx 0>% Time %<\\_FldIdx 1>%"));
  res = pTextField->setFieldCode(fc3, AcDbField::FieldCodeFlag(AcDbField::kTextField), &fldArray); //eOk

  AcDbObjectId textFldId;
  res = pMText->setField(_T("TEXT"), pTextField, textFldId); //eOk

  pField_1->close();
  pField_2->close();
  pTextField->close();

  res = pMText->convertFieldToText(); //eOk
  ACHAR* sContent = pMText->contents(); // sContent получается равным Date  Time?
  pMText->close();
</code>

В результате хотел увидеть в тексте Date 10/10/2011 Time 12:00, а получается только Date Time.
Спасибо.

Re: пример работы с мтекстом и полями

С уверенностью могу сказать только одно - не хватает вызова acdbEvaluateFields

Re: пример работы с мтекстом и полями

Александр, спасибо, но к сожалению результат тот же. К тому же, значения переменных numFound и numEvaluated после вызова acdbEvaluateFields остаются равными нулю.
<code>
  int numFound = 0;
  int numEvaluated = 0;
  res = acdbEvaluateFields(pMText->objectId(), AcDbField::kAutomatic, NULL, pDb, AcFd::kEvalRecursive, &numFound, &numEvaluated); //eOk
</code>
Может быть влияет место вызова метода или состояние объектов (открыт/закрыт)?

(изменено: Александр Ривилис, 17 октября 2011г. 00:40:25)

Re: пример работы с мтекстом и полями

Евгений пишет:

Может быть влияет место вызова метода или состояние объектов (открыт/закрыт)?

Конечно. MText должен быть добавлен в базу и закрыт.

acdbEvaluateFields(objId,AcDbField::kPreview,_T("TEXT"), pDb,AcFd::kEvalRecursive);