2012-12-10 12 views
6

Per un'applicazione, è necessario disegnare testo/glifi come 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 possibile ottenere lettere come un singolo percorso di linea come mostrato nella seconda immagine (mostra una L).Struttura di un testo come percorso vettoriale a linea singola

Sono felice se qualcuno ha un'idea.

Text outlineSingle line glyph path

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.

enter image description here

+0

per un progetto semplice, vorrei prendere le coordinate 2D per 1 pixel di larghezza e utilizzare un algoritmo A * per trovare la "strada" attorno all'oggetto. – Lucian

+0

Vedere anche [here] (http://forums.adobe.com/message/1277079), ma questo è per le app Adobe e CAD. L'unica soluzione che ho trovato finora sono i font TrueType a linea singola che devono essere installati sul sistema. – Matthias

+0

Puoi essere più specifico? dici "un unico percorso simile" quindi mostra un'immagine con due linee al suo interno. Non è chiaro cosa stai cercando di realizzare. –

risposta

4

@Matthias font colpo singolo si definiscono per l'area riempita del carattere. I caratteri TTF (contorno) definiscono ciascun carattere in base al tratto che circonda l'area riempita. Quindi, sono necessariamente formano una forma chiusa. In altre parole, non è possibile 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 corsa singola chiudendo i tratti del contorno su se stessi. Principalmente, sono utilizzati dal software di tracciatura CNC. Ecco uno link nel 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.

È possibile utilizzare 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.

Questa è l'uscita di Graphics.DrawPath, NON Graphics.FillPath.

enter image description here

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 legati da leggere se si pensa di fare un sacco di questo. http://tipsandtricks.rolanddga.com/software/how-to-generate-single-line-fonts-for-use-with-dr-engrave/