实例介绍
【实例截图】
【核心代码】
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开发
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论