2016-08-17 3 views
1

작동하지 않습니다 : 여기에 다음 enter image description here 은 내 코드입니다 :Geometry.Combine 내가 이렇게 두 곡선을 결합하려는 곡선

// Create a path to draw a geometry with. 
Path myPath = new Path(); 
myPath.Stroke = Brushes.Black; 
myPath.StrokeThickness = 1; 
var gmy1 = (StreamGeometry)StreamGeometry.Parse("M100,100C110,118.333333333333 138.333333333333,206.666666666667 160,210 181.666666666667,213.333333333333 205,123.333333333333 230,120 255,116.666666666667 280,186.666666666667 310,190 340,193.333333333333 396.666666666667,156.666666666667 410,140 423.333333333333,123.333333333333 393.333333333333,98.3333333333333 390,90"); 
var gmy2 = (StreamGeometry)StreamGeometry.Parse("M180,241.25L180,241.25 230,290 300,246.66667175293 330,160"); 
var gmy = Geometry.Combine(gmy1, gmy2, GeometryCombineMode.Union, null); 
myPath.Data = gmy; 
// Add path shape to the UI. 
this.panel1.Children.Add(myPath); 

그러나 결과는 이것이다 :

enter image description here

WPF에서 커브를 결합하는 방법은 무엇입니까? 그리고 프로젝트 제한으로 인해 우리는 레이아웃과 xaml없이 이것을 구현해야합니다. 즉, 결과 유형이 기하학이어야 함을 의미합니다.

+1

모든 이유 : 당신이 임의의 기하학적 도형의 집합을하고 그룹화 할 경우

을하는 GeometryGroup을 사용합니까? 이 두 문자열을 연결하고 결과 문자열을 구문 분석하면 원하는 결과를 얻을 수 있습니다. –

+0

고마워!이게 내 문제를 해결할 수있어. 나는 그것에 대해 결코 생각하지 않았다. –

답변

3

: 구문 분석하기 전에 문자열로 결합하지

Geometry gmy1 = ...; 
Geometry gmy2 = ...; 
var gmy = new GeometryGroup(); 
gmy.Children.Add(gmy1); 
gmy.Children.Add(gmy2); 
myPath.Data = gmy; 
0

Grid 또는 Canvas에 두 개를 모두 추가하면 교차 조합이 이루어 지므로 오버레이를 추가하는 것만 보입니다. 또는 두 가지를 모두 GeometryGroup에 추가하고이를 패널에 추가하십시오.

+0

네, 그렇습니다. 그러나 프로젝트의 한계 때문에 레이아웃과 xaml없이 이것을 구현해야합니다. 비슷한 방법으로 Combine for Curves를 사용할 수 있습니까? –

+0

그게 무슨 소리 죠? 당신은 이미'this.panel1.Children.Add'를 호출합니다. 단지 두번 호출 할 필요가 있습니다. –

+1

기하학 그룹을 사용할 수도 있습니다. –

1

쉬운 :

Path myPath = new Path(); 
myPath.Stroke = Brushes.Black; 
myPath.StrokeThickness = 1; 
var gmy1 = (StreamGeometry)StreamGeometry.Parse("M100,100C110,118.333333333333 138.333333333333,206.666666666667 160,210 181.666666666667,213.333333333333 205,123.333333333333 230,120 255,116.666666666667 280,186.666666666667 310,190 340,193.333333333333 396.666666666667,156.666666666667 410,140 423.333333333333,123.333333333333 393.333333333333,98.3333333333333 390,90"); 
var gmy2 = (StreamGeometry)StreamGeometry.Parse("M180,241.25L180,241.25 230,290 300,246.66667175293 330,160"); 

var gmy = (StreamGeometry)StreamGeometry.Parse(gmy1.ToString() + gmy2.ToString()); 

myPath.Data = gmy; 
// Add path shape to the UI. 
this.panel1.Children.Add(myPath); 

경로 정의 언어는 언어입니다. 하나 같이 사용하십시오. StreamGeometry.ToString()의 해석을 취소하면 경로 정의 언어 표현으로 돌아가는 Geometry이되며 다른 경로와 병합 할 수 있습니다.

이동 명령에 대해 각각 M으로 시작하기 때문에 이것이 작동한다는 점에 유의하십시오. 새 행이 시작됩니다. 나는 그렇지 않다 당신이 그 어떤 문제에 부딪치게 될 현실적인 사례가 있다고 생각한다. (그리고 그것은 Line을 위해서 L으로 시작할 수 없다.) 그러나 이론은 정확히 나의 가장 강한 주제는 아니다. 경로 문자열 합치 이상 일반

관련 문제