Struttura di un testo come percorso vettoriale a linea singola

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.

Struttura del testoPercorso glifo a linea singola

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.

inserisci la descrizione dell'immagine qui

@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 .

inserisci la descrizione dell'immagine qui

  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/