PCB 板边倒圆角的实现方法(基本算法一)
2019-07-15 00:56
2835 查看
当PCB外形是直角时,通常工程制作外形(锣带)时,会将直角或尖角的地方倒成圆角,主要是为了防止板边容易划伤板且容易扎伤人
所以当客户没有特殊要求时,PCB外形是直角一般会默认倒角0.5mm圆角(如下图所示)
/// <summary> /// Surface 坐标泛型集类1 /// </summary> public class gSur_Point { public gSur_Point() { } public gSur_Point(double x_val, double y_val, byte type_point_) { this.p.x = x_val; this.p.y = y_val; this.type_point = type_point_; } public gSur_Point(gPoint p, byte type_point_) { this.p = p; this.type_point = type_point_; } public gPoint p; /// <summary> /// 0为折点 1为顺时针 2为逆时针 /// </summary> public byte type_point { get; set; } = 0; /// <summary> /// 值 /// </summary> public double Value { get; set; } = 0; /// <summary> /// 角度 /// </summary> public double Angle { get; set; } = 0; /// <summary> /// 标记 /// </summary> public bool isFalg { get; set; } } /// <summary> /// 点 数据类型 (XY) /// </summary> public struct gPoint { public gPoint(gPoint p_) { this.x = p_.x; this.y = p_.y; } public gPoint(double x_val, double y_val) { this.x = x_val; this.y = y_val; } public double x; public double y; public static gPoint operator +(gPoint p1, gPoint p2) { p1.x += p2.x; p1.y += p2.y; return p1; } public static gPoint operator -(gPoint p1, gPoint p2) { p1.x -= p2.x; p1.y -= p2.y; return p1; } public static gPoint operator +(gPoint p1, double val) { p1.x += val; p1.y += val; return p1; } public static bool operator ==(gPoint p1, gPoint p2) { return (p1.x == p2.x && p1.y == p2.y); } public static bool operator !=(gPoint p1, gPoint p2) { return !(p1.x == p2.x && p1.y == p2.y); } } /// <summary> /// 求叉积 判断【点P与线L】位置关系【小于0】在右边 【大于0】在左边 【等于0】共线 /// </summary> /// <param name="ps"></param> /// <param name="pe"></param> /// <param name="p"></param> /// <returns>【小于0】在右边 【大于0】在左边 【等于0】共线</returns> public double multi(gPoint ps, gPoint pe, gPoint p) { return ((ps.x - p.x) * (pe.y - p.y) - (pe.x - p.x) * (ps.y - p.y)); } /// <summary> /// 检测 Surface是否逆时针 /// </summary> /// <param name="gSur_Point_list"></param> /// <returns></returns> public bool s_isCCW(List<gSur_Point> gSur_Point_list) { double d = 0; int n = gSur_Point_list.Count() - 1; for (int i = 0; i < n; i++) { if (gSur_Point_list[i].type_point > 0) continue; int NextI = i + 1 + (gSur_Point_list[i + 1].type_point > 0 ? 1 : 0); d += -0.5 * (gSur_Point_list[NextI].p.y + gSur_Point_list[i].p.y) * (gSur_Point_list[NextI].p.x - gSur_Point_list[i].p.x); } return d > 0; } /// <summary> /// 返回两点之间欧氏距离 /// </summary> /// <param name="p1"></param> /// <param name="p2"></param> /// <returns></returns> public double p2p_di(gPoint p1, gPoint p2) { return Math.Sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); } /// <summary> /// 求方位角 /// </summary> /// <param name="ps"></param> /// <param name="pe"></param> /// <returns></returns> public double p_ang(gPoint ps, gPoint pe) { double a_ang = Math.Atan((pe.y - ps.y) / (pe.x - ps.x)) / Math.PI * 180; //象限角 转方位角 计算所属象限 并求得方位角 if (pe.x >= ps.x && pe.y >= ps.y) //↗ 第一象限 { return a_ang; } else if (!(pe.x >= ps.x) && pe.y >= ps.y) // ↖ 第二象限 { return a_ang + 180; } else if (!(pe.x >= ps.x) && !(pe.y >= ps.y)) //↙ 第三象限 { return a_ang + 180; } else if (pe.x >= ps.x && !(pe.y >= ps.y)) // ↘ 第四象限 { return a_ang + 360; } else { return a_ang; } }View Code 三.板边凸点倒圆角方法 方法一.也最简单的倒角方法,我们将PCB板边凸点找出来后,可以直接借助genesis倒角功能就可以实现了
当然但偶尔会报错的, 且当N个小线段组成的尖角倒角会出错(要实现完美效果只有自己写倒角算法啦)
方法二:自己写倒角算法,这个算法和加内角孔算法类似(这里只是介绍简单的倒角)考虑特殊的需要扩展
可以参考这篇文章: https://www.cnblogs.com/pcbren/p/9665304.html
四.凸点加倒圆角实现效果
相关文章推荐
- 图的基本算法实现(邻接矩阵与邻接表两种方法)
- 图的基本算法实现(邻接矩阵与邻接表两种方法)
- 图的基本算法实现(邻接矩阵与邻接表两种方法)
- 图的基本算法实现(邻接矩阵与邻接表两种方法)
- 基本的数字滤波方法及算法实现
- 算法导论-第22章-基本的图算法-22.2 广度优先搜索-22.2-4 用邻接矩阵方法实现BFS
- 图的基本算法实现(邻接矩阵与邻接表两种方法)
- 图的基本算法实现(邻接矩阵与邻接表两种方法)
- 在C++中实现文件的读写的基本方法
- [基本算法]Java——编写一个线段类,实现基本数学算法
- 各种基本算法实现小结(六)—— 查找算法
- 在VC中应用MSXML DOM 的一些基本实现方法
- PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法
- 各种基本算法实现小结(四)—— 图及其遍历
- CSS技巧之圆角背景与三角形实现方法
- dll--几种基本实现及调用方法
- SOA服务的基本实现方法—使用HTTP协议传输XML请求(POX-over-HTTP)
- 实现DIV圆角的js代码和使用方法
- 实现圆角矩形边框的方法