移动对象

可以沿着指定的向量移动所有绘制的图纸对象和属性参照对象。

为了移动对象,要使用变换矩阵的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();
            }
        }
    }
}

 

posted @ 2023-06-04 13:38  chenlight  阅读(18)  评论(1编辑  收藏  举报