基本信息
源码名称:CAD图框外扩
源码大小:0.02M
文件格式:.rar
开发语言:C#
更新时间:2020-08-14
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 10 元 
   源码介绍


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//用于图形文件中对对象的操作
//当处理图形文件中存储的对象中
//acdbmgd.dll
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
//using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.LayerManager;

//用于对AutoCad应用程序进行操作
//当处理AutoCad应用程序和用户接口时引用
//acmgd.dll
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Windows;
using Autodesk.AutoCAD.Windows.ToolPalette;
using Autodesk.AutoCAD.Internal.Windows;
using Autodesk.AutoCAD.Internal.Forms;


namespace NetCad
{
    public static class AddEntity
    {
        #region
        /// <summary>
        /// 向图形中添加单个实体
        /// </summary>
        /// <param name="db">图形数据库</param>
        /// <param name="ent">图形对象</param>
        /// <returns>返回图形objectid</returns>
        public static ObjectId AddEntityToModelSpass(Database db, Entity ent)
        {
            //声明一个objectid,用于返回,以便后期修改图形的颜色等等。
            ObjectId entId = ObjectId.Null;
            //开启事务处理
            Transaction trans = db.TransactionManager.StartTransaction();
            using (trans)
            {
                //打开块表
                BlockTable blkTbl = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                //打开块表记录
                BlockTableRecord blkTbRec = trans.GetObject(blkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                //添加图形到块表记录
                //AppendEntity()返回值是objectid
                entId = blkTbRec.AppendEntity(ent);
                //更新数据信息
                trans.AddNewlyCreatedDBObject(ent, true);
                //提交事务
                trans.Commit();
            }
            return entId;
        }
        #endregion

        #region
        /// <summary>
        /// 向图形中添加多个实体
        /// </summary>
        /// <param name="db">图形数据库</param>
        /// <param name="ent">图形对象,可变参数</param>
        /// <returns>objectID,数组返回</returns>
        public static ObjectId[] AddEntityToModelSpace(Database db, params Entity[] ent)
        {
            ObjectId[] entId = new ObjectId[ent.Length];
            Transaction trans = db.TransactionManager.StartTransaction();
            using (trans)
            {
                BlockTable blkTbl = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord blkTblRec = trans.GetObject(blkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                for (int i = 0; i < ent.Length; i  )
                {
                    entId[i] = blkTblRec.AppendEntity(ent[i]);
                    trans.AddNewlyCreatedDBObject(ent[i], true);
                }

                trans.Commit();
            }
            return entId;
        }
        #endregion


        #region
        /// <summary>
        /// 已知两点向图形中添加直线
        /// </summary>
        /// <param name="db">图形数据库</param>
        /// <param name="startPoint">起点</param>
        /// <param name="endPoint">终点</param>
        /// <returns>直线实体id</returns>
        public static ObjectId AddLineToModelSpace(this Database db, Point3d startPoint, Point3d endPoint)
        {
            return AddEntity.AddEntityToModelSpass(db, new Line(startPoint, endPoint));
        }
        #endregion

        #region
        /// <summary>
        /// 绘制多段线
        /// </summary>
        /// <param name="db">图形数据库</param>
        /// <param name="Width">线宽</param>
        /// <param name="isClosed">是否闭合</param>
        /// <param name="vertices">多段线节点数</param>
        /// <returns>返回的objectId</returns>
        public static ObjectId PolyLineToModelSpace(Database db, double Width, bool isClosed, params Point2d[] vertices)
        {
            //首先判断多段线节点是否小于2
            if (vertices.Length < 2)
            {
                return ObjectId.Null;
            }

            Polyline pLine = new Polyline();
            //循环每个多段线节点
            for (int i = 0; i < vertices.Length; i  )
            {
                pLine.AddVertexAt(i, vertices[i], 0, 0, 0);
            }
            //是否闭合
            if (isClosed)
            {
                pLine.Closed = true;
            }
            //设置线宽
            pLine.ConstantWidth = Width;
            //返回的objectId
            return AddEntity.AddEntityToModelSpass(db, pLine);
        }
        #endregion

        #region
        /// <summary>
        /// 绘制矩形
        /// </summary>
        /// <param name="db">图形数据库</param>
        /// <param name="minpt2d">左下角点</param>
        /// <param name="maxpt2d">右上角点</param>
        /// <returns>返回的objectId</returns>
        public static ObjectId RectangularToModelSpace(Database db, Point2d minpt2d, Point2d maxpt2d)
        {
            Polyline PLine = new Polyline();
            PLine.AddVertexAt(0, minpt2d, 0, 0, 0);
            PLine.AddVertexAt(1, new Point2d(maxpt2d.X, minpt2d.Y), 0, 0, 0);
            PLine.AddVertexAt(2, maxpt2d, 0, 0, 0);
            PLine.AddVertexAt(3, new Point2d(minpt2d.X, maxpt2d.Y), 0, 0, 0);
            PLine.Closed = true;
            return AddEntity.AddEntityToModelSpass(db, PLine);
        }
        #endregion

        public static void AddPline3D(Database db, Point3dCollection pt3Ction, bool isClosed)
        {
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            //PromptPointResult prPtRes = ed.GetPoint("");

            Polyline3d pl3d = new Polyline3d(Poly3dType.SimplePoly, pt3Ction, isClosed);

            AddEntity.AddEntityToModelSpace(db, pl3d);
        }
    }
}