移动对象
可以沿着指定的向量移动所有绘制的图纸对象和属性参照对象。
为了移动对象,要使用变换矩阵的Displacement函数。此函数需要Vector3d对象做为输入。如果你不知道你需要的向量是多少,你可以创建一个Point3d对象,然后使用GetVectorTo函数来返回位于两个点之间的向量。这个移动向量会显示选定的图元被移动了多长距离,且移动的方向在哪里。
本示例创建一个圆,然后将该圆沿着X轴移动两个单位。
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 MoveObjects
{
public class Class1
{
[CommandMethod("MoveObject")]
public static void MoveObject()
{
//获取当前的文件和数据库
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
//开始事务处理
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
//以读的方式打开块表
BlockTable acBlkTb1;
acBlkTb1 = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
//以写的方式打开块表记录模型空间
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTb1[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
//在2,2坐标点创建0.5直径的圆
Circle acCirc = new Circle();
acCirc.SetDatabaseDefaults();
acCirc.Center = new Point3d(2, 2, 0);
acCirc.Radius = 0.5;
//创建矩阵,用向量从(0,0,0)到(2,0,0);
Point3d acPt3d = new Point3d(0, 0, 0);
Vector3d acVec3d = acPt3d.GetVectorTo(new Point3d(2, 2, 0));
acCirc.TransformBy(Matrix3d.Displacement(acVec3d));
//将新对象添加到块表记录和事务
acBlkTblRec.AppendEntity(acCirc);
acTrans.AddNewlyCreatedDBObject(acCirc, true);
//将新对象保存到数据库中
acTrans.Commit();
}
}
}
}