Тема: Как программно сделать мультивидный блок аннотативным?

Всем добрый вечер.
Ранее не сталкивался с ACA.NET.
Безуспешно пытаюсь  сделать мультивидный блок аннотативным (зная идентификатор nObjectID блока) следующим образом:

Document doc = Application.DocumentManager.MdiActiveDocument;
                Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
                Database db = Application.DocumentManager.MdiActiveDocument.Database;
                DBTransactionManager tm = db.TransactionManager;
                Transaction trans = tm.StartTransaction();
                ObjectId objectID = new ObjectId((IntPtr)nObjectID);
                AcadDb.DBObject dbObject = trans.GetObject(objectID, OpenMode.ForWrite);
                if (dbObject is MultiViewBlockReference)
                {
                    MultiViewBlockReference mvBlockReference = dbObject as MultiViewBlockReference;
                    mvBlockReference.UpgradeOpen();
                    bool updateAnnotative = mvBlockReference.UpdateAnnotative();
                    mvBlockReference.Annotative = AnnotativeStates.True;
                    updateAnnotative = mvBlockReference.UpdateAnnotative();
                    AnnotationScale scale = mvBlockReference.AnnotationScale;
                    IntPtr ptr = mvBlockReference.AnnotationScaleUniqueIdentifier;
                    mvBlockReference.Close();
                }
                trans.Commit(); 

При отладке обнаружил, что свойство Annotative обьекта MultiViewBlockReference остается неизменным при присвоении ему каких либо значений.

Возможно присвоить аннотативность блоку можно только при его создании. В таком случае прошу дать ссылку на пример создания мультивидного блока с присвоением ему аннотативности.

Заранее большое спасибо.

(изменено: Владимир Петров, 10 февраля 2011г. 17:38:13)

Re: Как программно сделать мультивидный блок аннотативным?

По-моему автор перепутал раздел. Это должно содержаться в разделе программирование под NET.
Я бы попробовал найти для MultiViewBlockReference его MultiViewBlockDefinition. В его MultiViewBlockDefinition нашел всего используемые обычные акадовские блоки. А все используемые акадовские блоки сделал аннотативными. Вообще не понимая как создается MultiViewBlockReference сложно что-то написать, да и вообще под ACA/MEP что-то сложно написать не зная как и что там работат.

Re: Как программно сделать мультивидный блок аннотативным?

Большое спасибо за помощь. Сделал все как вы сказали. Ниже привожу код, который делает мультивидный блок аннотативным.

 
Document activeDocument = Application.DocumentManager.MdiActiveDocument;
DBTransactionManager transactionManager = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager;
Transaction transaction = transactionManager.StartTransaction();
ObjectId mvBlockID = new ObjectId((IntPtr)nObjectID);
AcadDb.DBObject dbObject = transaction.GetObject(mvBlockID, OpenMode.ForWrite);
if (dbObject is MultiViewBlockReference)
{
         MultiViewBlockReference mvBlockReference = dbObject as MultiViewBlockReference;
         mvBlockReference.UpgradeOpen();
         bool updateAnnotative = mvBlockReference.UpdateAnnotative();
         mvBlockReference.Annotative = AnnotativeStates.True;
         updateAnnotative = mvBlockReference.UpdateAnnotative();

         ObjectId mvBlockDefinitionID = mvBlockReference.BlockDefId;
         AcadDb.DBObject definitionObject = transaction.GetObject(mvBlockDefinitionID, OpenMode.ForWrite);
         if (definitionObject is MultiViewBlockDefinition)
         {
              MultiViewBlockDefinition mvBlockDefinition = definitionObject as MultiViewBlockDefinition;
              AcadDb.ObjectIdCollection objectIdCollection = (definitionObject as     MultiViewBlockDefinition).GetAllBlocksReferenced();
              foreach (AcadDb.ObjectId blockId in objectIdCollection)
              {
                     AcadDb.DBObject blockObject = transaction.GetObject(blockId, OpenMode.ForWrite);
                     if (blockObject is AcadDb.BlockTableRecord)
                     {
                          (blockObject as AcadDb.BlockTableRecord).Annotative = AnnotativeStates.True;
                     }       
              }
         }
}
transaction.Commit();
transaction.Dispose();