明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2027|回复: 3

指定基点插入dwg文件,如何做?

[复制链接]
发表于 2010-8-11 16:31:00 | 显示全部楼层 |阅读模式

  这是《手册》上的代码,画两个圆并复制到另一个文件里,我想复制过去后将圆放在我指定的位置,请教大家看看,如何修改

 

 

  [CommandMethod("CopyObjectsBetweenDatabases", CommandFlags.Session)]
        public static void CopyObjectsBetweenDatabases()
        {
            ObjectIdCollection acObjIdColl = new ObjectIdCollection();

            // Get the current document and database
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;

            // Lock the current document
            using (DocumentLock acLckDocCur = acDoc.LockDocument())
            {
                // Start a transaction
                using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
                {
                    // Open the Block table record for read
                    BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;

                    // Open the Block table record Model space for write
                    BlockTableRecord acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                    // Create a circle that is at (0,0,0) with a radius of 5
                    Circle acCirc1 = new Circle();
                    acCirc1.SetDatabaseDefaults();
                    acCirc1.Center = new Point3d(0, 0, 0);
                    acCirc1.Radius = 5;

                    // Add the new object to the block table record and the transaction
                    acBlkTblRec.AppendEntity(acCirc1);
                    acTrans.AddNewlyCreatedDBObject(acCirc1, true);

                    // Create a circle that is at (0,0,0) with a radius of 7
                    Circle acCirc2 = new Circle();
                    acCirc2.SetDatabaseDefaults();
                    acCirc2.Center = new Point3d(0, 0, 0);
                    acCirc2.Radius = 7;

                    // Add the new object to the block table record and the transaction
                    acBlkTblRec.AppendEntity(acCirc2);
                    acTrans.AddNewlyCreatedDBObject(acCirc2, true);

                    // Add all the objects to copy to the new document
                    acObjIdColl = new ObjectIdCollection();
                    acObjIdColl.Add(acCirc1.ObjectId);
                    acObjIdColl.Add(acCirc2.ObjectId);

                    // Save the new objects to the database
                    acTrans.Commit();
                }

                // Unlock the document
            }

            // Change the file and path to match a drawing template on your workstation
            string sLocalRoot = Application.GetSystemVariable("LOCALROOTPREFIX") as string;
            string sTemplatePath = sLocalRoot + "Template\\acad.dwt";

            // Create a new drawing to copy the objects to
            DocumentCollection acDocMgr = Application.DocumentManager;
            Document acNewDoc = acDocMgr.Add(sTemplatePath);
            Database acDbNewDoc = acNewDoc.Database;

            // Lock the new document
            using (DocumentLock acLckDoc = acNewDoc.LockDocument())
            {
                // Start a transaction in the new database
                using (Transaction acTrans = acDbNewDoc.TransactionManager.StartTransaction())
                {
                    // Open the Block table for read
                    BlockTable acBlkTblNewDoc;
                    acBlkTblNewDoc = acTrans.GetObject(acDbNewDoc.BlockTableId,
                                                       OpenMode.ForRead) as BlockTable;

                    // Open the Block table record Model space for read
                    BlockTableRecord acBlkTblRecNewDoc;
                    acBlkTblRecNewDoc = acTrans.GetObject(acBlkTblNewDoc[BlockTableRecord.ModelSpace],
                                                        OpenMode.ForRead) as BlockTableRecord;

                    // Clone the objects to the new database
                    IdMapping acIdMap = new IdMapping();
                    acCurDb.WblockCloneObjects(acObjIdColl, acBlkTblRecNewDoc.ObjectId, acIdMap,
                                               DuplicateRecordCloning.Ignore, false);

                    // Save the copied objects to the database
                    acTrans.Commit();
                }
                foreach(ObjectId id in acObjIdColl)
                {

                    CxwEdit.Mirror(id, new Point3d(100, 100, 0), new Point3d(100, 200, 0), false);
                }
                // Unlock the document
            }

            // Set the new document current
            // acDocMgr.MdiActiveDocument = acNewDoc;
        }

 楼主| 发表于 2010-8-11 16:33:00 | 显示全部楼层

对不起,以下两句是我加的,不能正确运行, 

 foreach(ObjectId id in acObjIdColl)
                {

                    CxwEdit.Mirror(id, new Point3d(100, 100, 0), new Point3d(100, 200, 0), false);
                }

发表于 2010-8-11 16:43:00 | 显示全部楼层

你的acObjIdColl是源数据库的,

应该改变的是目标数据库

发表于 2010-10-31 18:12:00 | 显示全部楼层
看不懂,但一定要顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 00:50 , Processed in 0.165257 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表