对不起,我在想你可以爆炸并创建一个新的BlockTableRecord,但如果你保留原始块,那就行不通了。因此,深度克隆是一条出路。您只需要克隆BlockTableRecord,而不是BlockReferences
var db=Application.DocumentManager.MdiActiveDocument.Database
使用(var tr=db.TransactionManager.StartTransaction())
{
var bt=(BlockTable)tr.GetObject(db.BlockTableId,OpenMode.ForWrite)
var ms=(BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForRead)
var testBlock=(BlockTableRecord)tr.GetObject(bt[“test”],OpenMode.ForRead)
var newBlock=(BlockTableRecord)测试块。DeepClone(bt,new IdMapping(),true)
tr.AddNewlyCreatedDBObject(newBlock,true)
var references=testBlock。GetBlockReferenceId(真、假)
foreach(references.Cast
()中的var引用)
{
var blockReference=(blockreforence)tr.GetObject(reference,OpenMode.ForWrite)
块引用。BlockTableRecord=newBlock.ObjectId
}
tr.Commit()
}