Bonehead problem... links don't show


#1

Apologies for the trivial nature of my problem… I’m sure I’m missing something simple.
I’m trying to create a view with two nodes (GoBasicNode) and a link (GoLink) between them. The nodes display properly, but I can’t get the link to show. I’m using the demo version of Express for .NET.
After creating the nodes, I create a port on each of them, create a new link, and set the FromPort and ToPort properties on the link. What else do I need to do to get the link to display?
Thanks for any help…


#2

Are you adding the link to the document? I think, more specificially, you should add the link to the LinkLayer of the document. Then it’ll show up.


#3

I tried the following:
1. myView.Document.Add(link);
2. myView.Document.LinksLayer.Add(link)
3. myView.CreateLink(port1, port2)
All with the same results… no link visible. I also set the pen and brush for the link, no joy there either. The code follows (from the ctor of the view)
InitializeComponent();
_miisInstance = new CMIISInstance(“name”, “server1.research.home.netpro.com”);
this.Text = “test View”;
GoView myView = new GoView();
myView.Dock = DockStyle.Fill;
this.Controls.Add(myView);
CMIISNode miisNode = new CMIISNode(_miisInstance);
miisNode.Location = new PointF(myView.Right/2, myView.Bottom/2);
myView.Document.Add(miisNode);
double radAngle = 0;
double radIncr = (2*Math.PI)/_miisInstance.get_NMAs();
float scale = (Math.Min(myView.Right, myView.Bottom)/2) - Math.Max(miisNode.Width, miisNode.Height);
for(int i = 0; i < _miisInstance.get_NMAs(); i++)
{
CMANode maNode = new CMANode(_miisInstance.get_MAs());
maNode.Location = new PointF(miisNode.Location.X + (float)Math.Sin(radAngle)*scale, miisNode.Location.Y + (float)Math.Cos(radAngle)*scale);
maNode.Label.Editable = false; // second node is editable by clicking only
maNode.Brush = Brushes.Magenta;
myView.Document.Add(maNode);
GoPort port1 = maNode.CreatePort();
GoPort port2 = miisNode.CreatePort();
GoLink link = new GoLink();
link.FromPort = port1;
link.ToPort = port2;
myView.Document.Add(link);

radAngle += radIncr;
}
}


#4

My only guess at this point would be to make sure that those ports that are getting created with calls to “CreatePort()” are actually getting added to their respective nodes. Other than that it looks fine to me.


#5

I believe “dhayes” is on the right path to identifying the problem: you have created new ports (by the calls to CreatePort()), but you haven’t added those ports to any node or added them to any document.
GoBasicNode automatically calls CreatePort for you (the method is there primarily for convenience in overriding, which is why it is protected–did you make it public in your subclass?). So the node will already have a port, which you can access via the Port property on the node.
So you just need to do something like:
myView.CreateLink(maNode.Port, miisNode.Port);
instead of the six lines starting with a call to CreatePort().