一.先看genesis原有Font字体

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

二.Font字体坐标文件制作说明

Font字符坐标文件放在genesis安装目录:C:\genesis\fw\lib\fonts\下,有2个文件canned_57与canned_67,和孔符坐标一样也是明文坐标,这里我们又可以借助genesis图形界面,将Font字体坐标读入genesis,然对字体坐标进行编辑,接着再将编辑好的Font字体坐标输出来即可.

Font字符制作3步曲.

1.字体坐标读入==>2.编辑字体坐标==>3.字体坐标输出

三.Font字体编辑孔符规则说明

1.由于借助Genesis图形界面编辑Font字体,所以每一层分别带表对应的Char字符,而在Genesis层名不能使用特殊符号作为层名,这里采用ID号作对应关系作为层名,对应关系如下表.当我们编辑字体坐标时,可以通过Char字符找到对应的ID号层名。

2.Genesis第1层的层名是rect ,带表字符Char框架范围,当编辑字体时,孔的中心坐标不能超出rect范围,如超出了可能会造成字体碰撞在一起,这里编辑字体时需注意了。

3. 编辑字体比例规则:【字体宽度】字体宽度与框架宽度 有一个黄金比例关系,字体最大坐标宽度X比框架范围X比值为0.72,所以我们在编辑字体时要尽量尊守,并往这个比例靠笼,【字体高度】无特别要求,尽量保持字体高度与框架高度接近就好了

4. rect框架零点以左下角为零点位置,编辑字体时这个位置不能需随意整体移动的

四.Font字体坐标转换关系说明

这里讲一讲,Font字体坐标文件,Genesis UI界面参数,绘制字体坐标图形  三者坐标转换的计算公式

转换实例:

具体坐标转换关系转换计算器 http://pcbren.cn/CannedText/

五.C#代码实现

另一篇文章有介绍不用Genesis孔点坐标加点阵字的方法,有兴趣可以看一下  PCB Genesis增加点阵字 实现原理

canned_57   fonts 字体读入genesis

            //###canned_57 fonts 字体读入genesis //1.新建一个全新的job与step//2.读取canned_57 fonts 目录文件//   每一种字体对应genesis一个层       //   rect层:定义字体范围,字宽与字高范围定义//   层名ID序号:例如:用1,2,3作为层名,对应字符Char ID号(由于genesis层名不能以符号显示)//3.接着借助genesis对字体进行编辑操作了string HoleFontsInputDirPath = @"C:\genesis\fw\lib\fonts\canned_57";//孔符读取markers目录gL RectSizeL = new gL();//rect层  做为字体坐标范围gP OffsetP = new gP(); //rect层  先取X值作为偏移(目前发现没作用)List<List<gL>> lineAllList = new List<List<gL>>();List<gL> lineList = new List<gL>();var txtList = File.ReadAllLines(HoleFontsInputDirPath);for (int i = 0; i < txtList.Count(); i++){string LayerName = txtList[i];var arrList = txtList[i].Trim().Replace("  ", " ").Split(' ');string StartsWith = arrList[0];switch (StartsWith){case "CHAR":lineList = new List<gL>();break;case "LINE":gPoint ps = new gPoint(double.Parse(arrList[1]), double.Parse(arrList[2]));gPoint pe = new gPoint(double.Parse(arrList[3]), double.Parse(arrList[4]));double width = double.Parse(arrList[7]) * 1000;gL tempL = new gL(ps, pe, width);tempL.negative = arrList[7] == "N";lineList.Add(tempL);break;case "ECHAR":lineAllList.Add(lineList);break;case "XSIZE":RectSizeL.pe.x = double.Parse(arrList[1]);break;case "YSIZE":RectSizeL.pe.y = double.Parse(arrList[1]);RectSizeL.width = 1;break;case "OFFSET":OffsetP.p.x = double.Parse(arrList[1]);OffsetP.width = 2;break;}}g.COM($"create_layer,layer=rect");g.COM($"affected_layer,name=rect,mode=single,affected=yes");addCOM.line_rect(RectSizeL);addCOM.pad(OffsetP);g.COM($"affected_layer,name=rect,mode=single,affected=no");for (int i = 0; i < lineAllList.Count(); i++){g.COM($"create_layer,layer={i }");g.COM($"affected_layer,name={i },mode=single,affected=yes");for (int j = 0; j < lineAllList[i].Count(); j++){addCOM.line(lineAllList[i]);}g.COM($"affected_layer,name={i},mode=single,affected=no");}var pcbren = "pcbren";

View Code

canned_57   fonts 字体输出

            ////###canned_ fonts字体输出////1.准备编辑好的字体job////2.依次遍历genesis所有层,每一层(ID对应一个Char字符) 并将所有层字体坐标合并为一个文件输出////输出需注意两点////一.输出孔符的genesis单位要读入孔符单位要一致(TGZ默认数据全部用inch存储,保持读取与输出统一inch)////二.输出层顺序与层ID号不能修改,不然会导致异常////此读取此为canned_57字符排序,输出也按此顺序输出string CharList = @"!""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~";var HoleFontsOutputDirPath = @"C:\Users\Administrator\Desktop\markers\";//孔符输出markers目录LayerNameList = g.getLayerNameList(g.STEP, g.JOB);StringBuilder StrLineAll = new StringBuilder();var layer = g.getFEATURES("rect", g.STEP, g.JOB, "inch", true);var xList = layer.Llist.Select(tt => tt.ps.x).Union(layer.Llist.Select(tt => tt.pe.x));var yList = layer.Llist.Select(tt => tt.ps.y).Union(layer.Llist.Select(tt => tt.pe.y));StrLineAll.AppendLine($"XSIZE { (xList.Max() - xList.Min()).ToString("0.000000")}");StrLineAll.AppendLine($"YSIZE { (yList.Max() - yList.Min()).ToString("0.000000")}");StrLineAll.AppendLine($"OFFSET {  (layer.Plist[0].p.x).ToString("0.000000") }");StrLineAll.AppendLine("");StrLineAll.AppendLine("");for (int i = 0; i < CharList.Count(); i++){StrLineAll.AppendLine($"CHAR {CharList[i]}");foreach (var line in g.getFEATURES(i.ToString(), g.STEP, g.JOB, "inch", true).Llist){string polarity = line.negative ? "N" : "P";string symbolsStart = line.symbols.StartsWith("r") ? "R" : "S";StrLineAll.AppendLine($"LINE {line.ps.x.ToString("0.000000")} {line.ps.y.ToString("0.000000")} {line.pe.x.ToString("0.000000")} {line.pe.y.ToString("0.000000")} {polarity} {symbolsStart} {(line.width * 0.001).ToString("0.000000")}");}StrLineAll.AppendLine("ECHAR");StrLineAll.AppendLine("");}File.WriteAllText($"{HoleFontsOutputDirPath}{"canned_pcbren"}", StrLineAll.ToString());var pcbren1 = "pcbren";

View Code

六.实现效果

Font坐标读入

Font坐标输出

转载于:https://www.cnblogs.com/pcbren/p/9906573.html

PCB genesis自制孔点 Font字体实现方法相关推荐

  1. CSS文字文本样式(font字体、css外观属性)

    1. font字体 1.1. font-size:大小 作用:font-size属性用于设置字号. p { font-size:20px; } 单位: 可以使用相对长度单位,也可以使用绝对长度单位. ...

  2. 解决firefox和IE9对icon font字体的跨域访问问题

    解决firefox和IE9对icon font字体的跨域访问问题 参考文章: (1)解决firefox和IE9对icon font字体的跨域访问问题 (2)https://www.cnblogs.co ...

  3. css的font修改颜色,css的font字体颜色如何设置

    css的font字体颜色设置方法:1.直接在标签上使用"color:颜色"设置字体颜色:2.通过给font标签添加class属性,在css标签中通过该class设置字体颜色. 本教 ...

  4. Unity 制作font字体

    有很多网友介绍Unity 创建并使用font的方法,这里总结一下备忘,同时网友的部分文章有一些小坑被我踩到,在这里记录一下,希望能帮助其他同学 一.首先创建字体(ttf文件),网上有用BitMap工具 ...

  5. PCB拼板邮票孔制作规范!

    嘉立创关于PCB拼板邮票孔制作规范: 邮票孔:建议5至8个0.60mm(直径)的孔为一排(要双排)为一组. 双排板与板之间至少要保证1.2mm以上间距(常规是1.6或2.0mm). 孔边到另一个孔边间 ...

  6. 【CSS】CSS 文本样式 ② ( font 字体设置 | CSS 2.0手册使用 | font-weight 字体粗细设置 | font-style 字体斜体设置 | font 字体样式综合写法 )

    文章目录 一. CSS 2.0手册使用 1. 按照文档层次查找 2. 搜索关键字查找文档 二. font-weight 字体粗细设置 1. 语法简介 2. 代码示例 三. font-style 字体斜 ...

  7. PCB板子螺钉孔大小参考

    PCB板子螺钉孔大小参考 使用螺钉直径尺寸的大小增加0.5~1.0mm设计.例如M3螺钉,直径3.0mm,则PCB使用3.5mm的螺钉孔,见附表:单位(mm)

  8. 单行文本垂直居中和多行文本垂直居中以及font字体

    单行文本垂直居中 <style>*{margin: 0;padding: 0;}.box{width: 300px;margin: 20px auto 0;border: 1px soli ...

  9. CSS font 字体设置

    取消标签加粗效果 font-weight:normal; 居中 text-align:center; 按照盒子模型,居中 text-align:center; display:block; 取消斜体 ...

最新文章

  1. API pytorch tensorflow
  2. 控件View动态设置高度时会卡顿、速度慢的情况解决
  3. android api在线文档_通过 API 远程管理 Jenkins
  4. B样条数据点反求控制点绘制曲线(源码)
  5. 【计算机网络】为什么一个路由器会有两个wifi信号
  6. 浏览器显示html过程,浏览器显示页面的流程
  7. win安装appium
  8. JAVA开源协同过滤算法,推荐算法:协同过滤算法的介绍
  9. 2013年2月 VB100 测试成绩公布
  10. Android Studio开发环境的搭建与hello world项目的构建
  11. 未能加载文件或程序集问题
  12. 程序员做自媒体,龙叔教你怎么快速成为优秀博主【CSDN篇】
  13. WORD文档怎么转换成EXCEL
  14. 将业务做到遍布全球,需要多大的IT运维团队?
  15. SQL 错误: Statement cancelled due to client request
  16. re正则表达式过滤标题特殊字符,只保留中英文及数字
  17. Arduino PS2摇杆
  18. Oracle PeopleSoft 应用安全加固
  19. 工行网银B2c第三方接口开发
  20. vue清空子组件数据或强制刷新子组件

热门文章

  1. FB面经Prepare: Dot Product
  2. 移动Web应用程序开发HTML5篇
  3. fastq-dump 报错 解决方案
  4. 分享网页设计当中使用进度条打造精美界面最佳例子
  5. 【写给朱大虫的教程】【Ruby on Rails】【006】遵循Rails理念的快速实现
  6. CompareAndSwap原子操作原理
  7. dump查询Java 状态
  8. 一个透明的shader
  9. flex 添加右键链接
  10. (转)在阿里,我们如何管理代码分支?