Automatically activate CreateConnectionTool when mouse it is 'near' a port


Automatically activate CreateConnectionTool when mouse it is 'near' a...
Author
Message
Luciano Cavallero
Luciano Cavallero
Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)
Group: Forum Members
Posts: 2, Visits: 7
Hi All,

I need to realize this simple behaviour in my Nevron Diagram Winform application but I don't know how to do it
(I write this topic after I have not found any in the forum):

My app start with the Selector Tool enabled: I would like that when the mouse cursors is 'near' a any port of a 2D shape the view automatically
activate the Connector Creato Tool (so i can start to create connection without manual selecting the right tool from the toolbar) then and go back to the Selector Tool if the mouse cursor go away from the port location.

I'm able to activate the Connector Tool, but I don't know to raise and 'event' to signal me that I'm 'near' a port (is this is the right way)

Anyone can suggest me if it is possible to solve my proble and how?

Thanks
Luciano Cavallero


Nevron Support
Nevron Support
Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)
Group: Administrators
Posts: 3.1K, Visits: 4.2K
Hi Luciano,

Following is a code sample that implements similar behavior:

...
view.MouseMove += new MouseEventHandler(view_MouseMove);
...


void view_MouseMove(object sender, MouseEventArgs e)
{
   // create connector tool already activated - do nothing
   if (view.Controller.Tools.GetToolByName(NDWFR.ToolCreateConnector).IsActive)
      return;

   // determine whether there is a port neard the current mouse position.
   // this implementation considers near to be 10 pixels
   NPointF mouseInClient = new NPointF(e.X, e.Y);
   bool hasPortNearMouse = false;
   NRectangleF window = view.Window;

   foreach (NPort port in document.Descendants(Nevron.Diagram.Filters.NFilters.TypeNPort, -1))
   {
      NPointF portInClient = view.SceneToDevice.TransformPoint(port.Location);
      if (window.Contains(portInClient) == false)
         continue;

      if (NGeometry2D.PointsDistance(portInClient, mouseInClient) < 10)
      {
         hasPortNearMouse = true;
         break;
      }
   }

   // enable the create connector tool or the pointer tool
   if (hasPortNearMouse)
   {
      view.Controller.Tools.SingleEnableTool(NDWFR.ToolCreateConnector);
   }
   else
   {
      string[] toolNames = new string[] {   
                               NDWFR.ToolCreateGuideline,
                               NDWFR.ToolHandle,
                               NDWFR.ToolMove,
                               NDWFR.ToolSelector,
                               NDWFR.ToolContextMenu,
                               NDWFR.ToolKeyboard,
                               NDWFR.ToolInplaceEdit,
                               NDWFR.ToolMouseEventDelegator
                            };

      view.Controller.Tools.SingleEnableTools(toolNames);
   }
}



Best Regards,
Nevron Support Team


Luciano Cavallero
Luciano Cavallero
Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)Forum Newbie (2 reputation)
Group: Forum Members
Posts: 2, Visits: 7
Hi Support Team

your code is exaclty what I need.
It work correclty.

Thank you very much!!!!!

Best regards,

Luciano Cavallero
Wilhelm Vortisch
Wilhelm Vortisch
Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)
Group: Forum Members
Posts: 14, Visits: 1
Hi Luciano,

the solution is very usefull, but in which assambly you have found "NGeometry2D"?

I use the last Version of Nevron components coming with Nevron Diagram for .Net 2010 Volume 1.

Regards

Wilhelm
Nevron Support
Nevron Support
Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)
Group: Administrators
Posts: 3.1K, Visits: 4.2K

Hi Wilhelm,

"NGeometry2D" is a static class located in the namespace "Nevron.GraphicsCore" of the assembly "Nevron.Presentation.dll".



Best Regards,
Nevron Support Team


Wilhelm Vortisch
Wilhelm Vortisch
Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)
Group: Forum Members
Posts: 14, Visits: 1
Hi Nevron Support,

in assembly "Nevron.Presentation.dll" I can't find the static class "NGeometry2D" located in the namespace "Nevron.GraphicsCore". (I have searched in the whole assembly, too ....)

I have installed the latest version "Nevron .NET Vision 2010 Vol.1 for Visual Studio 2010 (build version: 11.1.17.12)" from your web site downloaded yesterday.

By the way: In which way differs the "sub version" (or "builds") of the main "Nevron .NET Vision 2010 Vol.1 for Visual Studio 2010"?
And where can I determine the real version of used Nevron lib? (in "software" tab in the control center of windows xp I can only read about the main version "10.1.0000" ...)

Regards

Wilhelm
Nevron Support
Nevron Support
Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)Supreme Being (4.5K reputation)
Group: Administrators
Posts: 3.1K, Visits: 4.2K

Hi Wilhelm,

It appears that the obfuscator we use has renamed the "NGeometry2D" class in the release build. We’ll fix this for the next release. Until then, here’s the source code of the method you need:

 

/// <summary>

/// Obtains the distance between the specified points.

/// </summary>

/// <param name="pt1"></param>

/// <param name="pt2"></param>

/// <returns></returns>

public static float PointsDistance(NPointF pt1, NPointF pt2)

{

      float dx = pt1.X - pt2.X;

      float dy = pt1.Y - pt2.Y;

      return (float)Math.Sqrt(dx * dx + dy * dy);

}



Best Regards,
Nevron Support Team


Wilhelm Vortisch
Wilhelm Vortisch
Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)Junior Member (14 reputation)
Group: Forum Members
Posts: 14, Visits: 1
Hi Nevron Support,

thanks for the workaround, this works for the moment (until the next release ...).

Regards

Wilhelm


GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search