在PCB工程制作CAM时,经常会遇到外形拐角处直角的,而客户对内角是要求,比如最大内角要求R0.5mm或者不接受内角,

但成型方式为铣方式,又不是啤板成型,那怎么处理才可以达到要求效果呢,在这里介绍2种方法。

一.采用大小锣刀分2次锣外形

由于采用2次锣,此效率较低,目前PCB行业基本已放弃此方法了处理内角了,

要知道我们PCB行业是非常很重视效率,为了提高效率,PCB行业普遍采用第2种方法(详见方法2)

二.在外形拐角处加----内角孔

方槽为直角时,用直径2.0mm锣刀,内角无法锣出直角效果,
        像如下图所示:这样就会造成内角R1.0mm内角
        如果客户此槽需插元器件可能无法插入的影响

如下图这样加内角孔后,比第一种方法效率要高多了,也达到了同样处理内角的效果

三.实现原理图解:

四.代码实现:

如下代码是:线与线求相切圆, (弧与线,弧与弧 求相切圆的原理是相似的,可以在此基础上扩展)

        /// <summary>
/// 线段与线段倒圆角
/// </summary>
/// <param name="l1"></param>
/// <param name="l2"></param>
/// <param name="tolerance"></param>
/// <returns></returns>
public gL_di l2l_Round(ref gL l1, ref gL l2, double Radius, double tolerance = 0.5)
{
gL_di gldi = new gL_di();
int isIntersectType = ;
gPoint pc = l2l_Intersect(l1, l2, ref isIntersectType);
if (isIntersectType == ) //平行无交点 平行线方位角相同 接近平行线 相差接近
{
return gldi;
}
else
{
double l1pspc = p2p_di(pc, l1.ps);
double l1pepc = p2p_di(pc, l1.pe);
double l2pspc = p2p_di(pc, l2.ps);
double l2pepc = p2p_di(pc, l2.pe);
gPoint p1, p2, p11, p22;
double p1pc, p2pc;
Ptype p1Type, p2Type;
if (l1pspc > l1pepc)
{
p1 = l1.pe;
p11 = l1.ps;
p1pc = l1pepc;
p1Type = Ptype.pe;
}
else
{
p1 = l1.ps;
p11 = l1.pe;
p1pc = l1pspc;
p1Type = Ptype.ps;
}
if (l2pspc > l2pepc)
{
p2 = l2.pe;
p22 = l2.ps;
p2pc = l2pepc;
p2Type = Ptype.pe;
}
else
{
p2 = l2.ps;
p22 = l2.pe;
p2pc = l2pspc;
p2Type = Ptype.ps;
}
gldi = new gL_di(p1, p1Type, p2, p2Type, pc);
//交点与2条线端点距离判断 确认两条线是否接合 ---另一个参数 两条相接近平行且两条线接近需加以修复,延长非常长,超公差,但也需修复
if (p1pc > tolerance || p2pc > tolerance)
return gldi; //倒角线段长小于圆弧半径
if ((p1Type == Ptype.ps && l1pepc < Radius) || (p1Type == Ptype.pe && l1pspc < Radius))
return gldi;
if ((p2Type == Ptype.ps && l2pepc < Radius) || (p2Type == Ptype.pe && l2pspc < Radius))
return gldi; double center_dirdction = ;
bool islg180deg = true;
double pcAng = a_Angle(p11, pc, p22, false, ref center_dirdction, ref islg180deg);//交点圆心角
if (Math.Abs( - pcAng) < 0.01) //夹角接近180度 返回
return gldi; double pcSinVal = Radius / (Math.Sin(pcAng * 0.5 * Math.PI / )); //交点增量
double pcTanVal = Radius / (Math.Tan(pcAng * 0.5 * Math.PI / )); //交点Tan增量
gA ga = new gA();
ga.pc = p_val_ang(pc, pcSinVal, center_dirdction);
ga.ps = p_val_ang(pc, pcTanVal, center_dirdction - pcAng * 0.5);
ga.pe = p_val_ang(pc, pcTanVal, center_dirdction + pcAng * 0.5);
ga.width = ;
ga.symbols = "";
gldi.a = ga; gldi.State = ;
if (p1Type == Ptype.pe)
{
l1.pe = islg180deg ? ga.pe : ga.ps;
}
else
{
l1.ps = islg180deg ? ga.pe : ga.ps;
}
if (p2Type == Ptype.pe)
{
l2.pe = islg180deg ? ga.ps : ga.pe;
}
else
{
l2.ps = islg180deg ? ga.ps : ga.pe;
}
}
return gldi;
}

返回Mode类

    /// <summary>
/// Line 数据类型
/// </summary>
public struct gL_di
{
public gL_di(gPoint p1_, Ptype p1_Ptype_, gPoint p2_, Ptype p2_Ptype_, gPoint pc_ = new gPoint())
{
this.p1 = p1_;
this.p2 = p2_;
this.p1_Ptype = p1_Ptype_;
this.p2_Ptype = p2_Ptype_;
this.pc = pc_;
this.State = ;
this.a = new gA();
}
/// <summary>
/// 状态 0失败 1成功
/// </summary>
public int State { get; set; }
/// <summary>
/// P1端点
/// </summary>
public gPoint p1 { get; set; }
/// <summary>
/// P2端点
/// </summary>
public gPoint p2 { get; set; }
/// <summary>
/// 原线段P1端点类型
/// </summary>
public Ptype p1_Ptype { get; set; }
/// <summary>
/// 原线段P2端点类型
/// </summary>
public Ptype p2_Ptype { get; set; }
/// <summary>
/// 倒角后生成的数据
/// </summary>
public gA a { get; set; }
/// <summary>
/// PC端点(交点)
/// </summary>
public gPoint pc { get; set; }
public double p1p2_di { get { return p2p_di(this.p1, this.p2); } }
public double p1pc_di { get { return p2p_di(this.p1, this.pc); } }
public double p2pc_di { get { return p2p_di(this.p2, this.pc); } }
/// <summary>
/// 返回两点之间欧氏距离
/// </summary>
/// <param name="p1"></param>
/// <param name="p2"></param>
/// <returns></returns>
public static 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));
}
}

五.框选加内角孔实现效果

六.整板加内角孔实现效果

PCB Genesis 外形加内角孔实现方法的更多相关文章

  1. PCB genesis方槽加内角槽孔实现方法

    一.为什么方槽孔加内角孔 如下图,客户来的方槽或Slot槽有内角尺寸要求,通常直接钻一个Slot槽孔内角是不能满足客户要求的,这时我们做CAM的需采用小钻刀进行处理.加内角孔或内角槽的方式进行处理了. ...

  2. PCB Genesis拼SET画工艺边 实现方法(一)

    在PCB行业中,客户提供的PCB尺寸较小,为方便PCB加工,并生产提高生产效率,通常小于80X80mm需拼板处理的, 拼板要求可能来自按户指定拼板,也有可能是由工厂自行拼板,但对于CAM来说就需将PC ...

  3. PCB genesis连孔加除毛刺孔(圆孔与槽孔)实现方法(二)

    一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...

  4. PCB genesis连孔加除毛刺孔(槽孔与槽孔)实现方法(三)

    一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...

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

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

  6. PCB genesis短槽加引导孔实现方法

    一.何为短槽 短槽通常定义:槽长小于2倍槽宽      如:槽长1.8mm,槽宽1.0mm 二.为什么要加短槽加引孔呢 短槽孔在钻孔时孔易偏斜导致槽长偏短, 当槽长宽比越小,则受力越不均匀,在钻第2个 ...

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

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

  8. PCB genesis孔符制作实现方法

    一.先看genesis原始孔符 孔符的作用:用于表示孔径的大小的一种代号, 当孔径检测时,可以按分孔图中的孔符对应的孔径尺寸对孔径检测. 在实际PCB行业通常不使用原始(图形)孔符,而使用字母孔符(如 ...

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

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

随机推荐

  1. enote笔记法的思考

    章节:enote笔记法的思考   why enote笔记法: key1)大脑喜欢颜色. 我们的大脑天生就喜欢颜色.对颜色很敏感,这是由我们人类过去的演化历程决定的. 你可以理解为,文字有了颜色,让这个 ...

  2. [ural1057][Amount of Degrees] (数位dp+进制模型)

    Discription Create a code to determine the amount of integers, lying in the set [X; Y] and being a s ...

  3. Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全

    MySql行转列 以id分组,把name字段的值打印在一行,逗号分隔(默认) select CustomerDrugCode,group_concat(AuditItemName) from noau ...

  4. Leetcode 79.单词搜索

    单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单 ...

  5. nyoj 19 擅长排列的小明(深搜,next_permutation)

    擅长排列的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...

  6. Butterfly

    Butterfly 时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld 题目描述 给定一个n*m的矩阵,矩阵 ...

  7. mariadb-10GTID复制及多源复制

    ---本文大纲 一.什么是GTID 二.应用场景 三.多线程复制说明 四.实现过程 五.多源复制原理 六.实现过程 ---------------------------------- 一.什么是GI ...

  8. [luoguP2038] 无线网络发射器选址(模拟)

    传送门 又是个模拟水题,考虑边界就好,连long long都不用开. ——代码 #include <cstdio> #include <iostream> int n, d, ...

  9. vue.js组件之间通讯的数据双向绑定----父亲把数据传递给儿子,儿子更改数据后,重新发送给父亲,父亲数据更改后,属性会重新发送个儿子,儿子刷新新数据

    vue组件是相互独立的,如果要交互通讯,这时候,就需要组件之间数据互通了 往常我们讲的都是数据传递,子传父,父传子,都没有说子和父,父与子之间的数据互通 父亲传递给儿子数据,儿子触发一个父亲方法,将最 ...

  10. 【eclipse】eclipse启动优化&打印GC信息&重要的堆结构连接

    eclipse启动优化,终于不那么卡了! 网上找了好多都是myEclipse的优化的,跟eclipse有点区别,找了很多方法还是不能让这个eclipse(Version: Kepler Release ...