汉字生成G代码

塞外 2018-01-18 02:19:36
我准备用雕刻机刻汉字,我直接调用系统字库,将字的轮廓提取出来,得到线条队列(每个汉字有1到多个队列),现在我看了一下每一个汉字基本上线条队列都有1000-5000个点(汉字256*256的),这么多的点如果不精简一下,意味着至少有1000-5000个G代码生成,所以有没有什么算法,可以将连续的点精简一下,就是将点模糊一下(自己简单想了一下,就是去掉陆续x或y一样的点,再去掉陆续xy相差1的点,但是想了一下,会出现锯齿,所以感觉要采用近似模糊的算法),有想法或有经验的帮帮忙。
...全文
2398 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2018-01-25
  • 打赏
  • 举报
回复
如宋体 (220 point)‘汉‘ 数据如下 Head Length:64 Type: TT_POLYGON_TYPE Start point: x=199 y=78 TT_PRIM_QSPLINE P[0]=(218,162) P[1]=(244,238) P[2]=(264,270) TT_PRIM_QSPLINE P[0]=(307,200) P[1]=(333,78) Head Length:240 Type: TT_POLYGON_TYPE Start point: x=357 y=86 TT_PRIM_QSPLINE P[0]=(330,213) P[1]=(278,291) TT_PRIM_QSPLINE P[0]=(343,366) P[1]=(417,379) TT_PRIM_LINE P[0]=(417,386) TT_PRIM_QSPLINE P[0]=(390,388) P[1]=(379,407) TT_PRIM_QSPLINE P[0]=(317,375) P[1]=(266,308) TT_PRIM_QSPLINE P[0]=(195,390) P[1]=(97,417) TT_PRIM_LINE P[0]=(96,410) TT_PRIM_QSPLINE P[0]=(187,375) P[1]=(252,289) TT_PRIM_QSPLINE P[0]=(228,248) P[1]=(202,162) P[2]=(190,78) TT_PRIM_LINE P[0]=(182,78) P[1]=(166,81) P[2]=(152,67) P[3]=(330,67) P[4]=(345,48) P[5]=(374,74) Head Length:124 Type: TT_POLYGON_TYPE Start point: x=165 y=100 TT_PRIM_QSPLINE P[0]=(97,282) P[1]=(85,325) P[2]=(87,386) P[3]=(89,410) P[4]=(49,396) P[5]=(68,327) P[6]=(48,306) P[7]=(22,301) TT_PRIM_LINE P[0]=(22,294) TT_PRIM_QSPLINE P[0]=(65,301) P[1]=(87,267) P[2]=(158,98) Head Length:60 Type: TT_POLYGON_TYPE Start point: x=22 y=129 TT_PRIM_QSPLINE P[0]=(82,160) P[1]=(82,200) P[2]=(63,213) P[3]=(48,167) P[4]=(18,134) Head Length:60 Type: TT_POLYGON_TYPE Start point: x=63 y=38 TT_PRIM_QSPLINE P[0]=(111,62) P[1]=(123,97) P[2]=(101,121) P[3]=(85,74) P[4]=(60,43)
sxqvb 2018-01-22
  • 打赏
  • 举报
回复
schlafenhamster 2018-01-22
  • 打赏
  • 举报
回复
TTF字体 是 CubicBezier
of123 2018-01-22
  • 打赏
  • 举报
回复
试试楷体,选笔画多的字。
schlafenhamster 2018-01-22
  • 打赏
  • 举报
回复
{/* When an application calls the GetGlyphOutline function, a glyph outline for a TrueType character is returned in a TTPOLYGONHEADER structure, followed by as many TTPOLYCURVE structures as are required to describe the glyph. All points are returned as POINTFX structures and represent absolute positions, not relative moves. The starting point given by the pfxStart member of the TTPOLYGONHEADER structure is the point at which the outline for a contour begins. The TTPOLYCURVE structures that follow can be either polyline records or spline records. */
sxqvb 2018-01-21
  • 打赏
  • 举报
回复
你是用什么方法得到汉字那么多点的,我的就没有那么多

schlafenhamster 2018-01-20
  • 打赏
  • 举报
回复
要有 曲线 功能 如

#define POINTS_ON_CURVE 40
// by using LineTo() we do not need too many points.
// if use SetPixel(), increase it ! 
/** P0、P1、P2、P3 四个点定义了三次方贝塞尔曲线 B(t):
**  B(t)=(1-t)*(1-t)*(1-t)*P0+3*t*(1-t)*(1-t)*P1+3*t*t*(1-t)*P2+t*t*t*P3
*************************************************************/
BOOL  CTtfShowDlg::CubicBezier(CDC *pDC,const POINT* lpPoints, int nCount)
{// lpPoints contains all points. each 4 points make a cubic Bezier curve.
	double  t;
	double  dt=(double)1/POINTS_ON_CURVE;
	CPoint  pt;
//afxDump << nCount << "=nCount\n";
	for(int i=0 ; i < nCount - 3 ; i += 3)
	{
		if(i==0)
		{// only 1 start point need to be set !	
			pDC->MoveTo(lpPoints[0]);
		}
		for(t=0.0 ;t < 1.0 + dt ;t += dt)
		{// 4 points each,cubic Bezier curve.
			pt.x=(long)((1-t)*(1-t)*(1-t)*lpPoints[0+i].x +
				        3*t*(1-t)*(1-t)*lpPoints[1+i].x +
						3*t*t*(1-t)*lpPoints[2+i].x +
						t*t*t*lpPoints[3+i].x);	
			pt.y=(long)((1-t)*(1-t)*(1-t)*lpPoints[0+i].y +
				        3*t*(1-t)*(1-t)*lpPoints[1+i].y +
						3*t*t*(1-t)*lpPoints[2+i].y +
						t*t*t*lpPoints[3+i].y);	
			pDC->LineTo(pt);
			//pDC->SetPixel(pt,0xFF0000);// blue !
		}
	}
	return TRUE;
}
其中 pDC->LineTo(pt); 即 G01
worldy 2018-01-19
  • 打赏
  • 举报
回复
只要内存足够,就不要在意多少点
of123 2018-01-18
  • 打赏
  • 举报
回复
如果你的雕刻机只会走直线,你是用小直线模拟曲线的话,没有太好的既可以减少点又不影响美观的方法。
FCG是款基于模板的代码生成工具,可以生成任何文本语言代码:java,.C#, php,ruby等等,注意是任何语言,没有限制. FCG是为我们可爱的程序员设计的一款开发工具,主要目的是帮助大家构造符合自己系统架构需求的代码生成器,FCG和其他生成器比,有个很明显的特点:可定制性强;数据录入、代码生成前预处理、代码生成之后文件分发、模板文件定制等等,代码生成整个过程的几乎任何一个环节,都允许您定制.所以准确的讲:FCG不是个代码生成器,而是用来开发代码生成器的基础平台.


FCG相比其他生成器,有很多不一样的东西.下面列出FCG几点特性.

1. FCG采用plugin设计体系,一个具体软件架构的生成器对应一个plugin,等FCG2.0正式版本发布时,你可以登陆到FCG官方网站www.51mda.com.cn或者www.51mda.com下载FCG官方提供的plugin或者其它FCG用户提供的plugin.

2.FCG支持PDM模型导入,所以使用FCG生成代码,会有中文注释信息(中文注释来自PDM文件)
3.FCG支持Velocity,FreeMarker,WebMacro,Jelly和Jxp 5种模板引擎,你可以选择其中任何一个引擎支持的语法来开发模板文件.如果您觉得还不够,您可以把你喜欢的模板引擎告诉我,我可以很快加上.
4.FCG提供GUI工具,整个代码生成的过程,都是通过GUI工具来控制,很方便.
5.FCG 内置了一个小的脚本语言TinyScript,使用TinyScript可以很方便在代码生成之前或者之后作些处理,譬如:代码生成后,对java代码进行编译,发布,启动应用服务器之类的.你还可以通过TinyScript来调用ant 脚本.所以ant能干的FCG能干,ant不能干的FCG也能干:)
6.FCG提供Tag管理功能,使用FCG的tag可以将一个文件分割成若干段,并可以对各段内容进行修改、删除操作.所以使用FCG可以很容易实现配置文件合并处理(关于这点在后续的章节会有具体的阐述)

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧