Dear Steema,
Currently we are having a requirement wherein we need to do following:
1] Select Already Drawn TrendLine (DrawLine Tool)
2] On right click that line, it should show a Context Menu having menu items like "Line Properties", "Create Parallel Line"
3] On click of "Create Parallel Line" it should create identical line which should be placed at some distance and parallel to original line.
For your reference check following screenshot:
Any help on this would be greately appreciated.
Note: Prior to give help on above topic, please let us know a better approch to show context menu on right click of DrawLine tool ASAP.
Creating a Parallel Line
-
- Guru
- Posts: 1603
- Joined: Fri Nov 15, 2002 12:00 am
Re: Creating a Parallel Line
You can try:
Code: Select all
DrawLine tool;
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
tChart1.Series.Add(typeof(Points)).FillSampleValues(200);
tChart1.MouseClick += tChart1_MouseClick;
tool = new DrawLine(tChart1.Chart);
DrawLineItem l = new DrawLineItem(tool);
l.StartPos = new PointDouble(tChart1[0].XValues[50], tChart1[0].YValues[50]);
l.EndPos = new PointDouble(tChart1[0].XValues[100], tChart1[0].YValues[100]);
tool.Selected = l;
}
DrawLineItem item;
void tChart1_MouseClick(object sender, MouseEventArgs e)
{
if(e.Button == System.Windows.Forms.MouseButtons.Right)
{
item = tool.Clicked(e.X, e.Y);
if (item != null)
{
ContextMenu m = new ContextMenu();
m.MenuItems.Add(new MenuItem("Line Properties"));
m.MenuItems.Add(new MenuItem("Create Parallel Line"));
m.MenuItems[1].Click += SurfaceTest_Form_Click;
m.Show(tChart1, new Point(e.X, e.Y));
}
}
}
void SurfaceTest_Form_Click(object sender, EventArgs e)
{
DrawLineItem l = new DrawLineItem(tool);
l.StartPos = new PointDouble(item.StartPos.X, item.StartPos.Y + 100);
l.EndPos = new PointDouble(item.EndPos.X, item.EndPos.Y + 100);
tool.Invalidate();
}
Best Regards,
Christopher Ireland / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |
Re: Creating a Parallel Line
Thanks a lot for your prompt reply.
Re: Creating a Parallel Line
we are facing following problems with this work around
1) we cant sync the movement of both lines
2) change of angle in one line cant sync with other
we require some thing similar to HorizParallel and VertParallel but with slope angle change functionality with mouse.
1) we cant sync the movement of both lines
2) change of angle in one line cant sync with other
we require some thing similar to HorizParallel and VertParallel but with slope angle change functionality with mouse.
-
- Guru
- Posts: 1603
- Joined: Fri Nov 15, 2002 12:00 am
Re: Creating a Parallel Line
Maybe something like this:Quant wrote:we are facing following problems with this work around
1) we cant sync the movement of both lines
2) change of angle in one line cant sync with other
we require some thing similar to HorizParallel and VertParallel but with slope angle change functionality with mouse.
Code: Select all
DrawLine tool;
DrawLineItem item;
List<Tuple<DrawLineItem, DrawLineItem>> pairs = new List<Tuple<DrawLineItem, DrawLineItem>>();
private void InitializeChart()
{
tChart1.Aspect.View3D = false;
tChart1.Series.Add(typeof(Points)).FillSampleValues(200);
tChart1.MouseDown += TChart1_MouseDown;
tChart1.MouseMove += TChart1_MouseMove;
tool = new DrawLine(tChart1.Chart);
DrawLineItem l = new DrawLineItem(tool);
l.StartPos = new PointDouble(tChart1[0].XValues[50], tChart1[0].YValues[50]);
l.EndPos = new PointDouble(tChart1[0].XValues[100], tChart1[0].YValues[100]);
tool.Selected = l;
}
private void TChart1_MouseDown(object sender, MouseEventArgs e)
{
item = tool.Clicked(e.X, e.Y);
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
if (item != null)
{
ContextMenu m = new ContextMenu();
m.MenuItems.Add(new MenuItem("Line Properties"));
m.MenuItems.Add(new MenuItem("Create Parallel Line"));
m.MenuItems[1].Click += SurfaceTest_Form_Click;
m.Show(tChart1, new Point(e.X, e.Y));
}
}
}
private void TChart1_MouseMove(object sender, MouseEventArgs e)
{
if(pairs.Count > 0 && item != null && item.Tag != null)
{
Tuple<int, int> tag = (Tuple<int, int>)item.Tag;
Tuple<DrawLineItem, DrawLineItem> pair = pairs[tag.Item1];
DrawLineItem partner = tag.Item2 == 0 ? pair.Item2 : pair.Item1;
if(tag.Item2 == 0)
{
partner.StartPos = new PointDouble(item.StartPos.X, item.StartPos.Y + 100);
partner.EndPos = new PointDouble(item.EndPos.X, item.EndPos.Y + 100);
}
else
{
partner.StartPos = new PointDouble(item.StartPos.X, item.StartPos.Y - 100);
partner.EndPos = new PointDouble(item.EndPos.X, item.EndPos.Y - 100);
}
tool.Invalidate();
}
}
void SurfaceTest_Form_Click(object sender, EventArgs e)
{
DrawLineItem l = new DrawLineItem(tool);
l.StartPos = new PointDouble(item.StartPos.X, item.StartPos.Y + 100);
l.EndPos = new PointDouble(item.EndPos.X, item.EndPos.Y + 100);
pairs.Add(new Tuple<DrawLineItem, DrawLineItem>(item, l));
item.Tag = new Tuple<int, int>(pairs.Count - 1, 0);
l.Tag = new Tuple<int, int>(pairs.Count - 1, 1);
tool.Invalidate();
}
Best Regards,
Christopher Ireland / Development & Support Steema Software Avinguda Montilivi 33, 17003 Girona, Catalonia Tel: 34 972 218 797 http://www.steema.com |
Instructions - How to post in this forum |