9

アプリケーションの場合、テキスト/グリフをベクターベースのパスとして描画する必要があります。GDI + GraphicsPathとGraphics.DrawPath、またはWPF FormattedTextとGeometryを使用すると正常に機能し、最初の図に示すような出力が得られます。しかし、2番目の図(Lを示す)に示すように、文字を1行のパスとして取得することはどういうわけか可能ですか。

誰かアイデアがあれば嬉しいです。

テキストの概要 単一行のグリフパス

この例を参照してください。組み込み関数を使用すると、常に内側と外側の境界線を含む文字のパスが得られます。最初のものだけが単一のストロークで構成されているため、パスがはるかに短くなります。

ここに画像の説明を入力してください

4

1 に答える 1

7

シングルストロークフォントは、フォントの塗りつぶされた領域によって定義されます。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/

于 2013-12-22T23:02:16.457 に答える