Cad二次开发小工具
小工具
- 角度转弧度
- 弧度转角度
- 判断三点是否在同一条直线上
- 获取向量与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二次开发小工具相关推荐
- 常用的CAD二次开发语言:AutoLISP, LISP是List Processor(表处理程序)的缩写,cad系统的第一代开发工具注意和eclipse(IDE编程环境,java实现的)
常用的CAD二次开发语言: 1 AutoLISP 全名是LIST Processing Language,LISP是List Processor(表处理程序)的缩写,cad系统的第一代开发工具,是一种 ...
- C# CAD二次开发——建筑结构墙体线荷载计算工具开发(一)
前言: 本人是一名建筑设计公司的结构设计人员,建筑业的势头显然没有前些年那般波涛汹涌.浪潮暂退的今天很多向我这样的结构设计从业人员倍感迷茫.行业沉寂的这些日子里我不断探索,希望在减隔震.BIM.钢结构 ...
- cad二次开发——自动运行dll,加载菜单(收集)
1.自动加载dll的方法(个人觉得下面第4个方法会更方便) cad加载dll_实现CAD插件启动自动加载的三种方法_weixin_39774556的博客-CSDN博客从网上或者别处淘来的CAD插件,效 ...
- lisp陡坎程序_(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版)最新版...
<毕业论文:Autolisp在CAD二次开发中的应用.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)毕业论文设计_Autolisp在CAD二次开发中的应用.doc(最终版) ...
- python能做cad二次开发吗_做CAD二次开发有没有前途和钱途?
原标题:做CAD二次开发有没有前途和钱途? 作为上海垂杨信息科技的苦逼小编一枚,特别羡慕从事技术开发的同事,为啥呀,因为他们工资高,奖金多呗.最近一朋友问我,他大学学得C#,在学校的就业培训课上,就业 ...
- CAD二次开发技术 好辛苦啊!
CAD二次开发技术 好辛苦啊! 2011年03月16日 [b]摘[/b][b][/b][b]要[/b][b][/b] 数据结构算法设计和演示(C++)-树和查找是在面向对象思想和技术的指导下,采用面向 ...
- C# Cad二次开发新手入门系列教程(一)开发环境搭建
目录 前言 开发需要做什么准备? 编写自己的第一个程序 前言 本课程主要针对刚接触Cad二次开发或者准备入门Cad二次开发的朋友,笔者是用的C#进行开发,在该系列教程内,笔者会带着大家从最基础的开发到 ...
- C#CAD二次开发视频全套介绍及基础环境搭建
本人录制c#CAD二次开发视频 基础入门全套,感兴趣可以淘宝搜索店铺 PT的cad小店 https://i.xue.taobao.com/detail.htm?spm=a2174.7765247.0. ...
- cad二次开发程序的绿色安装
此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...
最新文章
- W3C HTML 工作组联合主席Paul Cotton谈HTML5发展愿景
- arcgis python 保存当前窗口图形为jpg
- 牛人,多看看他们写的东西
- idea分支如何刷新显示最新
- 百度推出开发者搜索 Beta;雷军手机使用时长曝光;苹果败诉,电脑上可以模拟 iOS 系统 | 极客头条...
- 尝试登录 VMware vCenter Server 5.5 时,“别名”值为空如何解决
- 结构体04:结构体嵌套结构体
- 数据挖掘有哪些主要步骤
- 公司用的非标普通自动化用单片机还是plc_高级电气自动化工程师必备十大技能...
- fillna填充某一列_DataFrame基础运算以及空值填充的案例分析
- 阿里巴巴矢量图标库使用
- AE 制作一个简单的动画
- stm32 HAL 重映射
- noip模拟赛 斐波那契
- 2020-03-09
- 微信商城商家该如何运营
- 将文件从 Linux 传输到 Windows
- Curator zookeeper异常:Error while calling watcher
- 打造自己的windows一键安装系统
- 帮助全人类知识无版权传播的计划 - Library Genesis
热门文章
- 金属胁迫+转录组=高分好文
- FTP服务器异地备份文件,ftp异地备份
- 【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
- 引用Microsoft.Office.Interop.Excel的解决方法
- 切面(@Aspect)和事务(@Transactional)莫名失效:`is not eligible for getting processed by all BeanPostProcesso
- 为什么要使用异常及java异常的使用--及js、php、golang的异常机制
- 华为畅享10与10s有什么区别?哪个更好
- [Unity ECS] 游戏对象转换和子场景 [1]
- java计算机毕业设计淮安城市开放大学实习实训管理系统源码+mysql数据库+系统+lw文档+部署
- 服务器的丢包率一般与什么有关