PCB genesis孔符制作實現方法


 一.先看genesis原始孔符

     孔符的作用:用於表示孔徑的大小的一種代號, 當孔徑檢測時,可以按分孔圖中的孔符對應的孔徑尺寸對孔徑檢測.

     在實際PCB行業通常不使用原始(圖形)孔符,而使用字母孔符(如A,B,C ),主要原因是:圖形孔符在人員讀取,錄入,轉換不便

二.孔符坐標文件制作說明

     孔符坐標文件放在genesis安裝目錄:c:\genesis\e99\all\markers下,我們先查看一下孔符文件,如下圖所示, 直接是明文坐標。由於奧寶也沒有提供孔符編輯工具,我們想直接修改孔符坐標不現實,這里我們可以借助genesis圖界面,將孔符坐標讀入genesis,然對孔符進行編輯,接着再將編輯好的孔符輸出來即可. 

    孔符制作3步曲.

  1.孔符讀入==>2.編輯孔符==>3.孔符輸出

三.編輯孔符說明

    1.孔符中心是坐標零點為中心,對准鑽孔中心,而不是以孔符元素中心對准鑽孔中心

     2.孔符寬度與高度比值盡量控制一致, 不然生成孔符圖會造成拉伸變形效果

 四.C#代碼實現

   孔符讀入

     //###孔符讀入genesis 
            //1.新建一個全新的job與step
            //2.讀取孔符markers目錄文件,每一種孔符會標對應genesis一個層(如:t00,t01,t02)
            //3.接着借助genesis對孔符進行編輯操作了
            string HoleSmbolsInputDirPath = @"C:\Users\Administrator\Desktop\markers\markers\";//孔符讀取markers目錄
            var HoleSmbolsFilePath = Directory.GetFiles(HoleSmbolsInputDirPath);
            foreach (var item in HoleSmbolsFilePath)
            {
                var HoleSymbolsLayerName = Path.GetFileNameWithoutExtension(item).ToLower();
                g.COM($"create_layer,layer={HoleSymbolsLayerName}");
                g.COM($"affected_layer,name={HoleSymbolsLayerName},mode=single,affected=yes");
                foreach (var itemLine in File.ReadAllLines(item))
                {
                    var arrList = itemLine.Trim().Split(' ').Where(tt => !string.IsNullOrEmpty(tt)).ToList();
                    if (arrList.Count() >= 4)
                    {
                        g.COM($"add_line,xs={arrList[0]},ys={arrList[1]},xe={arrList[2]},ye={arrList[3]},symbol=r100");
                    }
                }
                g.COM($"affected_layer,name={HoleSymbolsLayerName},mode=single,affected=no");
            }
View Code

   孔符輸出

            //###孔符輸出
            //1.准備編輯好的孔符job
            //2.依次遍歷genesis所有層,每一層(如t01,t02)輸出為單一的孔符坐標文件
            //輸出需注意兩點
            //一.輸出孔符的genesis單位要讀入孔符單位要一致(我這邊用mm習慣了,這邊公制單位)
            //二.輸出的坐標要轉為整數,孔符坐標中含有小數genesis識別不了)
            var HoleSmbolsOutputDirPath = @"C:\Users\Administrator\Desktop\markers\";//孔符輸出markers目錄
            LayerNameList = g.getLayerNameList(g.STEP, g.JOB);
            foreach (var LayerName in LayerNameList)
            {
                StringBuilder StrLine = new StringBuilder();
                foreach (var line in g.getFEATURES(LayerName).Llist)
                {
                    StrLine.AppendLine($"{ Math.Round(line.ps.x, 0)} {Math.Round(line.ps.y, 0)} {Math.Round(line.pe.x, 0)} {Math.Round(line.pe.y, 0)} 0");
                }
                File.WriteAllText($"{HoleSmbolsOutputDirPath}{LayerName}", StrLine.ToString());
            }
View Code

 五.實現效果

     孔符讀入

      孔符輸出

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM