为了复制对象,要在对象上运用已提供的Clone函数。这个函数会创建一个与原始对象的重复的新对象。一旦创建了副本对象,就可以将其添加或附加到数据库之前对其进行修改。如果不变换对象或更改它们的位置 ,则新对象将位于与原对象相同的位置。
如果你需要复制大量的对象,可以添加每个对象的ids到ObjectIdCollction对象中,然后迭代每个对象。在迭代每个对象时,可以对每个对象使用Clone函数,然后将新对象添加或追加到数据库中。
复制单一对象
以下示例创建一个新圆,然后创建该圆的直接副本来创建第二个圆。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
namespace SingleCopy
{
public class DYCopy
{
[CommandMethod("SingleCopy")]
public static void SCopy()
{
//获取当前文件和数据库
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
//开始事务管理
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
//以读的方式打开块表
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
//打开块表记录模型空间,用于写
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
//创建圆心为(2,3),半径为4.25的圆
Circle acCirc = new Circle();
acCirc.SetDatabaseDefaults();
acCirc.Center = new Point3d(2, 3, 0);
acCirc.Radius = 4.25;
//添加新对象到块表记录和事务
acBlkTblRec.AppendEntity(acCirc);
acTrans.AddNewlyCreatedDBObject(acCirc, true);
//创建圆的副本,并改变它的半径
Circle acCircClone = acCirc.Clone() as Circle;
acCircClone.Radius = 1;
//添加圆的副本
acBlkTblRec.AppendEntity(acCircClone);
acTrans.AddNewlyCreatedDBObject(acCircClone, true);
//将新对象保存到数据库中
acTrans.Commit();
}
}
}
}
标签:AutoCAD,对象,创建,复制,acTrans,acCirc,using,CAD
From: https://www.cnblogs.com/chenlight/p/17455672.html