2013-09-30 12 views
5

मेरी समस्या का पृष्ठभूमि यह है कि मेरे पास कई wpf ज्यामिति उदाहरणों में विभाजित ज्यामिति (विशाल राशि, बड़े क्षेत्र पर नक्शा लगता है) का एक गुच्छा है (मूल रूप से वे पथगेटोमेट्री थे, लेकिन स्मृति उपयोग को कम करने के लिए I उन्हें पूर्व-संसाधित करें और लोड के दौरान StreamGeometries बनाएं)। अब मैं इन ज्यामिति से टाइल्स जेनरेट करना चाहता हूं।एक मनमानी wpf ज्यामिति को फसल करना

असल में मैं एक बड़ी ज्यामिति वस्तु लेना चाहता हूं और इसके आयत (मेरा टाइल) "काटना चाहता हूं इसलिए मुझे कई छोटी ज्यामिति मिलती हैं। नीचे दी गई छवि की तरह कुछ:

Slicing up a large geometry

सूचना है कि मैं परिणाम एक नया ज्यामिति, नहीं एक प्रतिपादन होना चाहता हूँ। मुझे पता है कि मैं विज़ुअल प्राप्त कर सकता हूं परिणाम clip to a UIElement या pushing a clip to a drawingvisual द्वारा लागू कर सकता है।

मैं तर्क क्लिप आयत किया जा रहा से एक के साथ Geometry.Combine का उपयोग कर की कोशिश की है, लेकिन मैं इसे मैं क्या चाहते हैं (मैं आम तौर पर केवल जिस पर निर्भर करता है, क्लिप रेक्ट वापस, या एक खाली ज्यामिति प्राप्त करने के लिए नहीं मिल सकता है गठबंधन मोड मैं उपयोग)।

वैकल्पिक रूप से, यदि यह WPF का उपयोग करके नहीं किया जा सकता है, तो क्या कोई अन्य (तृतीय पक्ष ठीक है) सामान्य purporse ज्यामिति API .NET के लिए है जो इस तरह के संचालन कर सकता है? या शायद यह WPF ज्यामिति एपीआई के अन्य भागों का उपयोग करके लागू किया जा सकता है?

+0

आप Geometry.Combine साथ GeometryCombineMode.Intersect का उपयोग किया? –

+0

मैंने उन सभी की कोशिश की है और मैं जो भी चाहता था, उनमें से कोई भी तरीका नहीं था। –

उत्तर

1

कोड अपने "छोटे टाइल" दृश्य में की तरह नीचे दाईं आयत से पता चलता:

var geometry = MyOriginalPath.Data.Clone(); 
var bounds = geometry.Bounds;  
var rectangleGeometry = new RectangleGeometry(bounds); 
var halfWidth = bounds.Width * 0.5; 
var halfHeight = bounds.Height * 0.5; 
var bottomQuarter = new RectangleGeometry(
    new Rect(bounds.X + halfWidth, bounds.Y + halfHeight, 
      halfWidth, halfHeight)); 
var combinedGeometry = new CombinedGeometry(GeometryCombineMode.Exclude, 
              rectangleGeometry, bottomQuarter); 
combinedGeometry = new CombinedGeometry(GeometryCombineMode.Exclude, 
             geometry, combinedGeometry); 
MyBottomQuarterPath.Data = combinedGeometry; 

सादर डेव

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