PCB Genesis 外形加内角孔实现方法

在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 = 0;
            gPoint pc = l2l_Intersect(l1, l2, ref isIntersectType);
            if (isIntersectType == 0) //平行无交点  平行线方位角相同  接近平行线 相差接近
            {
                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 = 0;
                bool islg180deg = true;
                double pcAng = a_Angle(p11, pc, p22, false, ref center_dirdction, ref islg180deg);//交点圆心角
                if (Math.Abs(180 - pcAng) < 0.01) //夹角接近180度 返回
                    return gldi;

                double pcSinVal = Radius / (Math.Sin(pcAng * 0.5 * Math.PI / 180)); //交点增量
                double pcTanVal = Radius / (Math.Tan(pcAng * 0.5 * Math.PI / 180)); //交点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 = 500;
                ga.symbols = "";
                gldi.a = ga;

                gldi.State = 1;
                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 = 0;
            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));
        }
    }

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

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

原文地址:https://www.cnblogs.com/pcbren/p/9665304.html

时间: 2024-08-30 00:28:11

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

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

一.为什么方槽孔加内角孔 如下图,客户来的方槽或Slot槽有内角尺寸要求,通常直接钻一个Slot槽孔内角是不能满足客户要求的,这时我们做CAM的需采用小钻刀进行处理.加内角孔或内角槽的方式进行处理了. 二.为什么不建议直接在4个角加内角孔 Slot槽4个角采用加内角孔的方式处理,这样会导致如下图效果,凸起. 三.方槽加内角槽孔方式(里面加4条槽) 1.常规槽宽则计算方式: 内角槽孔宽度:(W-0.1mm)/2 如:2.0X5.0mm槽宽,内角要求最大r0.5mm  那么内角槽宽为(2-0.1)/

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

一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔,并钻进去一点(常规进去1-2mil),这样就可以将纤维毛刺去除 (没找到SLOT槽与SLOT槽的实物图.就用SLOT槽与圆孔吧,产生毛刺效果也是一样的) PCB同行业毛刺问题处理办法 钻孔孔内毛刺问题分析改善报告 二.如何判断除毛刺孔加多少个? 在PCB行业工程加除毛刺孔加多少个也没有太明确的定义,

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

一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个性化需求,比如:孔密度,孔间距,孔形状分布,如果有一些个性化需求时必须得自己可以编辑孔点字体才可以满足要求,可以奥宝没有提供这样的工具给我们,在这里就介绍用genesis自制Font字体实现方法 二.Font字体坐标文件制作说明 Font字符坐标文件放在genesis安装目录:C:\genesis\

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

一.何为短槽 短槽通常定义:槽长小于2倍槽宽      如:槽长1.8mm,槽宽1.0mm 二.为什么要加短槽加引孔呢 短槽孔在钻孔时孔易偏斜导致槽长偏短, 当槽长宽比越小,则受力越不均匀,在钻第2个孔时,钻头两边受力不均匀再加上是顺时针旋转,会导至第2个孔往逆时针方向偏转且变短(如下图) 短槽偏位问题如何解决呢,在我们PCB行业最佳作法是在钻槽孔之前,先在槽孔两端2个小孔(如下图). 在PCB行业已有很多短槽加工方法 具体方法请链接:PCB钻孔--超短坑槽的加工方法 机械钻孔中的短槽孔加工技术

PCB genesis加尾孔实现方法

一.为什么增加尾孔呢 看一看下图在panel中增加尾孔的效果;如下图所示,主要有2点原因. 1.孔径大小测量 假设如果不增加尾孔,要检测孔径大小是否符合要求,那么QA检测会选择最后钻的孔进大小进行测量, 但钻孔路径优化后,是不知道哪个孔是最后一个孔钻孔,为了让钻孔QA清楚的知道哪个孔是尾孔,CAM制作时会将每把刀最一个孔放到统一的一个区域内排列. 2.防止漏钻刀 如果最后一把刀尾孔漏钻了,那么QA一眼就看出来漏钻刀了 说一下钻孔工序QA检测孔径要求是:用针规全部测量其尾孔,并随机测量一些板内的孔

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

越来发现Genesis采用Surface多边形数据结构的重要性了,当撑握了多边形缩放,交集, 差集,并集等算法, 想实现PCB拼板简直轻而易举了;当然还可以制作出更多的PCB实用的工具来,下面将圆形板拼板实现效果展示出来. 可参考下面另外2篇 拼板与加邮票孔方法 PCB Genesis拼SET画工艺边 实现方法(一) PCB Genesis加邮票孔(弧与弧)实现算法  拼圆板实现效果 1.邮票连接位参数设置 2.圆形拼板参数设置 皮面积对比 原文地址:https://www.cnblogs.co

减少页面加载时间的方法

减少页面加载时间的方法? 加载时间:指感知的时间或者实际的加载速度. 方法: A.减少http请求(合并图片.合并文件) B.优化图片文件,减小其尺寸,特别是缩略图. [一定要按尺寸生成缩略图然后调用,不要在网页中用resize方法实现,虽然这样看到的图片外形小了,但是其加载的数据量一点也没减少.曾经见过有人在网页中加载的缩略图,其真实尺寸有10M之巨-普通图像.icon也要尽可能压缩后,可以采用web图像保存.减少颜色数等等方法实现.] C.图像格式的选择(GIF:提供的颜色较少,可用在一些对

优化加载jQuery的方法

请看下面的一段代码: 1 <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 2 <script type="text/javascript"> 3 window.jQuery || document.write("<script src='__ADMIN_JS__/jquery-2.0.3.

减短页面加载时间的方法

1>css的定义放在文件头部 2>js脚本放在文件末尾 3>压缩js,css代码 4>服务器开启giip压缩 5>尽量减少页面中重复出现的http请求数量 减短页面加载时间的方法,布布扣,bubuko.com