Per un’applicazione ho bisogno di disegnare testo / glifi come un percorso vettoriale. Utilizzo di GDI + GraphicsPath e Graphics.DrawPath o WPF FormattedText and Geometry funziona correttamente e ottengo l’output come mostrato nella prima immagine. Ma è in qualche modo ansible ottenere lettere come un singolo percorso di linea come mostrato nella seconda immagine (mostra una L).
Mi fa piacere se qualcuno ha un’idea.
Vedi questo esempio. L’uso della funzione incorporata ti darà sempre il percorso di una lettera che contiene il suo bordo interno ed esterno. Solo il primo è composto da tratti singoli che si traducono in un percorso molto più breve.
@Matthias Caratteri a tratto singolo si definiscono dall’area riempita del carattere. I caratteri TTF (contorno) definiscono ciascun carattere in base al tratto che circonda l’area riempita. Quindi, necessariamente formano una forma chiusa. In altre parole, non è ansible avere un carattere di contorno “true single stroke”, perché i caratteri a tratto singolo hanno solo un’area riempita. .NET Framework supporta solo i caratteri TTF.
Fortunatamente, ci sono alcuni caratteri che emulano il comportamento a tratto singolo chiudendo i tratti del contorno su se stessi. Principalmente, sono utilizzati dal software di tracciatura CNC. Ecco un link al file zip contenente gli stessi caratteri che @Simon Mourier ha suggerito di utilizzare.
Ho sperimentato con il primo e in effetti non ho potuto vedere un percorso separato per le aree chiuse. Ho scritto un codice che rende i tratti di un carattere normale vicini a se stessi, ma le aree curve scompaiono in alcuni punti. Qualunque algoritmo interno .NET utilizzi per provare a creare un percorso 1px da una struttura schiacciata non funziona altrettanto bene come usare un font ben progettato. Quindi, questo è buono come quello che otterrà usando .NET.
Puoi usare questo codice per vedere cosa produce ogni font dopo averli installati. Oppure, credo che potresti semplicemente provarli nel tuo software 🙂 Ad ogni modo, spero che questo sia utile per te.
Questo è l’output di 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); } }
Inoltre, ecco un articolo molto correlato da leggere se pensi di fare molto di questo. http://tipsandtricks.rolanddga.com/software/how-to-generate-single-line-fonts-for-use-with-dr-engrave/