PCB genesis方槽加内角槽孔实现方法
一.为什么方槽孔加内角孔
如下图,客户来的方槽或Slot槽有内角尺寸要求,通常直接钻一个Slot槽孔内角是不能满足客户要求的,这时我们做CAM的需采用小钻刀进行处理.加内角孔或内角槽的方式进行处理了.
二.为什么不建议直接在4个角加内角孔
Slot槽4个角采用加内角孔的方式处理,这样会导致如下图效果,凸起.
三.方槽加内角槽孔方式(里面加4条槽)
1.常规槽宽则计算方式:
内角槽孔宽度:(W-0.1mm)/2
如:2.0X5.0mm槽宽,内角要求最大r0.5mm 那么内角槽宽为(2-0.1)/2 =0.95mm
2.特殊情况内角槽宽(不能满足内角尺寸要求):
如:2.0X3.0mm,内角要求最大r0.4mm,如按上面常规计算内角槽宽(1-0.1)/2=0.95mm
选用0.95mm钻刀,无法满足r0.4mm内角尺寸要求,这时需选用0.8mm钻刀
3.特殊情况槽宽(无槽刀):
如:1.0X3.0mm,内角要求最大r0.3mm,如按上面常规计算内角槽宽(1-0.1)/2=0.45mm
实际没有0.45mm槽刀,那这种情况,需选0.6mm槽刀,存在短槽孔时,钻刀需减速慢钻
此计算未考虑补偿,如真实计算需将钻孔补偿考虑进来.
四.C#简易代码实现:
1.方槽加内角槽孔代码
#region 方槽 加内角孔
gLayer glayer = g.getFEATURES($"{"drl"}", g.STEP, g.JOB, "mm", true);
foreach (var item in glayer.Llist)
{
List<gL> glList = calc2.l_InnerLine(item);
addCOM.line(glList);
}
#endregion
2.计算函数
/// <summary>
/// 将线段转为内切边的4条线段
/// </summary>
/// <param name="l"></param>
/// <param name="SlotWidth">4个SLOT槽宽 当为0时,自动计算SLOT槽宽</param>
/// <param name="UpVal">单边预大值</param>
/// <returns></returns>
public List<gL> l_InnerLine(gL l, double SlotWidth = , double UpVal = )
{
List<gL> lineList = new List<gL>();
double width = l.width * 0.001;
if (SlotWidth < 0.001)
{
SlotWidth = ((width + UpVal * ) - 0.1)*0.5;
SlotWidth = ((int)(Math.Floor((SlotWidth * ) / )) * ) * 0.001; ;
}
double val = (width - SlotWidth)* 0.5 + UpVal ;
double ang_direction = p_ang(l);
double length = width + UpVal * - SlotWidth;
gL gL1 = p_val_angL(l.pe, val, ang_direction, length);
gL1.width = SlotWidth * ;
gL gL2 = p_val_angL(l.ps, val, p_ang_invert(ang_direction), length);
gL2.width = SlotWidth * ;
lineList.Add(gL1);
lineList.Add(gL2);
lineList.Add(new gL(gL1.ps, gL2.pe, gL1.width));
lineList.Add(new gL(gL1.pe, gL2.ps, gL1.width));
return lineList;
}
/// <summary>
/// 求方位角
/// </summary>
/// <param name="l"></param>
/// <returns></returns>
public double p_ang(gL l)//求方位角
{
return p_ang(l.ps, l.pe);
}
/// <summary>
/// //求增量T 线L坐标
/// </summary>
/// <param name="ps"></param>
/// <param name="val"></param>
/// <param name="ang_direction"></param>
/// <param name="length"></param>
/// <returns></returns>
public gL p_val_angL(gPoint ps, double val, double ang_direction, double length = )
{
gPoint pe = p_val_ang(ps, val, ang_direction);
gL tempL;
tempL.ps = p_val_ang(pe, length * 0.5, ang_direction + );
tempL.pe = p_val_ang(pe, length * 0.5, ang_direction - );
tempL.negative = false;
tempL.attribut = "";
tempL.symbols = "";
tempL.width = ;
return tempL;
}
/// <summary>
/// 求反方位角
/// </summary>
/// <param name="ang_direction"></param>
/// <returns></returns>
public double p_ang_invert(double ang_direction)//求反方位角
{
if (ang_direction >= )
return ang_direction - ;
else
return ang_direction + ;
}
/// <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;Line数据结构
/// <summary>
/// Line 数据类型
/// </summary>
public struct gL
{
public gL(double ps_x, double ps_y, double pe_x, double pe_y, double width_)
{
this.ps = new gPoint(ps_x, ps_y);
this.pe = new gPoint(pe_x, pe_y);
this.negative = false;
this.symbols = "r";
this.attribut = string.Empty;
this.width = width_;
}
public gL(gPoint ps_, gPoint pe_, double width_)
{
this.ps = ps_;
this.pe = pe_;
this.negative = false;
this.symbols = "r";
this.attribut = string.Empty;
this.width = width_;
}
public gL(gPoint ps_, gPoint pe_, string symbols_, double width_)
{
this.ps = ps_;
this.pe = pe_;
this.negative = false;
this.symbols = symbols_;
this.attribut = string.Empty;
this.width = width_;
}
public gPoint ps;
public gPoint pe;
public bool negative;//polarity-- positive negative
public string symbols;
public string attribut;
public double width;
public static gL operator +(gL l1, gPoint move_p)
{
l1.ps += move_p;
l1.pe += move_p;
return l1;
}
public static gL operator +(gL l1, gP move_p)
{
l1.ps += move_p.p;
l1.pe += move_p.p;
return l1;
}
public static gL operator -(gL l1, gPoint move_p)
{
l1.ps -= move_p;
l1.pe -= move_p;
return l1;
}
public static gL operator -(gL l1, gP move_p)
{
l1.ps -= move_p.p;
l1.pe -= move_p.p;
return l1;
}
}
/// <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方槽加内角槽孔实现方法的更多相关文章
- PCB Genesis 外形加内角孔实现方法
在PCB工程制作CAM时,经常会遇到外形拐角处直角的,而客户对内角是要求,比如最大内角要求R0.5mm或者不接受内角, 但成型方式为铣方式,又不是啤板成型,那怎么处理才可以达到要求效果呢,在这里介绍2 ...
- PCB genesis连孔加除毛刺孔(圆孔与槽孔)实现方法(二)
一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...
- PCB genesis连孔加除毛刺孔(槽孔与槽孔)实现方法(三)
一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...
- PCB Genesis拼SET画工艺边 实现方法(一)
在PCB行业中,客户提供的PCB尺寸较小,为方便PCB加工,并生产提高生产效率,通常小于80X80mm需拼板处理的, 拼板要求可能来自按户指定拼板,也有可能是由工厂自行拼板,但对于CAM来说就需将PC ...
- PCB genesis自制孔点 Font字体实现方法
一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...
- PCB Genesis SET拼板(圆形板拼板) 实现效果(二)
越来发现Genesis采用Surface多边形数据结构的重要性了,当撑握了多边形缩放,交集, 差集,并集等算法, 想实现PCB拼板简直轻而易举了;当然借助多边形算法可以开发出更多的PCB实用的工具出来 ...
- 优化加载jQuery的方法
请看下面的一段代码: <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js" ...
- MathType给公式加三角着重号的方法
MathType是一款出色的数学公式编辑器,不仅可以兼容word,还与PPT也兼容.它也可以在PPT中编辑出非常漂亮的公式,再加上PPT本身所具有的动画.颜色.显示等功能,在演示数学公式时非常的精美. ...
- jquery加载页面的方法
jquery加载页面的方法(页面加载完成就执行),建议大家看下windows.onload与$(document).ready之间的区别. 1.$(function(){ $("#a&q ...
随机推荐
- Luogu P1540 机器翻译
思路 大水题,只需要静下心来模拟就行.我一开始做的时候,首先想到滚动数组但是写完之后发现并不符合题目要求.题目要求新加入的单词作为最新的,在时间上属于最后一个.但是如果用滚动数组的话,新加入的单词就成 ...
- 省市区json结构
[ { "label": "北京市", "value": "北京市", "children": [ ...
- 转来的——python webdriver自动化测试初步印象——转来的
python webdriver自动化测试初步印象 以下示例演示启动firefox,浏览google.com,搜索Cheese,等待搜索结果,然后打印出搜索结果页的标题 from selenium i ...
- LINUX-网络 - (以太网和WIFI无线)
ifconfig eth0 显示一个以太网卡的配置 ifup eth0 启用一个 'eth0' 网络设备 ifdown eth0 禁用一个 'eth0' 网络设备 ifconfig eth0 192. ...
- Linux 复习二
第二章 一.Linux文件系统 1.基本概念 Linux文件系统为单根的树状结构,根为“/”,文件名大小写敏感,除了“/”都是可用字符,文件名以“.”开始的为隐藏文件. 2.常用文件夹 bin:可执行 ...
- 洛谷 1472 奶牛家谱 Cow Pedigrees
[题解] DP题,我们用f[i][j]表示有n个节点.高度小于等于j的二叉树的个数.f[i][j]=sigma(f[t][j-1]*f[i-t-1][j-1]) t是1~i-1范围内的奇数. #inc ...
- Shortest Prefixes(poj 2001)
题意:给出n个单词(1<=n<=1000),求出每个单词的非公共前缀,如果没有,则输出自己. /* 字典树 在裸字典树的基础上,设置一个sum数组,sum[i]表示i这个节点被用过几次,当 ...
- 【Java基础】Java基本数据类型与位运算
1.赋值运算符 赋值使用操作符“=”.它的意思是“取右边的值(即右值),把它复制给左边(即左值)”.右值可以是任何 常数.变量或者表达式 (只要它能 生成 一个值就行).但左值必须是一个明确的,已命名 ...
- [bzoj1507][Usaco2009 Hol]Transmission Delay 传输谍延时_动态规划
Transmission Delay 传输谍延时 bzoj-1581 Usaco-2009 Hol 题目大意:题目链接. 注释:略. 想法: 动态规划. 首先我们考虑从后往前dp.(最近好多题都是从后 ...
- Linux查看设备信息命令
系统 #查看内核/操作系统/CPU信息 uname -a #查看操作系统版本 head -n 1 /etc/issue #查看CPU信息 cat /proc/cpuinfo #查看计算机名 hostn ...