This is StocCoeffView.m in view mode; [Download] [Up]
/* Generated by Interface Builder */ #import "StocCoeffView.h" #import "StocController.h" #import "SmsObject.h" #import <dpsclient/wraps.h> // for PSxxx stuff #import "PWfft.h" #define WIDTH bounds.size.width #define HEIGHT bounds.size.height @implementation StocCoeffView - initFrame:(const NXRect *)frameRect { self = [super initFrame: frameRect]; userPath = newUserPath(); fOffset = 0; return self; } - getTheSmsObject { if (!winDelegate) winDelegate = [window delegate]; if ([winDelegate respondsTo:@selector(getTheSmsObject)]) return [winDelegate getTheSmsObject]; else return NULL; } //------------------------------------------------------------------- // Translate from x/y values to display pixel coordinates - (float) xToPix:(float)iCoeff:(float)x { return (30 + (iCoeff - [winDelegate getLowestCoeff]) * gSection + x * fSection); } - (float) yToPix:(float)y:(float)iCoeff:(float)iFrame { int d = [winDelegate getHighestCoeff]-[winDelegate getLowestCoeff]; float a, b, c; a = y-[winDelegate getBottomValue]; b = [winDelegate getTopValue]-[winDelegate getBottomValue]; c = [winDelegate getLastFrameCoeff]-[winDelegate getFirstFrameCoeff]; return (80 + (HEIGHT - 100) * iFrame / c + 40 * a/b - 60 * (iCoeff - [winDelegate getLowestCoeff]) / d); } //------------------------------------------------------------------- // - drawCoeff draw one coefficient of the SmsObject - drawCoeff:(int)iFrame { id theSmsObject = [self getTheSmsObject]; int iCoeff; int iFirstFrame = [winDelegate getFirstFrameCoeff]; int iLastFrame = [winDelegate getLastFrameCoeff]; int incFrame = (iLastFrame - iFirstFrame) / 100; float i = iFrame - iFirstFrame; float fCoeff = 0; if (theSmsObject != NULL) { beginUserPath(userPath, NO); if (incFrame < 1) incFrame = 1; for (iCoeff = [winDelegate getLowestCoeff]; iCoeff <= [winDelegate getHighestCoeff]; iCoeff = iCoeff + incFrame) { UPmoveto(userPath, [self xToPix:iCoeff:i],[self yToPix:0:iCoeff:i]); UPlineto(userPath, [self xToPix:iCoeff:i], [self yToPix:0:iCoeff:i]); } iCoeff = [winDelegate getLowestCoeff]; fCoeff = [theSmsObject getStochasticCoefficient:iFrame iCoeff:iCoeff]; UPmoveto(userPath, [self xToPix:iCoeff:i],[self yToPix:fCoeff:iCoeff:i]); for (iCoeff = [winDelegate getLowestCoeff]+1; iCoeff <= [winDelegate getHighestCoeff]; iCoeff++) { fCoeff = [theSmsObject getStochasticCoefficient:iFrame iCoeff:iCoeff]; UPlineto(userPath, [self xToPix:iCoeff:i],[self yToPix:fCoeff:iCoeff:i]); } endUserPath(userPath, dps_ustroke); sendUserPath(userPath); } return self; } //------------------------------------------------------------------- // - drawSelf:: - Draw the coefficient trajectories in the view - drawSelf:(NXRect *)rects :(int)rectCount { id theSmsObject = [self getTheSmsObject]; int iFrame = [winDelegate getFirstFrameCoeff]; float lowW = 30, lowH = 20, highH = 80; fSection = (.35 * WIDTH) / ([winDelegate getLastFrameCoeff] - [winDelegate getFirstFrameCoeff]); gSection = (.6 * WIDTH) / ([winDelegate getHighestCoeff]-[winDelegate getLowestCoeff]); NXEraseRect(&bounds); PSsetlinewidth(0.0); PWinit(); if (theSmsObject != NULL) { beginUserPath(userPath, NO); UPmoveto(userPath, lowW, highH); UPlineto(userPath, lowW+(.6 * WIDTH), lowH); endUserPath(userPath, dps_ustroke); sendUserPath(userPath); [self lockFocus]; PWdrawX1ruler((int)([winDelegate getLowestCoeff] + 1), (int)([winDelegate getHighestCoeff] + 1), (int)2, 2*gSection,-(120.0 / ([winDelegate getHighestCoeff] - [winDelegate getLowestCoeff]))); [self unlockFocus]; while(iFrame <= [winDelegate getLastFrameCoeff]) { [self drawCoeff:iFrame]; iFrame++; } } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.