シングルストロークフォントは、フォントの塗りつぶされた領域によって定義されます。TTF(アウトライン)フォントは、塗りつぶされた領域を囲むストロークによって各文字を定義します。したがって、それらは必然的に閉じた形状を形成します。つまり、シングルストロークフォントには塗りつぶされた領域しかないため、「真のシングルストローク」アウトラインフォントを使用することはできません。.NET Frameworkは、TTFフォントのみをサポートします。
幸いなことに、アウトラインストロークを閉じることでシングルストロークの動作をエミュレートするフォントがいくつかあります。ほとんどの場合、CNCプロットソフトウェアで使用されます。これは、@SimonMourierが使用を提案したのと同じフォントを含むzipファイルへのリンクです。
私は最初のものを試してみましたが、実際、囲まれた領域の別のパスを見ることができませんでした。通常のフォントのストロークを自分自身に近づけるコードを作成しましたが、一部の場所で湾曲した領域が消えます。.NETが押しつぶされたアウトラインから1pxのパスを作成するために使用する内部アルゴリズムが何であれ、適切に設計されたフォントを使用するのと同様に機能しません。したがって、これは.NETを使用するのと同じくらい優れています。
このコードを使用して、インストール後に各フォントが何を生成するかを確認できます。または、ソフトウェアで試してみることもできると思います:)いずれにしても、これがお役に立てば幸いです。
これはGraphics.DrawPath
、NOTの出力ですGraphics.FillPath
。
private void button1_Click(object sender, EventArgs e) {
DrawText("single stroke ttf engraving fonts");
}
private void DrawText(string text) {
using (Graphics g = panel.CreateGraphics())
using (Font font = new System.Drawing.Font("1CamBam_Stick_1", 50, FontStyle.Regular))
using (GraphicsPath gp = new GraphicsPath())
using (StringFormat sf = new StringFormat()) {
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
gp.AddString(text, font.FontFamily, (int)font.Style, font.Size, panel.ClientRectangle, sf);
g.Clear(Color.Black);
g.DrawPath(Pens.Red, gp);
}
}
また、これをたくさん行う予定がある場合は、非常に関連性の高い記事を読んでください。
http://tipsandtricks.rolanddga.com/software/how-to-generate-single-line-fonts-for-use-with-dr-engrave/