小工具

  • 角度转弧度
  • 弧度转角度
  • 判断三点是否在同一条直线上
  • 获取向量与X轴正方向角度
  • 两点之前的距离
  • 获取两点的中心点
  • 将图形对象添加到图形文件中1
  • 将图形对象添加到图形文件中2
  • 两点绘制直线
  • 起点、长度、角度绘制直线
  • 圆心、半径、起始角度绘制圆弧
  • 起始点、中点绘制圆弧
  • 通过圆心、起点夹角绘制圆弧
  • 删除图形对象
  • 获得直线的起点坐标
  • 偏移曲线
  • 添加图层
  • 获取所有图层名称

角度转弧度

/// <summary>
/// 角度转弧度
/// </summary>
/// <param name="degree">角度</param>
/// <returns>弧度</returns>
public static double DegreeToAngle(this double degree)
{return degree * (Math.PI / 180);
}

弧度转角度

 /// <summary>/// 弧度转角度/// </summary>/// <param name="angle">弧度</param>/// <returns>角度</returns>  public static double AngleToDegree(this double angle){return 180 / Math.PI * angle;}

判断三点是否在同一条直线上

/// <summary>
/// 判断三点是否在同一条直线上
/// </summary>
/// <param name="firstPoint">第一个点</param>
/// <param name="secondPoint">第二个点</param>
/// <param name="thirdPoint">第三个点</param>
/// <returns></returns>
public static bool IsOnOneLine(this Point3d firstPoint, Point3d secondPoint, Point3d thirdPoint)
{Vector3d v21 = secondPoint.GetVectorTo(firstPoint);Vector3d v23 = secondPoint.GetVectorTo(thirdPoint);if (v21.GetAngleTo(v23) == 0 || v21.GetAngleTo(v23) == Math.PI){return true;}else{return false;}
}

获取向量与X轴正方向角度

/// <summary>
/// 获取向量与X轴正方向角度
/// </summary>
/// <param name="startPoint">起点</param>
/// <param name="endPoint">终点</param>
/// <returns></returns>
public static double GetAngleToXAxis(this Point3d startPoint, Point3d endPoint)
{//声明一个与x轴平行的量Vector3d temp = new Vector3d(1, 0, 0);//获取起点到终点的向量Vector3d VsToe = startPoint.GetVectorTo(endPoint);return VsToe.Y > 0 ? temp.GetAngleTo(VsToe) : -temp.GetAngleTo(VsToe);
}

两点之前的距离

/// <summary>
/// 两点之前的距离
/// </summary>
/// <param name="point1"></param>
/// <param name="point2"></param>
/// <returns></returns>
public static double GetDistanceBetweenTwoPoint(this Point3d point1,Point3d point2)
{return point1.DistanceTo(point2);
}

获取两点的中心点

/// <summary>
/// 获取两点的中心点
/// </summary>
/// <param name="point1">第一个点</param>
/// <param name="point2">第二个点</param>
/// <returns>中心点</returns>
public static Point3d GetCenterPointBetweenTwoPoint(this Point3d point1, Point3d point2)
{return new Point3d((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2, (point1.Z + point2.Z) / 2);
}

将图形对象添加到图形文件中1

 /// <summary>
/// 将图形对象添加到图形文件中
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="entity">图形对象</param>
/// <returns>图形的objectid</returns>
public static ObjectId AddEntityToModelSpace(this Database db,Entity entity)
{//声明ObjectId,用于返回ObjectId entityId = ObjectId.Null;//开启事务using (Transaction trans = db.TransactionManager.StartTransaction()){//打开块表BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);//打开块表记录BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);//添加图形到块表记录entityId = btr.AppendEntity(entity);//更新数据信息trans.AddNewlyCreatedDBObject(entity, true);//提交trans.Commit();}return entityId;
}

将图形对象添加到图形文件中2

/// <summary>
/// 将图形对象添加到图形文件中
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="entity">图形对象,可变参数</param>
/// <returns>图形的objectId,数组返回</returns>
public static ObjectId[] AddEntityToModelSpace(this Database db,params Entity[] entity)
{//声明ObjectId 用于返回ObjectId[] entityId = new ObjectId[entity.Length];//开启事务using (Transaction trans = db.TransactionManager.StartTransaction()){//打开块表BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId,OpenMode.ForRead);// 打开块表记录BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);for (int i = 0; i < entity.Length; i++){//添加图形到块表记录entityId[i] = btr.AppendEntity(entity[i]);//更新数据消息trans.AddNewlyCreatedDBObject(entity[i],true);}trans.Commit();}return entityId;
}

添加到Database

        public static ObjectId AddToDatabase<TEntity>(this TEntity entity, Transaction host, BlockTableRecord btr)where TEntity : Entity{if (entity is null) return ObjectId.Null;var id = btr.AppendEntity(entity);host.AddNewlyCreatedDBObject(entity, true);return id;}public static List<ObjectId> AddToDatabase<TEntity>(this ICollection<TEntity> entities, Transaction host, BlockTableRecord model_space)where TEntity : Entity{return entities.Select(entity =>{var id = model_space.AppendEntity(entity);host.AddNewlyCreatedDBObject(entity, true);return id;}).ToList();}

两点绘制直线

/// <summary>
/// 绘制直线
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="startPoint">起点坐标</param>
/// <param name="endPoint">终点坐标</param>
/// <returns>ObjectId</returns>
public static ObjectId AddLineToModelSpace(this Database db,Point3d startPoint,Point3d endPoint)
{return db.AddEntityToModelSpace(new Line(startPoint,endPoint));
}

起点、长度、角度绘制直线

/// <summary>
/// 绘制直线
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="startPoint">起点坐标</param>
/// <param name="length">直线长度</param>
/// <param name="degree">与x轴正方向的角度</param>
/// <returns>ObjectId</returns>
public static ObjectId AddLineToModelSpace(this Database db,Point3d startPoint,double length,double degree)
{//计算终点坐标double x = startPoint.X+length*Math.Cos(degree.DegreeToAngle());double y = startPoint.Y + length * Math.Sin(degree.DegreeToAngle());Point3d endPoint = new Point3d(x, y, 0);return db.AddEntityToModelSpace(new Line(startPoint,endPoint));
}

圆心、半径、起始角度绘制圆弧

/// <summary>
/// 绘制圆弧
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="center">圆弧所在圆的圆心点</param>
/// <param name="radius">圆弧的半径</param>
/// <param name="startDegree">圆弧的起始角度</param>
/// <param name="endDegree">圆弧的终止角度</param>
/// <returns>ObjectId</returns>
public static ObjectId AddArcToModelSpace(this Database db,Point3d center,double radius,double startDegree,double endDegree)
{return db.AddEntityToModelSpace(new Arc(center,radius,startDegree.DegreeToAngle(),endDegree.DegreeToAngle()));
}

起始点、中点绘制圆弧

/// <summary>
/// 绘制圆弧
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="startPoint">圆弧的起始点</param>
/// <param name="pointOnArc"></param>
/// <param name="endPoint">圆弧的终止点</param>
/// <returns>ObjectId</returns>
public static ObjectId AddArcToModelSpace(this Database db,Point3d startPoint,Point3d pointOnArc,Point3d endPoint)
{//创建几何类对象CircularArc3d cArc = new CircularArc3d(startPoint,pointOnArc,endPoint);//先判断三点是否在同一条直线上if (startPoint.IsOnOneLine(pointOnArc,endPoint)){return ObjectId.Null;}//创建圆弧对象Arc arc = new Arc(cArc.Center,cArc.Radius,cArc.Center.GetAngleToXAxis(startPoint),cArc.Center.GetAngleToXAxis(endPoint));// 加入图形数据库return db.AddEntityToModelSpace(arc);
}

通过圆心、起点夹角绘制圆弧

/// <summary>
/// 通过圆心、起点夹角绘制圆弧
/// </summary>
/// <param name="db">图形数据库</param>
/// <param name="center">圆心</param>
/// <param name="startPoint">起点</param>
/// <param name="degree">夹角,角度值</param>
/// <returns>ObjectId</returns>
public static ObjectId AddArcToModelSpace(this Database db,Point3d center,Point3d startPoint,double degree)
{//获取半径double radius = center.GetDistanceBetweenTwoPoint(startPoint);//获取起点角度double startAngle = center.GetAngleToXAxis(startPoint);//声明圆弧对象Arc arc = new Arc(center,radius,startAngle,startAngle+degree.DegreeToAngle());return db.AddEntityToModelSpace(arc);
}

删除图形对象

/// <summary>
/// 删除图形对象
/// </summary>
/// <param name="entId">图形对象的ObjectId</param>
public static void EraseEntity(this ObjectId entId)
{//打开事务处理using (Transaction trans = entId.Database.TransactionManager.StartTransaction()){//打开要删除的图形对象Entity ent = (Entity)entId.GetObject(OpenMode.ForWrite);//删除ent.Erase();trans.Commit();}
}

获得直线的起点坐标

/// <summary>
/// 获得直线的起点坐标
/// </summary>
/// <param name="lineId">直线对象的ObjectId</param>
/// <returns></returns>
private Point3d GetLineStartPoint(ObjectId lineId)
{Point3d startPoint;Database db = HostApplicationServices.WorkingDatabase;using (Transaction trans = db.TransactionManager.StartTransaction()){Line line = (Line)lineId.GetObject(OpenMode.ForRead);startPoint = line.StartPoint;}return startPoint;
}

偏移曲线

/// <summary>
/// 偏移曲线
/// </summary>
/// <param name="curves">偏移曲线</param>
/// <param name="dis">偏移距离</param>
/// <returns>偏移后对象集合</returns>
public List<Curve> OffSet(List<Curve> curves,double dis)
{List<Curve> curveList = new List<Curve>();for (int i = 0; i < curves.Count; i++){DBObjectCollection offCur = curves[i].GetOffsetCurves(dis);foreach (var c in offCur){Curve curve = (Curve)c;curveList.Add(curve);}}return curveList;
}

添加图层

/// <summary>/// 添加图层/// </summary>/// <param name="layName"></param>/// <param name="Index"></param>public void AddLayer(string layName, int Index) {Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;string LayerName = "";using (Transaction trans = db.TransactionManager.StartTransaction()){LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);if (lt.Has(layName)){ed.WriteMessage($"\n <{layName}>图层已存在!");}else{LayerName = layName;LayerTableRecord ltr = new LayerTableRecord();ltr.Name = LayerName;//short indexColor = (short)(Index % 256);short indexColor = (short)(Index);ltr.Color = Color.FromColorIndex(ColorMethod.ByLayer, indexColor);ObjectId layerId = lt.Add(ltr);trans.AddNewlyCreatedDBObject(ltr, true);db.Clayer = layerId;}trans.Commit();}}

获取所有图层名称

// 获取当前文档
Document doc = Application.DocumentManager.MdiActiveDocument;
// 获取当前数据库
Database db = doc.Database;using (Transaction trans = db.TransactionManager.StartTransaction())
{// 打开图层表var lt = trans .GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;// 遍历图层表foreach (ObjectId id in lt){var ltr = trans .GetObject(id, OpenMode.ForRead) as LayerTableRecord;// 输出图层名称doc.Editor.WriteMessage(ltr.Name + "\n");}trans .Commit();
}

Cad二次开发小工具相关推荐

  1. 常用的CAD二次开发语言:AutoLISP, LISP是List Processor(表处理程序)的缩写,cad系统的第一代开发工具注意和eclipse(IDE编程环境,java实现的)

    常用的CAD二次开发语言: 1 AutoLISP 全名是LIST Processing Language,LISP是List Processor(表处理程序)的缩写,cad系统的第一代开发工具,是一种 ...

  2. C# CAD二次开发——建筑结构墙体线荷载计算工具开发(一)

    前言: 本人是一名建筑设计公司的结构设计人员,建筑业的势头显然没有前些年那般波涛汹涌.浪潮暂退的今天很多向我这样的结构设计从业人员倍感迷茫.行业沉寂的这些日子里我不断探索,希望在减隔震.BIM.钢结构 ...

  3. cad二次开发——自动运行dll,加载菜单(收集)

    1.自动加载dll的方法(个人觉得下面第4个方法会更方便) cad加载dll_实现CAD插件启动自动加载的三种方法_weixin_39774556的博客-CSDN博客从网上或者别处淘来的CAD插件,效 ...

  4. lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...

    <毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...

  5. python能做cad二次开发吗_做CAD二次开发有没有前途和钱途?

    原标题:做CAD二次开发有没有前途和钱途? 作为上海垂杨信息科技的苦逼小编一枚,特别羡慕从事技术开发的同事,为啥呀,因为他们工资高,奖金多呗.最近一朋友问我,他大学学得C#,在学校的就业培训课上,就业 ...

  6. CAD二次开发技术 好辛苦啊!

    CAD二次开发技术 好辛苦啊! 2011年03月16日 [b]摘[/b][b][/b][b]要[/b][b][/b] 数据结构算法设计和演示(C++)-树和查找是在面向对象思想和技术的指导下,采用面向 ...

  7. C# Cad二次开发新手入门系列教程(一)开发环境搭建

    目录 前言 开发需要做什么准备? 编写自己的第一个程序 前言 本课程主要针对刚接触Cad二次开发或者准备入门Cad二次开发的朋友,笔者是用的C#进行开发,在该系列教程内,笔者会带着大家从最基础的开发到 ...

  8. C#CAD二次开发视频全套介绍及基础环境搭建

    本人录制c#CAD二次开发视频 基础入门全套,感兴趣可以淘宝搜索店铺 PT的cad小店 https://i.xue.taobao.com/detail.htm?spm=a2174.7765247.0. ...

  9. cad二次开发程序的绿色安装

    此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...

最新文章

  1. W3C HTML 工作组联合主席Paul Cotton谈HTML5发展愿景
  2. arcgis python 保存当前窗口图形为jpg
  3. 牛人,多看看他们写的东西
  4. idea分支如何刷新显示最新
  5. 百度推出开发者搜索 Beta;雷军手机使用时长曝光;苹果败诉,电脑上可以模拟 iOS 系统 | 极客头条...
  6. 尝试登录 VMware vCenter Server 5.5 时,“别名”值为空如何解决
  7. 结构体04:结构体嵌套结构体
  8. 数据挖掘有哪些主要步骤
  9. 公司用的非标普通自动化用单片机还是plc_高级电气自动化工程师必备十大技能...
  10. fillna填充某一列_DataFrame基础运算以及空值填充的案例分析
  11. 阿里巴巴矢量图标库使用
  12. AE 制作一个简单的动画
  13. stm32 HAL 重映射
  14. noip模拟赛 斐波那契
  15. 2020-03-09
  16. 微信商城商家该如何运营
  17. 将文件从 Linux 传输到 Windows
  18. Curator zookeeper异常:Error while calling watcher
  19. 打造自己的windows一键安装系统
  20. 帮助全人类知识无版权传播的计划 - Library Genesis

热门文章

  1. 金属胁迫+转录组=高分好文
  2. FTP服务器异地备份文件,ftp异地备份
  3. 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
  4. 引用Microsoft.Office.Interop.Excel的解决方法
  5. 切面(@Aspect)和事务(@Transactional)莫名失效:`is not eligible for getting processed by all BeanPostProcesso
  6. 为什么要使用异常及java异常的使用--及js、php、golang的异常机制
  7. 华为畅享10与10s有什么区别?哪个更好
  8. [Unity ECS] 游戏对象转换和子场景 [1]
  9. java计算机毕业设计淮安城市开放大学实习实训管理系统源码+mysql数据库+系统+lw文档+部署
  10. 服务器的丢包率一般与什么有关