2010-03-12 4 views
4

"M 0 0 l 10 10"과 같은 경로 데이터를 변환하는 도구가 있다면 해당 선/곡선 세그먼트 코드가 궁금합니다. 현재 내가 사용WPF, 세그먼트 개체로 Path.DataProperty 변환

는 :

string pathXaml = "<Path xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" Data=\"M 0 0 l 10 10\"/>"; 
Path path = (Path)System.Windows.Markup.XamlReader.Load(pathXaml); 

이 XamlParser를 호출하면 명시 적으로 선 세그먼트를 만드는 것보다 훨씬 느립니다 나에게 나타납니다. 그러나 손으로 많은 경로를 변환하는 것은 매우 지루합니다.

답변

1

가 내장 된 형상 minilanguage에서 C# 또는 VB 코드를 생성 할 것도 없지만 다음과 같이 하나를 만들 수 있습니다하십시오 PathGeometry을 새로운이 - 보내고에 대한

  • 방출 C# 또는 VB 코드를.
  • 경로 문자열의 PathFigureCollection.Parse으로 전화하십시오. 이렇게하면 PathFigureCollection 인스턴스가 반환됩니다.
  • PathFigureCollection을 반복합니다. 각 그림 :
    • PathFigure 개체를 새로 고치고 PathGeometry.Figures 컬렉션에 추가하는 C# 또는 VB 코드를 작성합니다.
    • 그림의 세그먼트 컬렉션을 반복합니다. 각 세그먼트에 대해 유형을 분석하고 적절한 종류의 PathSegment를 새로 작성하고 속성을 설정하고 현재 PathFigure에 추가하기 위해 유형 종속 코드를 내 보냅니다. 이 다소 지루한 손으로 경로를 변환보다 여부

은 아마 당신이 처리 할 필요가 세그먼트의 얼마나 많은 다른 종류에 따라 달라집니다 ...하지만, 단지 당신이 결정할 수있는 일이다 (즉, 방법 당신이 등 LineSegments, ArcSegments에 대해 별도의 코드를 작성해야하기 때문에 세그먼트의 많은 다른 종류의) 경로 문자열에 표시

편집 : PathFigureCollection에 내 관심을 그림으로써 원래의 대답을 단순화 주석 Anvaka 덕분에 . 변환 할 것

+0

안녕 itowlson, 그것은 보인다. 대신 * Geometry.Parse() * 메소드를 사용하도록 제안 할 수 있습니다. XamlReader보다 빠릅니다. BTW, 귀하의 시나리오에서 변환기를 생략하고 * PathFigureCollection.Parse() * :)를 사용할 수도 있습니다 ... 나는 여전히 귀하의 대답이 맞다고 생각합니다. – Anvaka

+0

Anvaka : 소년, 내 얼굴이 붉어. 나는 그 방법들이 공개적이라는 것을 알지조차 못했다. 나는 그들에게 접근하는 유일한 방법은 변환기를 통한 것이라고 생각했다. 나는 갱신 할 것이다 - 많은 감사! (XamlReader 대 문자열 파싱에 관해서는 그가 쓰는 동안 그가 질문을 편집 한 것처럼 보입니다. 원래 버전에서는 코드의 문자열에서 Path 속성을 직접 설정했습니다.) – itowlson

+0

모든 답변을 주셔서 감사합니다. 예. 편집했습니다. 질문, 내 프로그램의 코드 sligthly 다르지만 아이디어는 동일합니다. 제안 된 최적화를 구현하겠습니다. – user275587

관련 문제