This is TreeCoord.m in view mode; [Download] [Up]
/* TreeCoord.m Copyright 1992 Steve Ludtke All Rights Reserved */ /* This object will distribute the branches as "Trees" All branches*/ /* are at a 45 degree angle to the z (up/down) axis. Branches */ /* become shorter as we move higher in the tree. */ #import "TreeCoord.h" #import <math.h> #import <libc.h> float frand(float lo, float hi); @implementation TreeCoord /* useful pointers */ - start: (Root *) Ptop: Pobject:(char *)path { object = Pobject; return self; } /* set the coordinates of the passed branch */ - setCoord:(Branch *) branch { unsigned char *adr; float r, m; /* Root Branch, set position based on address */ if (branch->prev == NULL) { adr = (unsigned char *)&branch->root->addr; branch->z = 1.5; branch->x = adr[0] * 256 + adr[2] + (branch->root->port & 255); branch->y = adr[1] * 256 + adr[3] + ((branch->root->port >> 8) & 255); return self; } /* if this is a link, this branch should point towards its destination */ if (branch->link != NULL) r = atan2(branch->link->y - branch->prev->y, branch->link->x - branch->prev->x); else r = frand(0, M_PI * 2.0); /* not a link, random direction */ m = 1.5 / (float)branch->level; /* m==scaling factor r==azimuthal angle */ branch->x = branch->prev->x + cos(r) * m; branch->y = branch->prev->y + sin(r) * m; branch->z = branch->prev->z + m; return self; } /* be helpful */ - (char *)help:window :browser { return ("TreeCoord - Steve Ludtke May 1992\n\nThis is the original view of gopherspace. Each site is drawn as a tree (branches get smaller the higher you go)\n"); } /* no prefs yet */ - preferences:sender { return self; } @end /* return a random float between lo and hi */ float frand(float lo, float hi) { return (((float)random() / (float)MAXINT) * (hi - lo) + lo); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.