hi
You must search in layouts
Need example from
import clr
import os
import re
# Add Assemblies for AutoCAD APIs
clr.AddReference('acmgd')
clr.AddReference('acdbmgd')
clr.AddReference('accoremgd')
# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
import Autodesk.AutoCAD.ApplicationServices.Application as acapp
import Autodesk.AutoCAD.ApplicationServices.DocumentCollectionExtension
#------------------------
DWGPaths = IN[0]
oldBlockReferenceName = IN[1]
newBlockReferenceName = IN[2]
#Real Code
for DWGPath in DWGPaths:
adoc = DocumentCollectionExtension.Open(acapp.DocumentManager, DWGPath, False)
with adoc.LockDocument():
with adoc.Database as db:
with db.TransactionManager.StartTransaction() as t:
###get ID for block reference replacement
blockTable = t.GetObject(db.BlockTableId, OpenMode.ForWrite)
newBlockID = [block for block in blockTable if block.Name == newBlockReferenceName][0]
###
layoutObjectIDs = []
layoutBlockTableIDs = []
layoutDict = t.GetObject(db.LayoutDictionaryId, OpenMode.ForWrite)
for layout in layoutDict:
if "Model" not in layout.Key:
layoutObjectIDs.append(layout.Value)
for layoutObjectID in layoutObjectIDs:
layout = t.GetObject(layoutObjectID, OpenMode.ForWrite)
layoutBlockTableID = layout.BlockTableRecordId
layoutBlockTableIDs.append(layoutBlockTableID)
for layoutBlockTableID in layoutBlockTableIDs:
layoutBTR = t.GetObject(layoutBlockTableID, OpenMode.ForWrite)
blockReferenceIDs = [blockReferenceID for blockReferenceID in layoutBTR]
blockReferences = []
blockReferencePositions = []
for blockReferenceID in blockReferenceIDs:
object = t.GetObject(blockReferenceID, OpenMode.ForWrite)
if object.GetType() == Autodesk.AutoCAD.DatabaseServices.BlockReference and object.Name == oldBlockReferenceName:
blockReferences.append(object)
blockReferencePositions.append(object.Position)
####
for object in blockReferences:
object.Erase(True)
for position in blockReferencePositions:
newbr = BlockReference(position, newBlockID)
layoutBTR.AppendEntity(newbr)
t.AddNewlyCreatedDBObject(newbr, True)
t.Commit()
pass
if adoc:
DocumentExtension.CloseAndSave(adoc, DWGPath)
OUT = layoutBlockTableIDs, layoutObjectIDs, blockReferenceIDs, blockReferences, blockReferencePositions, newBlockID