timburks / nugraphdraw forked from jsyedidia/nugraphdraw

A graph drawing application. An example PyObjC application re-written in Nu. Original by Aaron Hillegass, ported to Nu by Jonathan Yedidia.

This URL has Read+Write access

timburks (author)
Sat May 31 15:37:34 -0700 2008
commit  b025b69798f8b7ac44ac3689e69faac92d2c3785
tree    ad99900928dd6dd16e51fcdca75b774a1403d582
parent  d27c3a6fcebe8cdcaaeb3686cb1309a59c508bd5 parent  a2311c3fc27ba4e5ce629d4cc7c69678e26d01be
name age message
file .gitignore Loading commit data...
directory GraphDraw_Mixed/
directory GraphDraw_Nu/
file README
README
NuGraphDraw

Jonathan Yedidia, May 31, 2008.

This project is a port from PyObjC to Nu, with enhancements, of Aaron Hillegass' 
"GraphLaughs" application. 

Pre-requisites are Mac OS X Leopard and the Nu programming language, developed by
Tim Burks and available at http://programming.nu. Build this application in XCode.

"GraphLaughs" was described in the June 8, 2006 post of the Big Nerd Ranch weblog
at http://weblog.bignerdranch.com. You can download the source at
http://weblog.bignerdranch.com/pythonex/GraphLaughs.tgz.

This type of application shows off some of the advantages of a dynamic language like Nu.
One can let the user extend the application at run-time with his own scripts.

Aaron wrote that "The Python bridge (PyObjC) is still a bit mysterious to me, 
but I can see that they have done a great job leveraging the dynamic nature of 
both languages to make it easy to work with."

I believe the Nu version is a significant improvement over the PyObjC version.
Nu and Objective-C can inter-operate in a completely seamless way, and there are
no mysteries, because Nu was designed from the start to work with Cocoa and Objective-C.

There are two versions of the application here. GraphDraw_Mixed is a mixed Nu and
objective-C application, which demonstrates how Objective-C and Nu classes can
be included in the same application, and inter-operate. This version is closer
to Hillegass' original. 

GraphDraw_Nu, on the other hand, is written completely in Nu. I've also added
some hooks for you to use in the Nu console (or the textView where you put
your scripts.) You can call up the console with command-L. You can access the view 
with the global variable $view or access the graph with the global variable $graph. 
You can change the colors of the nodes, edges, or background, or change the size of 
the nodes or the width of the edges. 

For example, try this in the Nu console, after evaluating the initial script:
($view setNodeSize:20)
($view setEdgeColor:(NSColor greenColor))

The defaults, which can be found in main.nu, are:
edgeColor: (NSColor whiteColor)
nodeColor: (NSColor redColor)
backgroundColor: (NSColor darkGrayColor)
edgeWidth: 0.9
nodeSize: 6

Of course, it's even more fun to change the graph by re-writing the default script.
Try changing some of the "magic numbers" like one or both of the 180's, the 300, or the 10.

If you are interested in seeing more Cocoa applications written in Nu, go to the
the git repository at
git://github.com/timburks/cocoa-programming-with-nu.git, or look at other examples
posted by Tim Burks at github.com or the examples that come bundled with Nu.


TODO:
Parens-matching in the scriptTextView.
Better descriptions of script errors.

If you are interested in fixing these problems, or otherwise improving the application,
please fork the repository, then improve it, and then send me a pull request.

Thanks,
Jonathan Yedidia