一.为什么增加尾孔呢

看一看下图在panel中增加尾孔的效果;如下图所示,主要有2点原因.

1.孔径大小测量

假设如果不增加尾孔,要检测孔径大小是否符合要求,那么QA检测会选择最后钻的孔进大小进行测量, 但钻孔路径优化后,是不知道哪个孔是最后一个孔钻孔,为了让钻孔QA清楚的知道哪个孔是尾孔,CAM制作时会将每把刀最一个孔放到统一的一个区域内排列。

2.防止漏钻刀

如果最后一把刀尾孔漏钻了,那么QA一眼就看出来漏钻刀了

说一下钻孔工序QA检测孔径要求是:用针规全部测量其尾孔,并随机测量一些板内的孔,检查有无孔大孔小

二.增加尾孔有哪些要求

1.尾孔钻刀大小排序

正常是尾孔的钻刀排序和钻孔输出的钻刀排序一致,每个工厂钻刀排序不同,需结合每个工厂排刀要求而定,通常钻孔是:先排工具孔,再排圆孔,再排槽孔,接着再排除尘孔。这里测试代码钻刀从小到大排列(见下方代码)。

2.尾孔间距

尾孔间距要求比较宽松,0.5-2.0mm之间,一般取中间值就好了,但如遇到钻刀数太多了,会导致孔整个尾孔区域的长度超长了,尾孔会与其它图形或钻孔重叠,这时候可以考虑钻孔间距减少一些了.

3.尾孔位置

通常尾孔加到板角, 尾孔的方向如下图所示

三.C#简易代码实现:

1.genesis加尾孔代码

            //钻孔尺寸按小到大排序      实际钻刀输出钻刀排序进行排序
var OrderSizeList = symbolsList.OrderBy(tt => tt.width).Select(tt=>tt.width *0.001 ).ToList(); gPoint StartPoint = new gPoint(, ); //起点
double Hole2Hole = ;//孔边到孔边
double Ang_direction = ; //方位角
List<gP> HoleList = calc2.p_2plist(OrderSizeList, StartPoint, Hole2Hole, Ang_direction);
addCOM.pad(HoleList);

2.计算函数

        /// <summary>
/// 通过已排序孔大小列表生成点链
/// </summary>
/// <param name="OrderSizeList">已排序钻孔</param>
/// <param name="StartPoint">起始点</param>
/// <param name="Hole2Hole">孔边到孔边</param>
/// <param name="Ang_direction">方位角</param>
/// <returns></returns>
public List<gP> p_2plist(List<double> OrderSizeList, gPoint StartPoint, double Hole2Hole, double Ang_direction)
{
List<gP> HoleList = new List<gP>();
gPoint newP = StartPoint;
int HoleSizeCount = OrderSizeList.Count();
double PreRadSize = ;
if (HoleSizeCount > )
{
HoleList.Add(new gP(newP, OrderSizeList[] * ));
PreRadSize = OrderSizeList[] * 0.5;
}
for (int i = ; i < HoleSizeCount; i++)
{
var val = PreRadSize + Hole2Hole + OrderSizeList[i] * 0.5;
newP = p_val_ang(newP, val, Ang_direction);
HoleList.Add(new gP(newP, OrderSizeList[i] * ));
PreRadSize = OrderSizeList[i] * 0.5;
}
return HoleList;
}
/// <summary>
/// 求增量坐标
/// </summary>
/// <param name="ps">起点</param>
/// <param name="val">增量值</param>
/// <param name="ang_direction">角度</param>
/// <returns></returns>
public gPoint p_val_ang(gPoint ps, double val, double ang_direction)
{
gPoint pe;
pe.x = ps.x + val * Math.Cos(ang_direction * Math.PI / );
pe.y = ps.y + val * Math.Sin(ang_direction * Math.PI / );
return pe;
}

3.Point,PAD数据结构

    /// <summary>
/// PAD 数据类型
/// </summary>
public struct gP
{
public gP(double x_val, double y_val, double width_)
{
this.p = new gPoint(x_val, y_val);
this.negative = false;
this.angle = ;
this.mirror = false;
this.symbols = "r";
this.attribut = string.Empty;
this.width = width_;
}
public gPoint p;
public bool negative;//polarity-- positive negative
public double angle;
public bool mirror;
public string symbols;
public string attribut;
public double width;
public static gP operator +(gP p1, gP p2)
{
p1.p += p2.p;
return p1;
}
public static gP operator -(gP p1, gP p2)
{
p1.p -= p2.p;
return p1;
}
}
/// <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;
}
}

四.实现效果

PCB genesis加尾孔实现方法的更多相关文章

  1. PCB Genesis加邮票孔(弧与弧)实现算法

    一.Genesis加邮票孔(弧与弧)实现算法 1.鼠标点击位置P点(可以确认搜索区域位置,确认点击位置周边元素分区,此所讲算法未应用到P点坐标) 2.求出:P1C与P2C (线与弧最近点距离的2个点) ...

  2. PCB Genesis加邮票孔(线与弧)实现算法

    一.Genesis加邮票孔(线与弧)实现算法 1.鼠标点击位置P点(可以确认搜索区域位置,确认点击位置周边元素分区,此所讲算法未应用到P点坐标) 2.求出:P1C与P2C (线与弧最近点距离的2个点) ...

  3. PCB Genesis加邮票孔(线与线)实现算法

    一.Genesis加邮票孔(线与线)实现算法 1.鼠标点击位置P点, 2.通过P点求出,垂足2个点:P1C与P2C (两个点即距离2条线段垂直的垂足点) 3.计算P1C到P2C方位角(假设置为变量PA ...

  4. PCB Genesis加二维码 实现方式

    使用incam可以很轻松的增加2维码,这里通过另外一种方式玩转二维码的加法, 使用谷歌zxing.dll类库实现,将文字信息转为bitmap点阵后,在Genesis绘制点即可. 一.incam增加二维 ...

  5. PCB Genesis加邮票孔(弧形连接位宽度校正)实现算法

    采用弧形作为加接位,当两边距离较远时,会造成连接位变窄,由于之前算法是基于连接位间距做为半径画弧, 必然存在这个缺陷,这边做少许的改进解决此问题. 现将几个种增加孤形连接位的图形对比如下: 一.两边外 ...

  6. PCB Genesis加邮票孔(邮票孔增加方向判断--左右上下)实现算法

    之前没解决的问题,当时一下卡在用户界面选择邮票孔增加的方向(上下左右) 与邮票孔实际方位之前的逻辑与非判断上卡壳了,导致一下没进展下去. 回头看原来如此简单 ,将此点记录一下. 1.垂直线定义:80- ...

  7. PCB Genesis SET拼板(圆形板拼板) 实现效果(二)

    越来发现Genesis采用Surface多边形数据结构的重要性了,当撑握了多边形缩放,交集, 差集,并集等算法, 想实现PCB拼板简直轻而易举了;当然借助多边形算法可以开发出更多的PCB实用的工具出来 ...

  8. PCB genesis自制孔点 Font字体实现方法

    一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...

  9. js jquery 页面加载初始化方法

    js jquery 页面加载初始化方法 一.js页面加载初始化方法 // 1.在body里面写初始化方法. <body onload='init()'> </body> < ...

随机推荐

  1. 洛谷——P1176 路径计数2

    P1176 路径计数2 题目描述 一个N \times NN×N的网格,你一开始在(1,1)(1,1),即左上角.每次只能移动到下方相邻的格子或者右方相邻的格子,问到达(N,N)(N,N),即右下角有 ...

  2. Python3.0科学计算学习之类

    类: Python中的类是一个抽象的概念,甚至比函数还要抽象.可以把它简单的看作是数据以及由存取.操作这些数据的方法所组成的一个集合.类是Python的核心概念,是面向对象编程的基础. 类有如下的优点 ...

  3. IDLE in Python (Ubuntu)

    To lauch IDLE in the Current Woking Directory >>> usr/bin/idle3 Alt + n  # next command Alt ...

  4. HDU 1018 阶乘数的位数

    题目大意: 将一个数开阶乘后得到的值,来求这个值的位数 n! = 1*2*3*4...*n 对于求一个数的位数的方法为ans = lg(n!) + 1 那么就可以看作 ans = lg(1) + lg ...

  5. 洛谷 P2683 小岛

    P2683 小岛 题目背景 西伯利亚北部的寒地,坐落着由 N 个小岛组成的岛屿群,我们把这些小岛依次编号为 1 到 N . 题目描述 起初,岛屿之间没有任何的航线.后来随着交通的发展,逐渐出现了一些连 ...

  6. Jsp中EL表达式的使用

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka   1.什么是EL         EL是JSP表达式语言,全称是ExpressionLang ...

  7. 【ora10,4】oracle后台进程介绍:

    一.SMON(System MONitor) 系统监控进程:      在数据库启动过程中,SMON排在CKPT进程之后,在Oracle9i中排在第六号的位置: PMON started with p ...

  8. Python3基础(七) I/O操作

    一个程序可以从键盘读取输入,也可以从文件读取输入:而程序的结果可以输出到屏幕上,也可以保存到文件中便于以后使用.本文介绍Python中最基本的I/O函数. 一.控制台I/O 读取键盘输入 内置函数in ...

  9. 【RefactoringCode】The description of the refactoring book

    Last night the book named [Data Structure with Java Hubbed] was closed. When talked about the advant ...

  10. 模板小程序】求小于等于N范围内的质数

    xiaoxi666 联系邮箱: xiaoxi666swap@163.com 博客园 首页 新随笔 联系 订阅 管理 [模板小程序]求小于等于N范围内的质数   1 //筛法求N以内的素数(普通法+优化 ...