Question from Potential Customer


I am currently evaluating your product but I have some questions that need to be clarified before deciding. Does the GoDiagram Express package allow you to view the source code for the dll? And would there be a yearly charge for the license or would it be a one-time payment? And would we need to buy a license for every person that might every use your product after we buy it? Thanks!


I believe the answers are:
= source code is not available for Express; it is only available as an option for Win or Web
= there is a one-time license payment but you can develop with that assembly forever. If you purchase a support/subscription you also get email support and free updates for a year, which can be renewed yearly at a discounted rate.
= you don’t need to buy a license for each person who uses it, but you do for each development machine. Or to put it another way, there are no run-time royalties or deployment fees, but there is a development machine license fee.


ok - that makes sense. The reason I was asking about the source code is that we will probably need to add additional functionality to what you already provide in order to completely meet our goals. We are interested in your product as a time saver. Let me ask you this, would the source code be read only or would we be able to make slight modifications according to our needs?


Our goal, of course, is to have a design that is so elegant and powerful and flexible and bug-free that no source code changes would be necessary. The times when people ask for features that require source code changes are increasingly rare these days.
But we know that it can still happen, so our source code license does allow for making whatever modifications you like and then distributing the resulting binaries in a royalty-free manner, much like our regular binary development license does. Of course we don’t permit you to distribute any part (or all) of the source code.
What feature(s) are you considering? As you can see from this forum, practically everything that people want can be implemented by using GoDiagram as-is. Almost all of the new features that we introduce in each release are actually things that users could have implemented themselves (and that some probably did). However we add them to make them easy to use for everyone, since not everyone has the time and/or interest to actually implement everything. It is not our primary goal to have the smallest DLL or simplest API, although we do try to design everything to be reasonably simple to learn and to use.


Well for one thing, we need to be able to create multiple links between two nodes and it doesn’t look like GoDiagram provides to capability to do that from what I have been reading in your User Guide. In addition to creating multiple links between two nodes, we also need to have the functionality to merge those links into one link. So essentially there will be a parent link and you can either view just the parent link or you can break it apart to view all the child links that make up the parent link.


The StateCharter sample lets you create multiple links between the same pair of nodes, in either direction, and also reflexive links. You’ll note how it automatically sets the Curviness property so that the Bezier curves have different paths.
Regarding “merging” links: what people usually do is to have a single link, typically with a wide Pen, that they replace with all of the individual links on command, or vice-versa. That replacement can be done either visually, by setting the GoObject.Visible property, or logically, by removing and adding links to the document. The former method is probably easier, but does require that your graph traversal code has to recognize the different kinds of links.


The more I delve into what your product can provide, the more I am impressed and excited about how this could help us in our project. I am working on creating a user interface for a water resource management program designed by civil engineers to optimize and predic future events based on current information. We use nodes and links to graphically show the relationships between reservoirs and consumers such as farmers and industry.
We want to create a user interface that is impressive and more dynamic then the current interface. It looks like your tool can help us to spend more time customizing the look and feel then trying to figure out how to do the most basic operations. So we are very interested at this point but I have a couple other questions.
One of our dreams is to be able to georeference the nodes in the program to real coordinate locations in the real-world. Our ideal program would allow us to load a picture of the real-world location in the background and then position the nodes in the appropriate locations. It looks like we could do this using the layers that your program provides - but would we be able to supply another coordinate system based on real-world numbers? Or is there some way to link the current coordinate system with another coordinate system and have your program keep track of both coordinates?


You could either use GoView.BackgroundImage, or you could create one (or more?) GoImage objects with the picture(s) you need and add them to a separate GoLayer that is in the background. In the latter case you can also set various properties on the GoLayer, such as AllowSelect, to be false.
GoDiagram only deals with two coordinate systems: view and document. The former is the pixel-oriented client coordinate system provided by Windows Forms for each Control. The latter is a coordinate system which has units that happen to equal pixels at a scale of 1.0.
GoDiagram intentionally avoids having additional coordinate systems, such as user-defined “real-world” units, or such as nested coordinate systems for groups. This results in a system that is simpler and easier to learn. In programming window systems I always found dealing with the various coordinate systems confusing. It’s even more confusing when you have diagramming controls which use nested coordinate systems, where some objects need to use one system for one purpose and different ones for other purposes.
It might not be quite as convenient in some cases. But if your coordinates aren’t simple scaling/translations, as might be the case if you have a map of the world and your coordinates are in latitude/longitude, you would need to implement the coordinate transforms yourself anyway.
By the way, have you looked at the GoDocument.ValidCycle property? Or, more generally, at the GoPort.IsValidLink predicate and the GoPort.IsValid… properties? Some might be relevant to your project.


What functionality are you referring to exactly? I have been reading the User Guide and although I remember reading about GoPort.IsValidLink, I don’t remember GoDocument.ValidCycle. Would you mind being more specific about how you think that could help our project? Thanks for the assistance.


I was just mentioning GoDocument.ValidCycle in case you wanted to control whether users could draw cyclic graphs.
The StateCharter sample sets GoPort.IsValidDuplicateLinks to true to allow the functionality you want.
You might also be interested in GoPort.IsValidSelfNode, if you want to allow users to draw links whose FromNode and ToNode are the same node.


I see, actual our model handles cyclic information in a written format rather than in the user interface. The GUI is used mainly to establish the relationships between water sources and demands. Then when we click on a node it brings up a dialog box which is where cyclic information is handled.
Another question - is it possible to allow the user to change the font name, size, color, style etc. of a comment? I don’t remember seeing a feature like this shown in any of the sample applications or discussed in the user guide.


GoComment.Label is a GoText, whose properties you can set, such as (GoText.)FamilyName, FontSize, TextColor, Bold, etc.