public void WblockCloneObjects(
ObjectIdCollection identifiers,
ObjectId id,
IdMapping mapping,
Autodesk.AutoCAD.DatabaseServices.DuplicateRecordCloning cloning,
[MarshalAs(UnmanagedType.U1)] bool deferTranslation
);
其中各个参数的意义如下:
- identifiers:需要拷贝的源数据库中的对象ID集合,对象ID可以是实体对象ID,也可以是存储实体的块表记录对象ID;
- id:指定目标数据库中用于存放源数据库拷贝实体的所属者对象ID,可以是某个块表记录ID,也可以是BlockTableId;
- mapping:用于存储源数据库中拷贝对象id与目标数据库中新对象id之间的映射关系;
- cloning:若目标数据库中有相同记录,重复记录处理方式:Ignore(忽略),Replace(替换);
以下分别通过两种方式(拷贝实体和拷贝块表记录)实现了用A图纸中的图元替换B图纸中的块表记录,快速实现图框模板定制。
//拷贝实体
public void CloneEntity()
{
try
{
string defaultPath = new DirectoryInfo(typeof(CommandDetail).Assembly.Location).Parent.FullName;
string stdBlkPath = Path.Combine(Path.Combine(defaultPath, "config"), "B.dwg");
string titlePath = Path.Combine(Path.Combine(defaultPath, "config"), "A.dwg");
Database titleDb = new Database(false, true);
titleDb.ReadDwgFile(titlePath, System.IO.FileShare.Read, true, null);
titleDb.CloseInput(true);
Database stdBlkDb = new Database(false, true);
stdBlkDb.ReadDwgFile(stdBlkPath, System.IO.FileShare.ReadWrite, true, null);
stdBlkDb.CloseInput(true);
Point3d rbPos = new Point3d(titleDb.Extmax.X, titleDb.Extmin.Y, 0);
Matrix3d mt = Matrix3d.Displacement(rbPos.GetVectorTo(Point3d.