2012-12-10 16 views
6

के रूप में एक पाठ की रूपरेखा एक आवेदन के लिए मुझे वेक्टर आधारित पथ के रूप में टेक्स्ट/ग्लाइफ आकर्षित करने की आवश्यकता है। GDI+ ग्राफिक्सपैथ और ग्राफिक्स का उपयोग करना। ड्रॉपैथ या WPF स्वरूपित टेक्स्ट और ज्यामिति ठीक काम करती हैं और मुझे पहली तस्वीर में दिखाए गए आउटपुट मिलते हैं। लेकिन दूसरी तस्वीर में दिखाए गए अनुसार एक लाइन लाइन के रूप में अक्षरों को प्राप्त करना किसी भी तरह से संभव है (एल दिखाता है)।एकल पंक्ति वेक्टर पथ

मुझे खुशी है अगर किसी के पास कोई विचार है।

Text outlineSingle line glyph path

इस उदाहरण देखें। अंतर्निर्मित फ़ंक्शन का उपयोग करने से आपको हमेशा उस पत्र का मार्ग मिल जाएगा जिसमें इसकी आंतरिक और बाहरी सीमा रेखा होती है। केवल पहला ही एकल स्ट्रोक से बना होता है जिसके परिणामस्वरूप बहुत कम पथ होता है।

enter image description here

+0

एक साधारण प्रोजेक्ट के लिए मैं 2 डी-निर्देशांक 1 पिक्सेल चौड़ाई के लिए लेता हूं और ऑब्जेक्ट के चारों ओर "रास्ता" खोजने के लिए ए * एल्गोरिदम का उपयोग करता हूं। – Lucian

+0

यह भी देखें [यहां] (http://forums.adobe.com/message/1277079) लेकिन यह एडोब और सीएडी ऐप्स के लिए है। एकमात्र समाधान जो मैंने पाया है, एकल-पंक्ति ट्रू टाइप फ़ॉन्ट्स हैं जिन्हें सिस्टम पर स्थापित किया जाना है। – Matthias

+0

क्या आप अधिक विशिष्ट हो सकते हैं? आप "पथ की तरह एकल" कहते हैं, फिर इसमें दो पंक्तियों वाली एक छवि दिखाएं। यह स्पष्ट नहीं है कि आप क्या करने की कोशिश कर रहे हैं। –

उत्तर

4

@Matthias एकल स्ट्रोक फोंट फ़ॉन्ट का भरा क्षेत्र के आधार पर स्वयं को परिभाषित। टीटीएफ (रूपरेखा) फोंट भरने वाले क्षेत्र के आसपास के स्ट्रोक द्वारा प्रत्येक चरित्र को परिभाषित करते हैं। इसलिए, वे आवश्यक रूप से एक बंद आकार बनाते हैं। दूसरे शब्दों में, "असली एकल स्ट्रोक" रूपरेखा फ़ॉन्ट होना संभव नहीं है, क्योंकि एकल स्ट्रोक फ़ॉन्ट्स में केवल एक भरे क्षेत्र होते हैं। .NET Framework केवल टीटीएफ फोंट का समर्थन करता है।

सौभाग्य से, कुछ फोंट हैं जो एक-स्ट्रोक व्यवहार को अनुकरण करते हैं जो स्वयं के रूप में रूपरेखा स्ट्रोक को बंद कर देते हैं। ज्यादातर, वे सीएनसी साजिश सॉफ्टवेयर द्वारा उपयोग किया जाता है। ज़िप फ़ाइल में link यहां एक ही फ़ॉन्ट्स शामिल हैं जो @ सिमन मॉरीयर ने सुझाव दिया है।

मैंने पहले के साथ प्रयोग किया और वास्तव में मैं संलग्न क्षेत्रों के लिए एक अलग रास्ता नहीं देख सका। मैंने कुछ कोड लिखा था जो एक नियमित फ़ॉन्ट के स्ट्रोक को अपने आप में बंद कर देता है, लेकिन कुछ धब्बे में घुमावदार क्षेत्र गायब हो जाते हैं। जो भी आंतरिक एल्गोरिदम .NET स्क्वैश आउटलाइन से 1px पथ बनाने का प्रयास करने के लिए उपयोग करता है, वह काम नहीं करता है साथ ही एक अच्छी तरह से डिज़ाइन किए गए फ़ॉन्ट का उपयोग भी करता है। तो, यह उतना ही अच्छा है जितना कि यह .NET का उपयोग करने जा रहा है।

आप यह कोड देखने के लिए इस कोड का उपयोग कर सकते हैं कि प्रत्येक फ़ॉन्ट उन्हें इंस्टॉल करने के बाद क्या उत्पादन करता है। या, मुझे लगता है कि आप उन्हें अपने सॉफ्टवेयर में बस कोशिश कर सकते हैं :) किसी भी तरह से, मुझे आशा है कि यह आपके लिए उपयोगी होगा।

यह Graphics.DrawPath का आउटपुट है, 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); 
     } 
    } 

इसके अलावा, यहाँ अगर आप इस के बहुत कर रही पर योजना को पढ़ने के लिए एक बहुत ही संबंधित लेख है। http://tipsandtricks.rolanddga.com/software/how-to-generate-single-line-fonts-for-use-with-dr-engrave/

संबंधित मुद्दे