2012-08-03 8 views
5

저는 약간의 커브가있는 ZedGraphControl을 가지고 있으며 일부 고정 된 x 위치에 세로선을 추가하려고합니다. 라인은 물론 실제 그래프 영역 안에 있어야합니다.LineObj 문제가있는 ZedGraph 세로선

나는

LineObj line = new LineObj(Color.Black, xPos, myPane.YAxis.Scale.Min, xPos, myPane.YAxis.Scale.Max); 
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 
myPane.GraphObjList.Add(line); 

다음과 같은 노력이는 (또한 점선되지 않는 것을 알 수 아래 그림 링크를 참조 사용자가 그래프를 확대 할 때까지, 수직 라인이 다음 실제 그래프 영역에서 기지개 잘 작동 그래프 안쪽, 홀수).

http://imageshack.us/photo/my-images/196/zedgraphzoom.png/

또는이다 (단지 현재 줌의 myPane.Xaxis.Scale.Min 및 최대를 얻을 후 ZoomEvent에 그래프를 업데이트?하는 AA 방법이 있다면)이 문제를 해결하는 방법이 있나요 이 목적을 위해 LineObj 이외의 다른 클래스/메소드를 사용할 수 있습니까?

답변

2

대신 LineObj을 정의하는 LineItem을 정의하고 GraphPane.CurveList에 추가 : 당신은 확대 또는 line 위치합니다 이동 때 수 있도록이 그래프 창에서 좌표계를 line을 결합

LineItem line = new LineItem(String.Empty, new[] { xPos, xPos }, 
       new[] { myPane.YAxis.Scale.Min, myPane.YAxis.Scale.Max }, 
       Color.Black, SymbolType.None); 
line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 

myPane.CurveList.Add(line); 

여전히 그래프에만 국한되어있다. 물론 y 값을 line으로 업데이트하지 않고 축소하면 line 끝이 그래프 내부에있게됩니다.

저는 개인적인 경험을 통해 대시가 Zedgraph에서 문제가 될 수 있음을 알고 있습니다. 하지만 LineItem을 추가 할 때 대시가 제대로 표시되는 것처럼 보입니다.

+0

작품() afterwords는,이 경우는 하단에 여백을 추가 할 것입니다,하지만 난 당신이 라인을 추가하기 전에 그 전화를 필요로 모든 것을 할 수있는 것 같아요. 고맙습니다! – HischT

+2

한 가지 해결책은 보조 Y 축을 생성 한 다음 scale.max와 min을 0과 1 둘 다에 놓은 다음 두 점 (x, 0)과 (x, 1)을 사용하여 LineItem을 연결하는 것입니다. 이 방법은 다른 축과 독립적입니다. – Larry

2

CurveItem 대신 LineObj를 사용하는 것이 좋습니다.

Location 구조체와 CoordinateFrame 속성에 대해 살펴보십시오.

CoordinateFrameXScaleYChartFraction으로 설정하면 0d 및 1d를 Y로 사용할 수 있습니다. 즉, 그래프 창의 "맨 아래"및 "맨 위"를 의미합니다 (대신에 그래프 창의 상단 및 하단을 의미 함). Y는 X 축 좌표계를 계속 사용함에 따라 YAxis.Scale.Min 및 YAxis.Scale.Max)를 사용합니다.

즉, .AxisChange(), zoom, pan을 사용할 수 있으며 LineObj가 Y 축의 축척 변경을 방해하지 않는다는 의미입니다! 뿐만 아니라 당신이 zedGraphControl.AxisChange 전화 해달라고으로

var line = new LineObj(Color.Black, xPos, 0, xPos, 1); 

line.Location.CoordinateFrame = XScaleYChartFraction; // This do the trick ! 
line.IsClippedToChartRect = true; 

line.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash; 
line.Line.Width = 1f; 

myPane.GraphObjList.Add(line); 
+0

이것은 수직선이 개념적으로 데이터 곡선과 다르기 때문에 LineItem을 추가하는 것보다 더 나은 방법입니다. – ricovox

+0

내 퀘스트가 마침내 끝났습니다. – KDecker