Beispiel #1
0
        /// <summary>
        /// 1文字のCAMデータの生成
        /// </summary>
        /// <param name="camdataLList"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="reverse"></param>
        /// <param name="code">文字コード</param>
        /// <param name="height">0.1μm単位</param>
        /// <param name="lineWidth">0.1μm単位</param>
        /// <remarks>
        /// フォントデータは高さ100を基準に作っている。
        /// n(0.1μm)高さに出力するためには、n/100倍にすれば良いことになる。
        /// </remarks>
        public void GenerateCamData(LinkedList <CamOutBaseData> camdataLList, int x, int y, bool reverse, int code, int height, int lineWidth)
        {
            if (!Ready)
            {
                return;
            }
            if (code < 0x21 || code > 0x7e)
            {
                return;
            }
            double ymag      = (double)height / 100.0;
            double xmag      = (reverse ? -ymag : ymag);
            int    index     = code - 0x21;
            int    vectCount = fontData[index].Count;

            for (int i = 0; i < vectCount; i++)
            {
                Point pt0;
                Point pt1;
                fontData[index].LineData(i, out pt0, out pt1);
                int x0 = (int)(x + (double)pt0.X * xmag);
                int y0 = (int)(y + (double)pt0.Y * ymag);
                int x1 = (int)(x + (double)pt1.X * xmag);
                int y1 = (int)(y + (double)pt1.Y * ymag);
                pt0 = new Point(x0, y0);
                pt1 = new Point(x1, y1);
                CamOutBaseData camd = new CamOutBaseData(MbeLayer.LayerValue.NUL,
                                                         CamOutBaseData.CamType.VECTOR,
                                                         CamOutBaseData.Shape.Obround,
                                                         lineWidth, lineWidth, pt0, pt1);
                camdataLList.AddLast(camd);
            }
        }
Beispiel #2
0
        protected void OutDrillPos(StreamWriter streamWriter)
        {
            string tCode = "";
            int    x;
            int    y;
            string str;
            int    n = baseDataList.Count;

            for (int i = 0; i < n; i++)
            {
                CamOutBaseData camd = baseDataList[i];
                if (camd.layer != MbeLayer.LayerValue.DRL)
                {
                    continue;
                }
                if (tCode != camd.code)
                {
                    tCode = camd.code;
                    streamWriter.WriteLine(tCode);
                }
                x   = convertToGerverUnitValue(camd.pt0.X + CAMOUT_XOFFSET);
                y   = convertToGerverUnitValue(camd.pt0.Y + CAMOUT_YOFFSET);
                str = string.Format("X{0}Y{1}", x, y);
                streamWriter.WriteLine(str);
            }
        }
Beispiel #3
0
        /// <summary>
        /// CAMデータの生成
        /// </summary>
        /// <param name="camOut"></param>
        public override void GenerateCamData(CamOut camOut)
        {
            int            drillSize = Diameter;
            int            stSize    = Diameter + DEFAULT_SRMARGIN * 2;
            Point          pt0       = GetPos(0);
            Point          pt1       = GetPos(0);
            CamOutBaseData camd;

            camd = new CamOutBaseData(MbeLayer.LayerValue.DRL,
                                      CamOutBaseData.CamType.DRILL,
                                      CamOutBaseData.Shape.Drill,
                                      drillSize, drillSize, pt0, pt1);
            camOut.Add(camd);

            camd = new CamOutBaseData(MbeLayer.LayerValue.STC,
                                      CamOutBaseData.CamType.FLASH,
                                      CamOutBaseData.Shape.Obround,
                                      stSize, stSize, pt0, pt1);
            camOut.Add(camd);
            camd = new CamOutBaseData(MbeLayer.LayerValue.STS,
                                      CamOutBaseData.CamType.FLASH,
                                      CamOutBaseData.Shape.Obround,
                                      stSize, stSize, pt0, pt1);
            camOut.Add(camd);
        }
Beispiel #4
0
        /// <summary>
        /// CAMデータの生成
        /// </summary>
        /// <param name="camOut"></param>
        public override void GenerateCamData(CamOut camOut)
        {
            Point pt0 = GetPos(0);
            Point pt1 = GetPos(1);
            Point ptVia;
            bool  bendMode = getPointVia(out ptVia);

            CamOutBaseData camd;

            if (!bendMode)
            {
                camd = new CamOutBaseData(layer,
                                          CamOutBaseData.CamType.VECTOR,
                                          CamOutBaseData.Shape.Obround,
                                          lineWidth, lineWidth, pt0, pt1);
                camOut.Add(camd);
            }
            else
            {
                camd = new CamOutBaseData(layer,
                                          CamOutBaseData.CamType.VECTOR,
                                          CamOutBaseData.Shape.Obround,
                                          lineWidth, lineWidth, pt0, ptVia);
                camOut.Add(camd);
                camd = new CamOutBaseData(layer,
                                          CamOutBaseData.CamType.VECTOR,
                                          CamOutBaseData.Shape.Obround,
                                          lineWidth, lineWidth, ptVia, pt1);
                camOut.Add(camd);
            }
        }
Beispiel #5
0
        /// <summary>
        /// CAMデータの生成
        /// </summary>
        /// <param name="camOut"></param>
        public override void GenerateCamData(CamOut camOut)
        {
            int   width        = PadSize.Width;
            int   height       = PadSize.Height;
            int   stWidth      = PadSize.Width + SrMargin * 2;
            int   stHeight     = PadSize.Height + SrMargin * 2;
            int   drillSize    = Diameter;
            Point pt0          = GetPos(0);
            Point pt1          = GetPos(0);
            int   innerLandDia = InnerLandDia;


            CamOutBaseData camd;

            CamOutBaseData.Shape _shape = (shape == PadShape.Rect ? CamOutBaseData.Shape.Rect : CamOutBaseData.Shape.Obround);

            camd = new CamOutBaseData(MbeLayer.LayerValue.DRL, CamOutBaseData.CamType.DRILL,
                                      CamOutBaseData.Shape.DrillPTH, drillSize, drillSize, pt0, pt1);
            camOut.Add(camd);

            camd = new CamOutBaseData(MbeLayer.LayerValue.CMP, CamOutBaseData.CamType.FLASH,
                                      _shape, width, height, pt0, pt1);
            camOut.Add(camd);

            if ((innerLayerConnectionInfo & (ulong)MbeLayer.LayerValue.L2) != 0)
            {
                camd = new CamOutBaseData(MbeLayer.LayerValue.L2, CamOutBaseData.CamType.FLASH,
                                          _shape, innerLandDia, innerLandDia, pt0, pt1);
                camOut.Add(camd);
            }

            if ((innerLayerConnectionInfo & (ulong)MbeLayer.LayerValue.L3) != 0)
            {
                camd = new CamOutBaseData(MbeLayer.LayerValue.L3, CamOutBaseData.CamType.FLASH,
                                          _shape, innerLandDia, innerLandDia, pt0, pt1);
                camOut.Add(camd);
            }

            camd = new CamOutBaseData(MbeLayer.LayerValue.SOL, CamOutBaseData.CamType.FLASH,
                                      _shape, width, height, pt0, pt1);
            camOut.Add(camd);

            if (!no_ResistMask)
            {
                camd = new CamOutBaseData(MbeLayer.LayerValue.STC, CamOutBaseData.CamType.FLASH,
                                          _shape, stWidth, stHeight, pt0, pt1);
                camOut.Add(camd);

                camd = new CamOutBaseData(MbeLayer.LayerValue.STS, CamOutBaseData.CamType.FLASH,
                                          _shape, stWidth, stHeight, pt0, pt1);
                camOut.Add(camd);
            }
        }
        /// <summary>
        /// CAMデータの生成
        /// </summary>
        /// <param name="camOut"></param>
        public override void GenerateCamData(CamOut camOut)
        {
            CamOutBaseData camd;

            foreach (MbeGapChkObjLine obj in fillLineList)
            {
                Point pt0 = obj.p0;
                Point pt1 = obj.p1;
                camd = new CamOutBaseData(layer,
                                          CamOutBaseData.CamType.VECTOR,
                                          CamOutBaseData.Shape.Obround,
                                          traceWidth, traceWidth, pt0, pt1);
                camOut.Add(camd);
            }
        }
Beispiel #7
0
 /// <summary>
 /// CAMデータをソートする。
 /// Shape→幅(ドリルの場合は直径)→高さの優先順位
 /// </summary>
 /// <param name="camd0"></param>
 /// <param name="camd1"></param>
 /// <returns></returns>
 private static int CompareBaseDataByAperture(CamOutBaseData camd0, CamOutBaseData camd1)
 {
     if (camd0.shape != camd1.shape)
     {
         return((int)camd0.shape - (int)camd1.shape);
     }
     if (camd0.width != camd1.width)
     {
         return(camd0.width - camd1.width);
     }
     if (camd0.height != camd1.height)
     {
         return(camd0.height - camd1.height);
     }
     return(0);
 }
Beispiel #8
0
        protected void OutAdCode(StreamWriter streamWriter, MbeLayer.LayerValue layer)
        {
            string dCode = "";
            double width;
            double height;
            string str;
            int    n = baseDataList.Count;

            for (int i = 0; i < n; i++)
            {
                CamOutBaseData camd = baseDataList[i];
                if (camd.layer != layer)
                {
                    continue;
                }
                if (dCode != camd.code)
                {
                    dCode = camd.code;

                    if (camd.shape == CamOutBaseData.Shape.Obround)
                    {
                        if (camd.width == camd.height)
                        {
                            width = (double)camd.width / 254000;
                            str   = string.Format("%AD{0}C,{1:0.0000}*%", dCode, width);
                        }
                        else
                        {
                            width  = (double)camd.width / 254000;
                            height = (double)camd.height / 254000;
                            str    = string.Format("%AD{0}O,{1:0.0000}X{2:0.0000}*%", dCode, width, height);
                        }
                    }
                    else if (camd.shape == CamOutBaseData.Shape.Rect)
                    {
                        width  = (double)camd.width / 254000;
                        height = (double)camd.height / 254000;
                        str    = string.Format("%AD{0}R,{1:0.0000}X{2:0.0000}*%", dCode, width, height);
                    }
                    else
                    {
                        continue;
                    }
                    streamWriter.WriteLine(str);
                }
            }
        }
        /// <summary>
        /// CAMデータの生成
        /// </summary>
        /// <param name="camOut"></param>
        public override void GenerateCamData(CamOut camOut)
        {
            int width  = PadSize.Width;
            int height = PadSize.Height;


            Point          pt0 = GetPos(0);
            Point          pt1 = GetPos(0);
            CamOutBaseData camd;

            CamOutBaseData.Shape _shape = (shape == PadShape.Rect ? CamOutBaseData.Shape.Rect : CamOutBaseData.Shape.Obround);


            camd = new CamOutBaseData(layer, CamOutBaseData.CamType.FLASH,
                                      _shape, width, height, pt0, pt1);
            camOut.Add(camd);


            if (layer == MbeLayer.LayerValue.CMP || layer == MbeLayer.LayerValue.SOL)
            {
                if (!no_ResistMask)     //Version 0.50
                {
                    int stWidth  = PadSize.Width + SrMargin * 2;
                    int stHeight = PadSize.Height + SrMargin * 2;
                    MbeLayer.LayerValue stLayer = (layer == MbeLayer.LayerValue.CMP ? MbeLayer.LayerValue.STC : MbeLayer.LayerValue.STS);
                    camd = new CamOutBaseData(stLayer, CamOutBaseData.CamType.FLASH,
                                              _shape, stWidth, stHeight, pt0, pt1);
                    camOut.Add(camd);
                }

                if (!no_MM)
                {
                    int stWidth  = PadSize.Width - MmReduce * 2;
                    int stHeight = PadSize.Height - MmReduce * 2;
                    MbeLayer.LayerValue stLayer = (layer == MbeLayer.LayerValue.CMP ? MbeLayer.LayerValue.MMC : MbeLayer.LayerValue.MMS);
                    camd = new CamOutBaseData(stLayer, CamOutBaseData.CamType.FLASH,
                                              _shape, stWidth, stHeight, pt0, pt1);
                    camOut.Add(camd);
                }
            }
        }
Beispiel #10
0
        protected void OutDefineDrill(StreamWriter streamWriter)
        {
            string tCode = "";
            double dia;
            string str;
            int    n = baseDataList.Count;

            for (int i = 0; i < n; i++)
            {
                CamOutBaseData camd = baseDataList[i];
                if (camd.layer != MbeLayer.LayerValue.DRL)
                {
                    continue;
                }
                if (tCode != camd.code)
                {
                    tCode = camd.code;
                    dia   = (double)camd.width / 254000;
                    str   = string.Format("{0}C{1:0.0000}", tCode, dia);
                    streamWriter.WriteLine(str);
                }
            }
            streamWriter.WriteLine("%");
        }
Beispiel #11
0
 public void Add(CamOutBaseData baseData)
 {
     baseDataList.Add(baseData);
 }
Beispiel #12
0
        protected CamOutResult ExcellonDrillListOut(string path)
        {
            CamOutResult result = new CamOutResult();

            result.code = CamOutResult.ResultCode.NOERROR;
            string       outpath      = Path.ChangeExtension(path, "DRI");
            StreamWriter streamWriter = null;

            try {
                streamWriter = new StreamWriter(outpath);
                streamWriter.WriteLine("Code    Size(inch)            Number");


                //string tCode = "";
                //double dia;
                //string str;
                //string platedInfo;

                int            dataCount = baseDataList.Count;
                int            index     = 0;
                CamOutBaseData camd      = baseDataList[index];
                while (index < dataCount)
                {
                    if (camd.shape == CamOutBaseData.Shape.Drill || camd.shape == CamOutBaseData.Shape.DrillPTH)
                    {
                        CamOutBaseData.Shape shape = camd.shape;
                        int width      = camd.width;
                        int drillCount = 0;
                        while (true)
                        {
                            index++;
                            drillCount++;

                            if (index >= dataCount || baseDataList[index].shape != shape || baseDataList[index].width != width)
                            {
                                string tCode      = camd.code;
                                double dia        = (double)camd.width / 254000;
                                string platedInfo = (camd.shape == CamOutBaseData.Shape.Drill ? "NPTH" : "PTH ");
                                string str        = string.Format("{0}       {1:0.0000}     {2}     {3}", tCode, dia, platedInfo, drillCount);
                                streamWriter.WriteLine(str);
                                camd = baseDataList[index];
                                break;
                            }
                        }
                    }
                    else
                    {
                        index++;
                    }
                }

                //string tCode = "";
                //double dia;
                //string str;
                //string platedInfo;
                //int n = baseDataList.Count;
                //for (int i = 0; i < n; i++) {
                //    CamOutBaseData camd = baseDataList[i];
                //    if (camd.layer != MbeLayer.LayerValue.DRL) continue;
                //    if (tCode != camd.code) {
                //        tCode = camd.code;
                //        dia = (double)camd.width / 254000;
                //        if(camd.shape == CamOutBaseData.Shape.Drill){
                //            platedInfo = "NPTH";
                //        }else{
                //            platedInfo = "PTH";
                //        }
                //        str = string.Format("{0}       {1:0.0000}     {2}", tCode, dia,platedInfo);
                //        streamWriter.WriteLine(str);
                //    }
                //}
            }
            catch (Exception) {
                result.code     = CamOutResult.ResultCode.FILEERROR;
                result.filename = Path.GetFileName(outpath);
                return(result);
            }
            finally {
                if (streamWriter != null)
                {
                    streamWriter.Close();
                }
            }
            return(result);
        }
Beispiel #13
0
        protected void OutPlotData(StreamWriter streamWriter, MbeLayer.LayerValue layer)
        {
            string dCode = "";
            int    x1;
            int    y1;
            int    x2;
            int    y2;
            string str;
            int    n = baseDataList.Count;

            for (int i = 0; i < n; i++)
            {
                CamOutBaseData camd = baseDataList[i];
                if (camd.layer != layer)
                {
                    continue;
                }
                if (dCode != camd.code)
                {
                    dCode = camd.code;
                    streamWriter.WriteLine(dCode + "*");
                }
                if (camd.ctype == CamOutBaseData.CamType.VECTOR)
                {
                    if (camd.pt0.X != camd.pt1.X || camd.pt0.Y != camd.pt1.Y)   //0.48.02(2009/04/24) もとの座標でゼロ長のベクトルは出力しないように変更
                    {
                        x1 = convertToGerverUnitValue(camd.pt0.X + CAMOUT_XOFFSET);
                        y1 = convertToGerverUnitValue(camd.pt0.Y + CAMOUT_YOFFSET);
                        x2 = convertToGerverUnitValue(camd.pt1.X + CAMOUT_XOFFSET);
                        y2 = convertToGerverUnitValue(camd.pt1.Y + CAMOUT_YOFFSET);

                        //0.46.01(2008/12/31) ** この修正は 0.48.02 で変更した **
                        //ガーバーデータの座標に変換したあとに座標が一致した場合は、
                        //最小長線分(0.1μm)をパッドの代わりに使用している可能性もあるので、
                        //ガーバーデータ上でも最小長線分(2.54μm)とする。
                        //実際にはx2に1を足して、水平線分としている。

                        //0.48.02(2009/04/24)
                        //ガーバーデータの座標に変換したあとに座標が一致した場合は、
                        //フラッシュデータとして出力する
                        if (x1 == x2 && y1 == y2)
                        {
                            str = string.Format("X{0:000000}Y{1:000000}D03*", x1, y1);
                            streamWriter.WriteLine(str);
                        }
                        else
                        {
                            str = string.Format("X{0:000000}Y{1:000000}D02*", x1, y1);
                            streamWriter.WriteLine(str);
                            str = string.Format("X{0:000000}Y{1:000000}D01*", x2, y2);
                            streamWriter.WriteLine(str);
                        }
                        //if (x1 != x2 || y1 != y2) { //ガーバーデータの座標に変換したあとでも始点終点が異なる場合のみ出力する。0.46.00(2008/12/28)
                        //    str = string.Format("X{0:000000}Y{1:000000}D02*", x1, y1);
                        //    streamWriter.WriteLine(str);
                        //    str = string.Format("X{0:000000}Y{1:000000}D01*", x2, y2);
                        //    streamWriter.WriteLine(str);
                        //}
                    }
                    else
                    {
                        System.Diagnostics.Debug.WriteLine("Gerber out: zero length vector");
                    }
                }
                else
                {
                    x1  = convertToGerverUnitValue(camd.pt0.X + CAMOUT_XOFFSET);
                    y1  = convertToGerverUnitValue(camd.pt0.Y + CAMOUT_YOFFSET);
                    str = string.Format("X{0:000000}Y{1:000000}D03*", x1, y1);
                    streamWriter.WriteLine(str);
                }
            }
        }
Beispiel #14
0
        /// <summary>
        /// Tコード、Dコード文字列の設定
        /// </summary>
        protected CamOutResult SetCodeString()
        {
            CamOutResult result = new CamOutResult();

            result.code = CamOutResult.ResultCode.NOERROR;
            int n = baseDataList.Count;

            if (n < 1)
            {
                return(result);
            }
            baseDataList.Sort(CompareBaseDataByAperture);
            int tSuffix = 1;
            int dSuffix = 10;


            CamOutBaseData.Shape shape = CamOutBaseData.Shape.Err;
            int width  = 0;
            int height = 0;



            //CamOutBaseData camd = baseDataList[0];
            //string strCode;
            //if (shape == CamOutBaseData.Shape.Drill || shape == CamOutBaseData.Shape.DrillPTH) {
            //    strCode = string.Format("T{0:00}", tSuffix);
            //    tSuffix++;
            //} else {
            //    strCode = string.Format("D{0}", dSuffix);
            //    dSuffix++;
            //}
            //camd.code = strCode;


            string strCode = "";

            for (int i = 0; i < n; i++)
            {
                CamOutBaseData camd = baseDataList[i];

                if (shape != camd.shape || width != camd.width || height != camd.height)
                {
                    shape  = camd.shape;
                    width  = camd.width;
                    height = camd.height;
                    if (shape == CamOutBaseData.Shape.Drill || shape == CamOutBaseData.Shape.DrillPTH)
                    {
                        if (tSuffix >= 100)
                        {
                            result.code = CamOutResult.ResultCode.TCODEOVER;
                            return(result);
                        }
                        strCode = string.Format("T{0:00}", tSuffix);
                        tSuffix++;
                    }
                    else
                    {
                        if (dSuffix >= 1000)
                        {
                            result.code = CamOutResult.ResultCode.DCODEOVER;
                            return(result);
                        }
                        strCode = string.Format("D{0}", dSuffix);
                        dSuffix++;
                    }
                }
                camd.code = strCode;
            }
            return(result);
        }
Beispiel #15
0
        /// <summary>
        /// CAMデータの生成
        /// </summary>
        /// <param name="camOut"></param>
        public override void GenerateCamData(CamOut camOut)
        {
            int _endAngle;

            if (LimitStartEnd())
            {
                _endAngle = startAngle + 3600;
            }
            else
            {
                _endAngle = endAngle;
                if (_endAngle == startAngle)
                {
                    _endAngle = startAngle + 3600;
                }
                else if (_endAngle < startAngle)
                {
                    _endAngle += 3600;
                }
            }



            int angle = startAngle;

            bool   endFlag = false;
            int    x;
            int    y;
            double angleRad;

            angleRad = (double)angle / 1800.0 * Math.PI;
            x        = (int)Math.Round(radius * Math.Cos(angleRad)) + posArray[0].X;
            y        = (int)Math.Round(radius * Math.Sin(angleRad)) + posArray[0].Y;
            Point pt0 = new Point(x, y);
            Point pt1;

            double division = radius * Math.PI * 2 / CAMOUT_MAXLINELENGTH;

            if (division < CAMOUT_DIVISION)
            {
                division = CAMOUT_DIVISION;
            }

            while (!endFlag)
            {
                angle += (int)Math.Round(3600 / division);
                if (angle >= _endAngle)
                {
                    endFlag = true;
                    angle   = _endAngle;
                }
                angleRad = (double)angle / 1800.0 * Math.PI;
                x        = (int)Math.Round(radius * Math.Cos(angleRad)) + posArray[0].X;
                y        = (int)Math.Round(radius * Math.Sin(angleRad)) + posArray[0].Y;
                pt1      = new Point(x, y);

                if (!pt0.Equals(pt1))                  //ゼロ長データは出力しない
                {
                    CamOutBaseData camd = new CamOutBaseData(layer,
                                                             CamOutBaseData.CamType.VECTOR,
                                                             CamOutBaseData.Shape.Obround,
                                                             lineWidth, lineWidth, pt0, pt1);
                    camOut.Add(camd);
                    pt0 = pt1;
                }
            }
        }