cocoa - How to get the path Quartz is using to stroke a NSBezierPath -


एक धराशायी </ P> <p> (<code> c </ code> और <code> strForBezier के साथ एक NSBezierPath स्ट्रोक को मैं इस कोड का उपयोग कर रहा हूँ। </ Code> को कहीं और परिभाषित किया गया है) </ p> <pre> <code> एनएसजीलीफ़ ग्लाइफ; के लिए (n = 0; n & lt; len; n ++) {glyph = [font glyphWithName: [strfororbizier substringWithRange: एनएसएमकेरेंज (एन, 1)]]; [पथ अनुलग्नक बिज़ेयरपाथविथ Glyph: ग्लाइफ फॉन्ट: फ़ॉन्ट]; } CGFloat पैटर्न 2 [4]; pattern2 [0] = 5 * ग; pattern2 [1] = 2 * ग; pattern2 [2] = 2 * ग; pattern2 [3] = 2 * ग; [पथ सेटलाइन डिश: पैटर्न 2 गिनती: 4 चरण: 0]; [पथ सेट लाइनेविड्थ: सी]; [पथ स्ट्रोक]; [[एनस्कोलर नीला रंग] सेट]; [पथ भर]; </ Code> </ pre> <p> मैं ब्लैक एनएसबीज़ियर पाथ कैसे प्राप्त करूं? मैं धारणा बना रहा हूं कि एक NSBezierPath बनाया गया है और प्रारंभिक वक्र स्ट्रोक से भरा हुआ है। </ P> </ div> <p> <div class =

आप कर सकते हैं मौजूदा पथ को तेज करने और पथपाकर एक पथ बनाएं, लेकिन इसके लिए CGPathRef के बजाय NSBezierPath का उपयोग करना आवश्यक है।

  CGMutablePathRef path0 = CGPathCreateMutable ( ); CGAffineTransform transform = CGAffineTransformMakeTranslation (20, 20); // प्रारंभिक स्थिति {20, 20} CGGlyph ग्लिफ़ है; के लिए (n = 0; n & lt; len; n ++) {glyph = [font glyphWithName: [strfororbizier substringWithRange: एनएसएमकेरेंज (एन, 1)]]; CGPathRef glyphPath = CTFontCreatePathForGlyph ((__ पुल CTFontRef) फ़ॉन्ट, ग्लिफ़, नल); CGPathAddPath (पथ 0, & amp; रूपांतरण, ग्लाइफपाथ); CGPathRelease (glyphPath); // रूपांतरण CGSize अग्रिम में ग्लिफ़ अग्रिम संलग्न; CTFontGetAdvancesForGlyphs ((__ ब्रिज CTFontRef) फ़ॉन्ट, kCTFontDefaultOrientation, & amp; Glyph, & amp; अग्रिम, 1); Transform.tx + = advance.width; परिवर्तन। टी + = अग्रिम। हाइट; } CGFloat पैटर्न 2 [4]; pattern2 [0] = 5 * ग; pattern2 [1] = 2 * ग; pattern2 [2] = 2 * ग; pattern2 [3] = 2 * ग; CGPathRef पथ 1 = CGPathCreateCopyByDashingPath (path0, NULL, 0, pattern2, 4); CGPathRef पथ 2 = CGPathCreateCopyByStrokingPath (पथ 1, NULL, c, kCGLineCapbutt, kCGLineJoinMiter, CGFLOAT_MAX); CGContextRef संदर्भ = [NSGraphicsContacts वर्तमानContext] .graphicsPort; CGContextAddPath (संदर्भ, पथ 2); CGContextDrawPath (संदर्भ, केसीजीपैथफिल); CGPathRelease (path0); CGPathRelease (path1); CGPathRelease (Path2);   

यदि आप CGPathRef से सहज नहीं हैं, तो आप एक NSBezierPath बना सकते हैं और उसे एक CGPathRef ऐप्पल दस्तावेज़ीकरण में वर्णित विधि का उपयोग करना (रिवर्स भी संभव है)।

Comments