This is MiscCoordAdditions.m in view mode; [Download] [Up]
// Copyright (c) 1997 Todd Anthony Nathan All Rights Reserved.
//
// Created: Sun Mar 9 02:16:13 GMT-0600 1997
// By: Todd Anthony Nathan
//
// You are free to do as you see fit with this software. The author
// doesn't make any implied or non-implied guarentees to the fitness
// of the software. Use it at your own risk.
///
#import <MiscAppKit/MiscCoordAdditions.h>
@implementation MiscCoord (MiscCoordAdditions)
// Simply replace the contents of one point with the supplied
- replacePoint:(NSPoint *)newPoint at:(int)index
{
double x, y, z;
int lastSlot;
x = newPoint->x;
y = newPoint->y;
z = 0.0;
// Expand point collection if necessary
lastSlot = [self numPoints] - 1;
if ( index > lastSlot ) {
[self selectAndSetNumPoints:0 blockSize:(index + 1)];
}
[self selectExistingPoints:index blockSize:1];
[self setCoord:x :y :z];
return ( self );
}
// Expand the array by one, then move every
// point from index up one slot. Then fill
// in the new slot.
///
- insertPoint:(NSPoint *)newPoint at:(int)index
{
int orig, dest;
double x, y, z;
int lastSlot;
int mySize;
mySize = [self numPoints];
lastSlot = mySize - 1;
[self selectAndSetNumPoints:0 blockSize:(mySize + 1)];
// Move the values up...
for ( orig = lastSlot, dest = lastSlot + 1; orig >= index; orig--, dest-- ) {
[self selectExistingPoints:orig blockSize:1];
[self coord:&x :&y :&z];
[self selectExistingPoints:dest blockSize:1];
[self setCoord:x :y :z];
}
[self replacePoint:newPoint at:index];
return ( self );
}
// Add it to the beginning
- prependPoint:(NSPoint *)newPoint
{
[self insertPoint:(NSPoint *)newPoint at:0];
return ( self );
}
// Add it to the end
- appendPoint:(NSPoint *)newPoint
{
[self insertPoint:(NSPoint *)newPoint at:[self numPoints]];
return ( self );
}
- swapPointsAt:(int)pointA :(int)pointB
{
double ptAX, ptAY, ptAZ;
double ptBX, ptBY, ptBZ;
int mySize, lastSlot;
if ( pointA != pointB && pointA >= 0 && pointB >= 0 ) {
mySize = [self numPoints];
lastSlot = mySize - 1;
if ( MAX(pointA, pointB) > lastSlot ) {
[self selectAndSetNumPoints:0 blockSize:mySize + 1];
}
[self selectExistingPoints:pointA blockSize:1];
[self coord:&ptAX :&ptAY :&ptAZ];
[self selectExistingPoints:pointB blockSize:1];
[self coord:&ptBX :&ptBY :&ptBZ];
[self selectExistingPoints:pointB blockSize:1];
[self setCoord:ptAX :ptAY :ptAZ];
[self selectExistingPoints:pointA blockSize:1];
[self setCoord:ptBX :ptBY :ptBZ];
}
return ( self );
}
// Reverse the values of the points
- reverse
{
int low, high;
for ( low = 0, high = [self numPoints] - 1; low < high; low++, high-- ) {
[self swapPointsAt:low :high];
}
return ( self );
}
- dumpPoints
{
int index;
double x, y, z;
for ( index = 0; index < [self numPoints]; index++ ) {
[self selectExistingPoints:index blockSize:1];
[self coord:&x :&y :&z];
printf("Point at %4d: x = %.2f, y = %.2f, z = %.2f\n", index, x, y, z);
}
return ( self );
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.