AutoCAD.Net/C#.Net QQ群:193522571 深度克隆 deepclone

时间:2021-03-08 13:07:39   收藏:0   阅读:0

废话不多说,上个例子。更多讨论请加我的QQ群:193522571

[CommandMethod("copyEnt")]
        public void copyEnt()
            {
            Document doc = AcApp.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            PromptEntityOptions options = new PromptEntityOptions("\nSelect entity to copy");

            PromptEntityResult acSSPrompt = ed.GetEntity(options);

            if (acSSPrompt.Status != PromptStatus.OK)
                return;

            ObjectIdCollection collection = new ObjectIdCollection();
            collection.Add(acSSPrompt.ObjectId);

            //make model space as owner for new entity
            ObjectId ModelSpaceId = SymbolUtilityServices.GetBlockModelSpaceId(db);

            IdMapping mapping = new IdMapping();
            //db.DeepCloneObjects(collection, ModelSpaceId, mapping, false);

            //now open the new entity and change the color...
            using (Transaction Tx = db.TransactionManager.StartTransaction())
                {
                Entity oldEnt = (Entity)Tx.GetObject(acSSPrompt.ObjectId, OpenMode.ForRead);
                Entity newEnt = (Entity)oldEnt.DeepClone(oldEnt, mapping, true);


                //get the map.
                IdPair pair1 = mapping[acSSPrompt.ObjectId];

                //new object
                Entity ent = Tx.GetObject(pair1.Value, OpenMode.ForWrite) as Entity;

                
                //change the color to red
                ent.ColorIndex = 1;
                ent.Highlight();
                BlockTableRecord btr = (BlockTableRecord)Tx.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                btr.AppendEntity(newEnt);
                Tx.AddNewlyCreatedDBObject(newEnt, true);

                Tx.Commit();
                }

            }

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!