Loop over entities in a block

Top  Previous  Next

This code illustrates many things

Loop over entities in a block
Open a transaction and then close it
Getting the type of the object
Getting the class of an object
MText modification
DBText modification

 

 

      static public void FindAndReplaceTextEntities(Database db, string sOldString, string sNewString)

       {

          Document doc = Application.DocumentManager.MdiActiveDocument;

 

          var TextClass = RXObject.GetClass(typeof(DBText));

          var MTextClass = RXObject.GetClass(typeof(MText));

 

          using (var tr = db.TransactionManager.StartOpenCloseTransaction())

           {

              // Open the block table...

              var blockTable = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);

 

              // For every block table record....

              foreach (ObjectId btrId in blockTable)

               {

                  var btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead);

                  if (btr.IsLayout)

                   {

                      foreach (ObjectId id in btr)

                       {

                          if (id.ObjectClass == TextClass)

                           {

                              DBText text = (DBText)tr.GetObject(id, OpenMode.ForWrite);

                              if (text.TextString == sOldString)

                               {

                                   text.TextString = sNewString;

                               }

                           }

                          else if (id.ObjectClass == MTextClass)

                           {

                              MText text = (MText)tr.GetObject(id, OpenMode.ForWrite);

                              if (text.Contents == sOldString)

                               {

                                   text.Contents = sNewString;

                               }

                           }

                       }

                   }

               }

 

               tr.Commit();

           }

       }