This is SimpleCamera.m in view mode; [Download] [Up]
// Some portions of this code are Copyright 1992 Thomas A. Dilligan // All Rights Reserved // // For best results, set tabstop=4 #import "SimpleCamera.h" //This code Shamelessly pinched from Simple.app and then heavily modified. @implementation SimpleCamera - initFrame:(const NXRect *) theRect { RtPoint fromP = {0,0,5.0}, toP = {0,0,0}; id aShape; [super initFrame:theRect]; [self setEyeAt:fromP toward:toP roll:0.0]; aShape=[[SimpleShape alloc] init]; [[self setWorldShape:aShape] free]; [self setSurfaceTypeForAll:N3D_SmoothSolids chooseHider:YES]; theRotator=[[N3DRotator alloc] initWithCamera:self]; return self; } - displayPhotoreal; { char text[256]; [self setDelegate:self]; rendering=[self renderAsTIFF]; if(rendering) { strcpy(origionalTitle,[window title]); sprintf(text,"%s - Rendering...",origionalTitle); [window setTitle:text]; } return self; } - camera:theCamera didRenderStream:(NXStream *)imageStream tag:(int)theJob frameNumber:(int)currentFrame { id bitmap; char text[256],*ending; strcpy(text,[window title]); ending=rindex(text,'-'); ending[-1]='\0'; [window setTitle:text]; bitmap=[[NXBitmapImageRep alloc] initFromStream:imageStream]; [self lockFocus]; [bitmap draw]; [self unlockFocus]; rendering=0; [window flushWindow]; return self; } #define ACTIVEBUTTONMASK (NX_MOUSEUPMASK|NX_MOUSEDRAGGEDMASK) - mouseDown:(NXEvent *)theEvent { int oldMask; NXPoint oldMouse, newMouse, dMouse; RtMatrix rmat, irmat; if(rendering) return self; [theRotator setRotationAxis:N3D_AllAxes]; [self lockFocus]; oldMask = [window addToEventMask:ACTIVEBUTTONMASK]; [self setSurfaceTypeForAll:N3D_WireFrame chooseHider:YES]; oldMouse = theEvent->location; [self convertPoint:&oldMouse fromView:nil]; while (1) { newMouse = theEvent->location; [self convertPoint:&newMouse fromView:nil]; dMouse.x = newMouse.x - oldMouse.x; dMouse.y = newMouse.y - oldMouse.y; if (dMouse.x != 0.0 || dMouse.y != 0.0) { [theRotator trackMouseFrom:&oldMouse to:&newMouse rotationMatrix:rmat andInverse:irmat]; [worldShape concatTransformMatrix:rmat premultiply:NO]; [self display]; } theEvent = [NXApp getNextEvent:ACTIVEBUTTONMASK]; if (theEvent->type == NX_MOUSEUP) break; oldMouse = newMouse; } [self setSurfaceTypeForAll:N3D_SmoothSolids chooseHider:YES]; [self display]; [self unlockFocus]; [window setEventMask:oldMask]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.