전체 소스 올려봅니다.
정답을 의미하는 소스는 아니며 아래 코드를 참조하여 응용하여 개발하시기 바랍니다.
위치를 잡아내는 코드가 다소 복잡하지만 정형화된 코드라 한 번 작성해보시면 이해가 되실 겁니다.
(차트내의 포인트는 상대 값이고 드래그의 포인트는 윈도우 스크린의 절대 값이라 그것을 정리하는 코드라고 할 수 있습니다)
드래그를 하면 해당 영역이 확대되고
더블클릭을 하면 원래 상태로 돌아오는 코드입니다.
private void Form1_Load(object sender, EventArgs e)
{
Draw2();
}
private void Draw2()
{
SeriesList sList = new SeriesList();
sList.ChartType = ChartType.Line;
sList.AxisFactor.XAxis.DataType = AxisDataType.Number;
Random r = new Random();
for (int i = 0; i < 1; i++)
{
Series sr = new Series();
sr.Column.DesignType = AreaDesignType.Gradation;
sr.Line.LineWidth = 5;
for (int x = 0; x < 20; x++)
{
SeriesItem item = new SeriesItem();
item.Name = x.ToString();
item.XValue = x;
item.YValue = r.Next(200);
sr.items.Add(item);
}
sList.SeriesCollection.Add(sr);
}
this.hHippoChart1.SeriesListDictionary.Add(sList);
this.hHippoChart1.DrawChart();
}
private void hHippoChart1_ChartMouseDrag(object sender, EventArgs e)
{
// 마우스로 드래그할 때 발생
}
private void hHippoChart1_ChartMouseMove(object sender, MouseEventArgs e)
{
rec = this.hHippoChart1.DragRectangle;
}
private void hHippoChart1_ChartMouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
SeriesItemCollection items =this.hHippoChart1.SeriesListDictionary[0].SeriesCollection[0].items;
double zeroX = this.hHippoChart1.SeriesListDictionary[0].AxisFactor.Zero.X;
double zeroY = this.hHippoChart1.SeriesListDictionary[0].AxisFactor.Zero.Y;
double maxvalue = double.MinValue;
double minvalue = double.MaxValue;
bool ret = false;
double recnewX = zeroX + ( rec.Left - this.Location.X - this.hHippoChart1.Location.X);
double recnewY = zeroY - ( rec.Top - this.Location.Y - this.hHippoChart1.Location.Y);
foreach (SeriesItem item in items)
{
if (item.FigurePoint.X > recnewX && item.FigurePoint.X < recnewX + rec.Width &&
item.FigurePoint.Y > recnewY && item.FigurePoint.Y < recnewY + rec.Height
)
{
if (item.XValue >= maxvalue)
{
maxvalue = item.XValue;
}
if (item.XValue <= minvalue)
{
minvalue = item.XValue;
}
ret = true;
}
}
if (ret)
{
this.hHippoChart1.SeriesListDictionary[0].AxisFactor.XAxis.SetAxisStep(minvalue, maxvalue,1);
//this.hHippoChart1.SeriesListDictionary[0].AxisFactor.YAxis.SetAxisStep(minvalue, maxvalue, this.hHippoChart1.SeriesListDictionary[0].AxisFactor.YAxis.Interval);
this.hHippoChart1.DrawChart();
}
}
}
private void hHippoChart1_ChartDoubleClick(object sender, EventArgs e)
{
this.hHippoChart1.SeriesListDictionary[0].AxisFactor.XAxis.IsAutoSetting = true;
//this.hHippoChart1.SeriesListDictionary[0].AxisFactor.YAxis.SetAxisStep(minvalue, maxvalue, this.hHippoChart1.SeriesListDictionary[0].AxisFactor.YAxis.Interval);
this.hHippoChart1.DrawChart();
}
'히포차트4 > 개발 강좌' 카테고리의 다른 글
Hippochart를 WPF 윈도우 어플리케이션에 추가해보자. (0) | 2013.05.28 |
---|---|
jQuery를 사용하여 JSON 타입의 데이터로 히포차트 그리기 (1) | 2013.05.25 |
히포차트를 asp.net MVC 어플리케이션에 추가해보자! (0) | 2013.05.24 |
히포차트로 대용량 데이터를 비동기 방식으로 그려보자 (0) | 2013.05.21 |
히포차트4 - 마우스 드래그 이벤트 잡기 (Zoom 기능 응용) (1) (0) | 2013.02.12 |