2013-09-30 3 views
5

내 배경은 여러 개의 wpf 지오메트리 인스턴스 (원래는 PathGeometry이지만, 메모리 사용량을 줄이기 위해 나는 많은 양의 지형을 생각했다. 미리 처리하고로드하는 동안 StreamGeometries를 만듭니다.) 이제 내가 원하는 것은 이러한 지오메트리에서 타일을 생성하는 것입니다.임의의 wpf 지오메트리 자르기

기본적으로 큰 지오메트리 개체를 가져 와서 사각형 ("타일")을 잘라내어 여러 개의 작은 지오메트리를 얻고 싶습니다. 아래 이미지처럼 뭔가 : 나는 결과가 새로운 구조가 아닌 렌더링되고 싶어

Slicing up a large geometry

알 수 있습니다. 나는 시각적 인의 결과를 clip to a UIElement 또는 pushing a clip to a drawingvisual을 적용하여 얻을 수 있다는 것을 알고 있습니다.

Geometry.Combine은 클립 사각형 인 인수 중 하나를 사용하여 시도했지만 원하는대로 처리 할 수 ​​없습니다 (일반적으로 클립을 뒤로 가져 오거나 빈 지오메트리를 얻을 수 있음). 결합 모드).

또는 WPF를 사용하여 수행 할 수없는 경우 이런 종류의 작업을 수행 할 수있는 .NET 용 범용 지오메트리 API가 있습니까? 아니면 WPF Geometry API의 다른 부분을 사용하여 구현할 수 있습니까?

+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; 

감사합니다 데이브