---------------------------------------
#region Override Selection Logic
public override bool IsMarqueeSelection(PInputEventArgs e)
{
if (Convert.ToString(camera.Canvas.Tag).ToLower() == "design")
{
return base.IsMarqueeSelection(e);
}
else
{
return (pressNode == null);
}
}
protected override void InitializeSelection(PInputEventArgs e)
{
if (Convert.ToString(camera.Canvas.Tag).ToLower() == "design")
{
base.InitializeSelection(e);
}
else
{
if (IsAltKeyPressed(e)) intersectionSelection(e);
else minAreaSelection(e);
}
}
#region private additions
private bool IsAltKeyPressed(PInputEventArgs e)
{
return (e.Modifiers & Keys.Alt) == Keys.Alt;
}
private void minAreaSelection(PInputEventArgs e)
{
try
{
float area = float.MaxValue;
PNode nd = e.Path.PickedNode;
PNode orig = nd;
while (nd != null)
{
float a1 = nd.Bounds.Width * nd.Bounds.Height;
if (a1 < area)
{
pressNode = nd;
area = a1;
}
nd = e.Path.NextPickedNode;
}
if (pressNode is PCamera) { pressNode = null; }
if (pressNode == null)
{
if (orig != null) pressNode = orig;
}
}
catch { }
}
private void intersectionSelection(PInputEventArgs e)
{
try
{
// compare after scaling to camera's scale
PointF pf = camera.ViewToLocal(e.Position);
PNode origPicked = e.Path.PickedNode;
pressNode = origPicked;
while (pressNode != null)
{
if (pressNode.IsVisible(camera, pf)) break;
pressNode = e.Path.NextPickedNode;
}
if (pressNode is PCamera) { pressNode = null; }
if (pressNode == null)
{
if (origPicked != null) pressNode = origPicked;
}
}
catch { }
}
#endregion
protected override void StartStandardSelection(PInputEventArgs e)
{
if (Convert.ToString(camera.Canvas.Tag).ToLower() == "design")
{
base.StartStandardSelection(e);
}
else
{
// Option indicator not down - clear selection, and start fresh
if (!IsSelected(pressNode))
{
UnselectAll();
if (IsSelectable(pressNode))
{
Select(pressNode);
}
}
}
}
protected override void StartStandardOptionSelection(PInputEventArgs e)
{
if (Convert.ToString(camera.Canvas.Tag).ToLower() == "design")
{
base.StartStandardOptionSelection(e);
}
else
{
// Option indicator is down, toggle selection
if (IsSelectable(pressNode))
{
if (IsSelected(pressNode))
{
Unselect(pressNode);
}
else
{
Select(pressNode);
}
}
}
}
protected override void EndStandardSelection(PInputEventArgs e)
{
if (Convert.ToString(camera.Canvas.Tag).ToLower() == "design")
{
base.EndStandardSelection(e);
}
else
{
pressNode = null;
}
}
#endregion
---------------------------------------