在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#图形和图像处理 → CAD图框外扩

CAD图框外扩

C#图形和图像处理

下载此实例
  • 开发语言:C#
  • 实例大小:0.02M
  • 下载次数:41
  • 浏览次数:576
  • 发布时间:2020-08-14
  • 实例类别:C#图形和图像处理
  • 发 布 人:ccsouth
  • 文件格式:.rar
  • 所需积分:10
 相关标签: cad开发

实例介绍

【实例简介】
【实例截图】

【核心代码】

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);
        }
    }
}

标签: cad开发

实例下载地址

CAD图框外扩

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警