在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增加轮廓字 实现原理的更多相关文章

  1. PCB Genesis增加点阵字 实现原理

    我们采用Genesis增加点阵字时,用Genesis增加Canned Text即可,但奥宝中文不支持,且字符种类是有限的呀 不过没关系,没有自己造呀.在这里我分享一种增加点阵字的实现方法 一.通过代码 ...

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

    一.先看genesis原有Font字体 在PCB工程CAM加孔点字体要求时,通常我们直接用Geneis软件给我们提供了2种孔点字体canned_57与canned_67,但此字体可能不能满足各个工厂个 ...

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

    越来发现Genesis采用Surface多边形数据结构的重要性了,当撑握了多边形缩放,交集, 差集,并集等算法, 想实现PCB拼板简直轻而易举了;当然借助多边形算法可以开发出更多的PCB实用的工具出来 ...

  4. PCB Genesis加二维码 实现方式

    使用incam可以很轻松的增加2维码,这里通过另外一种方式玩转二维码的加法, 使用谷歌zxing.dll类库实现,将文字信息转为bitmap点阵后,在Genesis绘制点即可. 一.incam增加二维 ...

  5. PCB Genesis加邮票孔(邮票孔增加方向判断--左右上下)实现算法

    之前没解决的问题,当时一下卡在用户界面选择邮票孔增加的方向(上下左右) 与邮票孔实际方位之前的逻辑与非判断上卡壳了,导致一下没进展下去. 回头看原来如此简单 ,将此点记录一下. 1.垂直线定义:80- ...

  6. PCB genesis连孔加除毛刺孔(圆孔与槽孔)实现方法(二)

    一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...

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

    一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...

  8. PCB genesis连孔加除毛刺孔(圆孔与圆孔)实现方法(一)

    一.为什么 连孔加除毛刺孔 原因是 PCB板材中含有玻璃纤维, 毛刺产生位置在于2个孔相交位置,由于此处钻刀受力不均导致纤维切削不断形成毛刺 ,为了解决这个问题:在钻完2个连孔后,在相交处再钻一个孔, ...

  9. PCB Genesis脚本 C#调用Javascript

    曾经用node.js测试写Genesis脚本失败了,这次借助开发PCB规则引擎的机会(基于JS V8引擎与.net深度交互性), 验证一下Javascript是否可用于写Genesis脚本. 一.测试 ...

随机推荐

  1. C# Request

    string type = Request["type"]; //值为null; //?type= 值为""; //?type=12 值为"12&qu ...

  2. 让System.Drawing.Bitmap可以在linux运行

    .net core的bitmap使用的是以下类库,但无法在linux运行 https://github.com/CoreCompat/CoreCompat 在linux运行需要安装runtime.li ...

  3. [LUOGU]4932 浏览器

    \(\_\_stdcall\)大佬出的题\(Orz\) 我们惊奇地发现,加入\(\_\_popcount(x)\)和\(\_\_popcount(y)\)的奇偶数性相同,那么\(\_\_popcoun ...

  4. 关于单片机编程里面调用sprintf死机的解决方法及原因分析

    好久之前的做的笔记,这里贴出. char String[100];//直接用数组代替指针即可解决 下面代代码下载至单片机中,发现会出现单片机死机问题 #include "stdio.h&qu ...

  5. vue组件 $children,$refs,$parent的使用详解

    1)$refs 首先你的给子组件做标记.demo :<firstchild ref="one"></firstchild> 然后在父组件中,通过this.$ ...

  6. 【郑轻邀请赛 D】hipercijevi

    [题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2130 [题意] [题解] 把那个管泛化成一个点; 然后把每一个在管里面的点都和它相连 ...

  7. hdu 4171 最短路

    #include<stdio.h> #include<string.h> #include<queue> #include<iostream> usin ...

  8. POJ2001 Shortest Prefixes (Trie树)

    直接用Trie树即可. 每个节点统计经过该点的单词数,遍历时当经过的单词数为1时即为合法的前缀. type arr=record next:array['a'..'z'] of longint; w: ...

  9. 关于Spring的xml文档的简单实用配置

    Spring的spring.xml文档的配置 最近在写Spring的配置文件时,发现Spring文档的配置其实没必要那么繁琐记忆,网上的很多文章都写得很繁琐,如果所有的东西按照路径去查找,可以很快的帮 ...

  10. saprk里面的action - aggregate

    上一篇讲到了spark里面的action函数: Action列表: reduce collect count first take takeSample takeOrdered saveAsTextF ...