This is TransformController.m in view mode; [Download] [Up]
/* TransformController.m - Determine current transformation. * Copyright (C) 1993 Corona Design, Inc. All rights reserved. * * Abstract * Encapsulates the interface for specifying viewing angle. This is * done via CircularSliders specifying Latitude and Longitude. * * RCS path: * $Source: /Users/pkron/Projects/voxel/Pyramid/RCS/TransformController.m,v $ * Modified: $Date: 93/09/15 12:35:26 $ by $Author: pkron $ * Current State: $State: Exp $ locked by $Locker: $ */ #import "TransformController.h" #import "standard.h" // add some trigononmetry to standard Controls @implementation Control( radians) #define PI 3.1415926536 #define RAD(degrees) ((degrees)/180.*PI) - (float)radiansValue { return( RAD( [self floatValue])); } - (float)cosValue { return( cos( [self radiansValue])); } - (float)sinValue { return( sin( [self radiansValue])); } @end @implementation TransformController - init { [super init]; transform = allocIdentity(); return( self); } #define DISTANCE ([distance floatValue]+1) - (MATRIX)transform { POINT aPoint; POINT up; float cosLatitude = [latitude cosValue]; // compute normal from latitude/longitude // vector has length 1 and is normal to // viewing plane aPoint[2] = [latitude sinValue]; aPoint[0] = cosLatitude * [longitude cosValue]; aPoint[1] = cosLatitude * [longitude sinValue]; aPoint[3] = 0; // define UP. Note it must change as the // viewing angle gets upside-down up[0] = 0; up[1] = 0; up[2] = cosLatitude GE 0 ? 1 : -1; up[3] = 0; // create a new matrix with this setting freeMatrix( transform); transform = allocIdentity(); orient( transform, &aPoint, &up); viewDistance( transform, DISTANCE); return( transform); } @end #ifdef _LOG /* * $Log: TransformController.m,v $ Revision 1.1 93/09/15 12:35:26 pkron Created. */ #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.