PCB Genesis增加轮廓字 实现原理
在Genesis增加汉字自带是不支持增加汉字的,如果需增加汉字需用到CAD 汉字库才可增加汉字,这里介绍一种脱离汉字库实现
Genesis增加轮廓字(如要变为实体,填空Surface可变为实体字)
一.增加效果图

二.选中其中一个字放大查各节点细节

三.字坐标树结构

四.代码实现
增加轮廓字
private void button31_Click(object sender, EventArgs e)
{
Font font = new Font(new FontFamily("宋体"), 100f);
tvList.Nodes.Clear();
FillWordOutlines(, , , font);
}
/// <summary>
/// 填充所有字符轮廓
/// </summary>
/// <param name="x">起始X</param>
/// <param name="y">Y值</param>
/// <param name="spacing">字符间隔</param>
private void FillWordOutlines(int x, int y, int spacing, Font font) // 2步
{
IList<WordOutlineDrawing> wordOutlines = new List<WordOutlineDrawing>();
string text = "pcbren共赢加油";
if (!string.IsNullOrEmpty(text))
{
foreach (char t in text)
{
TreeNode wordNode = new TreeNode(t.ToString());
tvList.Nodes.Add(wordNode); //获取字符编码
uint ch = GetGB2312Coding(t); //获取轮廓数据
DOutline outline = WordGraph.GetOutline(ch, font); //构建轮廓实例
WordOutlineDrawing word = BuildWordOutline(outline, new PointF(x, y), wordNode); // 转到 3步
wordOutlines.Add(word); //下个字的起始位置=当前起始位置+宽度+间隔
x += (int)outline.Width + spacing;
}
}
}
/// <summary>
/// 通过轮廓数据构建字体轮廓
/// </summary>
/// <param name="outline">轮廓数据</param>
/// <param name="offset">偏移量</param>
/// <param name="wordNode"></param>
/// <returns></returns>
private WordOutlineDrawing BuildWordOutline(DOutline outline, PointF offset, TreeNode wordNode) // 3步
{
//获取轮廓大小
SizeF size = new SizeF(outline.Width, outline.Height); WordOutlineDrawing word = new WordOutlineDrawing(size);
//---------------------
wordNode.Tag = word;
//---------------------
int index = ;
add add = new add();
//遍历填充轮廓数据
foreach (DPolygon p in outline.Polygons) //【单个字符对应poly个数 如O 有2个poly封闭圈】
{
//新增多边形实例
PolygonDrawing polygon = new PolygonDrawing(); //---------------------
TreeNode polygonNode = new TreeNode("多边形" + (++index));
polygonNode.Tag = polygon;
wordNode.Nodes.Add(polygonNode);
//--------------------- //起始点
PointF start = new PointF(offset.X + ConvertUtil.FixedToFloat(p.Start.x), offset.Y - ConvertUtil.FixedToFloat(p.Start.y)); PointF point = start;
foreach (DLine l in p.Lines) //【一个poly的封闭圈 线段列表】
{
LineDrawing line = null;
//如果类型为1则为折线,为2则为曲线
if (l.Type == ) { line = new PolylineDrawing(); }
else { line = new CurvelineDrawing(); } //加入起始点
line.Points.Add(point);
//---------------------
StringBuilder builder = new StringBuilder(l.Type == ? "折" : "曲");
builder.AppendFormat(" ({0},{1}) ", point.X, point.Y);
//---------------------
foreach (POINTFX fx in l.Points)
{
point = new PointF(offset.X + ConvertUtil.FixedToFloat(fx.x), offset.Y - ConvertUtil.FixedToFloat(fx.y));
line.Points.Add(point);
builder.AppendFormat("({0},{1}) ", point.X, point.Y);
}
polygon.Lines.Add(line); //---------------------
TreeNode lineNode = new TreeNode(builder.ToString());
lineNode.Tag = line;
polygonNode.Nodes.Add(lineNode);
//---------------------
} if (point != start)
{
//增加结束到开始的闭合线段
LineDrawing endLine = new BeelineDrawing();
endLine.Points.Add(point);
endLine.Points.Add(start);
polygon.Lines.Add(endLine); //---------------------
TreeNode endNode = new TreeNode(string.Format("直 ({0},{1}) ({0},{1}) ", point.X, point.Y, start.X, start.Y));
endNode.Tag = endLine;
polygonNode.Nodes.Add(endNode);
//---------------------
} for (int i = ; i < polygon.Lines.Count; i++)
{
for (int j = ; j < polygon.Lines[i].Points.Count; j++)
{
//add.pad(polygon.Lines[i].Points[j].X, polygon.Lines[i].Points[j].Y, 500, "r");
if (j > )
add.line(polygon.Lines[i].Points[j - ].X, polygon.Lines[i].Points[j - ].Y, polygon.Lines[i].Points[j].X, polygon.Lines[i].Points[j].Y, ); }
} //加入到字符轮廓的多边形列表中
word.Polygons.Add(polygon);
}
return word;
}
PCB Genesis增加轮廓字 实现原理的更多相关文章
- PCB Genesis增加点阵字 实现原理
我们采用Genesis增加点阵字时,用Genesis增加Canned Text即可,但奥宝中文不支持,且字符种类是有限的呀 不过没关系,没有自己造呀.在这里我分享一种增加点阵字的实现方法 一.通过代码 ...
- PCB genesis自制孔点 Font字体实现方法
一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...
- PCB Genesis SET拼板(圆形板拼板) 实现效果(二)
越来发现Genesis采用Surface多边形数据结构的重要性了,当撑握了多边形缩放,交集, 差集,并集等算法, 想实现PCB拼板简直轻而易举了;当然借助多边形算法可以开发出更多的PCB实用的工具出来 ...
- PCB Genesis加二维码 实现方式
使用incam可以很轻松的增加2维码,这里通过另外一种方式玩转二维码的加法, 使用谷歌zxing.dll类库实现,将文字信息转为bitmap点阵后,在Genesis绘制点即可. 一.incam增加二维 ...
- PCB Genesis加邮票孔(邮票孔增加方向判断--左右上下)实现算法
之前没解决的问题,当时一下卡在用户界面选择邮票孔增加的方向(上下左右) 与邮票孔实际方位之前的逻辑与非判断上卡壳了,导致一下没进展下去. 回头看原来如此简单 ,将此点记录一下. 1.垂直线定义:80- ...
- PCB genesis连孔加除毛刺孔(圆孔与槽孔)实现方法(二)
一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...
- PCB genesis连孔加除毛刺孔(槽孔与槽孔)实现方法(三)
一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...
- PCB genesis连孔加除毛刺孔(圆孔与圆孔)实现方法(一)
一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...
- PCB Genesis脚本 C#调用Javascript
曾经用node.js测试写Genesis脚本失败了,这次借助开发PCB规则引擎的机会(基于JS V8引擎与.net深度交互性), 验证一下Javascript是否可用于写Genesis脚本. 一.测试 ...
随机推荐
- 【技术累积】【点】【java】【22】UUID
基础概念&使用 UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符. 说白了就是个唯一键,只不过到处 ...
- 抓包工具Fiddler及Charles
一.抓包工具介绍 1.charles抓包如何抓取手机端数据包(安卓手机) (1)获取pc的IP地址 (2)打开charles里的[Proxy]-[Proxy setting],设置端口号,默认为888 ...
- logback日志配置文件
application.properties application.properties logback-spring.xml <?xml version="1.0" en ...
- Python OS & sys模块
os模块(* * * *) os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname" ...
- 【Codeforces 27A】Next Test
[链接] 我是链接,点我呀:) [题意] 让你求没出现过的最小值 [题解] 模拟..for一下就好 [代码] import java.io.*; import java.util.*; public ...
- 【codeforces 515B】Drazil and His Happy Friends
[题目链接]:http://codeforces.com/contest/515/problem/B [题意] 第i天选择第i%n个男生,第i%m个女生,让他们一起去吃饭; 只要这一对中有一个人是开心 ...
- 【POJ 1860】Currency Exchange
[题目链接]:http://poj.org/problem?id=1860 [题意] 给你n种货币,m种货币之间的交换信息; 交换信息以 A,B,RA,CA,RB,CB的形式给出; 即A换B的话假设A ...
- JavaSE 学习笔记之多线程(十三)
多线程: 进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.进程负责的是应用程序的空间的标示.线程负责的是应用程序的执行顺 ...
- Java SE 之 递归方法
public void removeSon(String id, List<Dept> deptList) { String hql = "from Dept where par ...
- CODEVS1533 Fibonacci数列 (矩阵乘法)
嗯,,,矩阵乘法最基础的题了. Program CODEVS1250; ..,..] of longint; var T,n,mo:longint; a,b:arr; operator *(a,b:a ...