只要从另一个文件克隆一个块并插入一个引用,无论它是否是动态的,都是一样的。
这里是一个链接到一个区块经理我张贴让人们开始一个http://www.theswamp.org/index.php?topic=35280.0
下面是该链接中的代码,用于将其引入并选择一个点以插入它。
它在VB中用于
[color=blue]private[/color] [color=blue]void[/color] InsertBlock([color=blue]string[/color] blkName, [color=blue]string[/color] fileName) { [color=#2b91af]Database[/color] extDb = [color=blue]new[/color] [color=#2b91af]Database[/color]([color=blue]false[/color], [color=blue]true[/color]) [color=blue]as[/color] [color=#2b91af]Database[/color]; extDb.ReadDwgFile(fileName, [color=#2b91af]FileOpenMode[/color].OpenForReadAndAllShare, [color=blue]true[/color], [color=#a31515]""[/color]); [color=#2b91af]Document[/color] doc = [color=#2b91af]AcadApp[/color].DocumentManager.MdiActiveDocument; [color=#2b91af]Editor[/color] ed = doc.Editor; [color=#2b91af]Database[/color] db = doc.Database; [color=blue]using[/color] ([color=#2b91af]DocumentLock[/color] docloc = doc.LockDocument()) [color=blue]using[/color] ([color=#2b91af]Transaction[/color] trx = db.TransactionManager.StartTransaction()) [color=blue]using[/color] ([color=#2b91af]Transaction[/color] extTrx = extDb.TransactionManager.StartTransaction()) { [color=#2b91af]BlockTable[/color] bt = db.BlockTableId.GetObject([color=#2b91af]OpenMode[/color].ForRead) [color=blue]as[/color] [color=#2b91af]BlockTable[/color]; [color=#2b91af]BlockTableRecord[/color] currBtr = db.CurrentSpaceId.GetObject([color=#2b91af]OpenMode[/color].ForRead) [color=blue]as[/color] [color=#2b91af]BlockTableRecord[/color]; [color=blue]if[/color] (!(bt.Has(blkName))) { [color=#2b91af]BlockTable[/color] extBt = extDb.BlockTableId.GetObject([color=#2b91af]OpenMode[/color].ForRead) [color=blue]as[/color] [color=#2b91af]BlockTable[/color]; [color=#2b91af]IdMapping[/color] map = [color=blue]new[/color] [color=#2b91af]IdMapping[/color](); [color=#2b91af]ObjectIdCollection[/color] objIdColl = [color=blue]new[/color] [color=#2b91af]ObjectIdCollection[/color](); [color=blue]try[/color] { objIdColl.Add(extBt[blkName]); } [color=blue]catch[/color] { trx.Commit(); [color=blue]return[/color]; } db.WblockCloneObjects(objIdColl, bt.ObjectId, map, [color=#2b91af]DuplicateRecordCloning[/color].Replace, [color=blue]false[/color]); } [color=#2b91af]ObjectId[/color] btrId = bt[blkName].GetObject([color=#2b91af]OpenMode[/color].ForRead).ObjectId; [color=#2b91af]PromptPointOptions[/color] ppo = [color=blue]new[/color] [color=#2b91af]PromptPointOptions[/color]([color=#a31515]"/nSelect Insertion Point: "[/color]); [color=#2b91af]PromptPointResult[/color] ppr = ed.GetPoint(ppo); [color=blue]if[/color] (ppr.Status == [color=#2b91af]PromptStatus[/color].OK) { [color=#2b91af]Point3d[/color] insertPnt = ppr.Value; currBtr.UpgradeOpen(); [color=#2b91af]BlockReference[/color] bref = [color=blue]new[/color] [color=#2b91af]BlockReference[/color](insertPnt,btrId); currBtr.AppendEntity(bref); trx.AddNewlyCreatedDBObject(bref,[color=blue]true[/color]); } trx.Commit(); } }