This is InspectPlot.m in view mode; [Download] [Up]
/* InspectPlot.h by Paul Kunz June 1991 * Controls various options for displaying the plot. * * Copyright (C) 1991 The Board of Trustees of * The Leland Stanford Junior University. All Rights Reserved. */ #import "HGraphicView.h" #import "InspectPlot.h" const char InspectPlot_h_rcsid[] = INSPECTPLOT_H_ID; const char InspectPlot_m_rcsid[] = "$Id: InspectPlot.m,v 2.30.2.1 1993/12/15 22:44:48 mfg Exp $"; #import "NewInspector.h" #import "Plot.h" #import "FineSlider.h" #import "h3D.h" /* * Tags on the Graph Type radio Buttons defined in IB * must be same as graphtype_t enumerated type in hippo.h * Here we define the rows index of grey and color bins buttons * which both have tag of COLORPLOT */ /* Tags on the draw options switches defined in IB */ #define BOX_TAG 0 #define PTS_TAG 1 #define JOIN_TAG 2 #define ERR_TAG 3 #define TLT_TAG 4 #define AXES_TAG 5 #define SOLID_TAG 0 #define DASH_TAG 1 #define DOT_TAG 2 #define DOTDASH_TAG 3 #define PI 3.1415926536 #define RAD_TO_DEG 180.0/PI @implementation InspectPlot static int nSymbols = 12; static char *symbolTitle[] = { "Triangle 1", "Triangle 2", "Triangle 3", "Triangle 4", "Square 1", "Square 2", "Diamond 1", "Diamond 2", "Circle 1", "Circle 2", "Times", "Plus" }; - initInspFor:aDraw { NXBundle *bundle; char buffer[MAXPATHLEN+1]; PopUpList *popUpList; int i; [super initInspFor:aDraw]; bundle = [NXBundle bundleForClass:[self class]]; if ( [bundle getPath:buffer forResource:"InspectPlot" ofType:"nib"] ) { [NXApp loadNibFile:buffer owner:self withNames:NO fromZone:[self zone]]; } [theInspector addView:[contentBox contentView] withName:"Plot Options" withSupervisor:self]; popUpList = [popUpButtonLine target]; [popUpList setTarget:self]; [popUpList setAction:@selector(lineOption:)]; popUpList = [popUpButtonSymbol target]; [popUpList setTarget:self]; [popUpList setAction:@selector(plotSymbol:)]; for (i=0; i<nSymbols; i++) { [popUpList addItem:symbolTitle[i]]; } return self; } - drawOption:sender { drawtype_t drawtype; int titlesFlag, axesFlag; drawtype = NONE; if ([[drawOptMatrix findCellWithTag:BOX_TAG] state] == 1) drawtype |= BOX; if ([[drawOptMatrix findCellWithTag:PTS_TAG] state] == 1) drawtype |= POINT; if ([[drawOptMatrix findCellWithTag:JOIN_TAG] state] == 1) drawtype |= LINE; if ([[drawOptMatrix findCellWithTag:ERR_TAG] state] == 1) drawtype |= ERRBAR; [graphicView graphicsPerform:@selector(setDrawType:) with :(id)&drawtype andDraw:NO]; titlesFlag = [[drawOptMatrix findCellWithTag:TLT_TAG] state ]; [graphicView graphicsPerform:@selector(setTitlesFlag:) with :(id)&titlesFlag andDraw:NO]; axesFlag = [[drawOptMatrix findCellWithTag:AXES_TAG] state ]; [graphicView graphicsPerform:@selector(setAxesFlag:) with :(id)&axesFlag andDraw:YES]; [[graphicView window] flushWindow]; return self; } - lineOption:sender { linestyle_t linestyle; linestyle = [sender selectedRow]; [graphicView graphicsPerform:@selector(setLineStyle:) with :(id)&linestyle andDraw:YES]; [[graphicView window] flushWindow]; return self; } - plotSymbol:sender { plotsymbol_t plotsymbol; plotsymbol = [sender selectedRow]; [graphicView graphicsPerform:@selector(setPlotSym:) with :(id)&plotsymbol andDraw:YES]; [[graphicView window] flushWindow]; return self; } - plotSymSize:sender { float plotsymsize; plotsymsize = [sender floatValue]; [graphicView graphicsPerform:@selector(setSymSize:) with :(id)&plotsymsize andDraw:YES]; [[graphicView window] flushWindow]; return self; } - titleForm:sender { const char *string; string = [titleForm stringValueAt:0]; [graphicView graphicsPerform:@selector(setTitle:) with:(id)string andDraw:YES]; [[graphicView window] flushWindow]; return self; } - resetTitle:sender { const char *string; if ( !selectedPlot ) { return self; } string = "%t"; [graphicView graphicsPerform:@selector(setTitle:) with:(id)string andDraw:YES]; [titleForm setStringValue:string at:0]; [[graphicView window] flushWindow]; return self; } - newGray:sender { id thisSlider; struct { int faceNo; float value; } grayValue; thisSlider = [sender selectedCell]; grayValue.faceNo = [thisSlider tag]; grayValue.value = [thisSlider floatValue]; [graphicView graphicsPerform:@selector(newGray3D:) with :(id)&grayValue andDraw:YES]; [[graphicView window] flushWindow]; return self; } - newTheta:sender { float angle; angle = [sender floatValue]; [thetaText setFloatValue:RAD_TO_DEG * angle]; [graphicView graphicsPerform:@selector(newTheta3D:) with :(float *)&angle andDraw:YES]; [[[graphicView window] flushWindow] makeKeyWindow]; return self; } - newPhi:sender { float angle; angle = [sender floatValue]; [phiText setFloatValue:RAD_TO_DEG * angle]; [graphicView graphicsPerform:@selector(newPhi3D:) with :(float *)&angle andDraw:YES]; [[[graphicView window] flushWindow] makeKeyWindow]; return self; } - newDist:sender { float distance; distance = [sender floatValue]; if (distance < 1.8) { [self showError:"Distance must be greater than 1.8"]; return self; } [distanceSlider setFloatValue:-1./ distance]; [distText setFloatValue:distance]; [graphicView graphicsPerform:@selector(newDist3D:) with :(float *)&distance andDraw:YES]; [[[graphicView window] flushWindow] makeKeyWindow]; return self; } - newInvDist:sender { float invDist, distance; invDist = -[sender floatValue]; if (invDist == 0.) distance = HUGE; else distance = 1./ invDist; [distText setFloatValue:distance]; [graphicView graphicsPerform:@selector(newDist3D:) with :(float *)&distance andDraw:YES]; [[[graphicView window] flushWindow] makeKeyWindow]; return self; } - newTheta_degrees:sender { float angle; angle = [sender floatValue] / RAD_TO_DEG; [thetaSlider setFloatValue:angle]; [thetaText setFloatValue:angle]; [graphicView graphicsPerform:@selector(newTheta3D:) with :(float *)&angle andDraw:YES]; [[[graphicView window] flushWindow] makeKeyWindow]; return self; } - newPhi_degrees:sender { float angle; angle = [sender floatValue] / RAD_TO_DEG; [phiSlider setFloatValue:angle]; [phiText setFloatValue:angle]; [graphicView graphicsPerform:@selector(newPhi3D:) with :(float *)&angle andDraw:YES]; [[[graphicView window] flushWindow] makeKeyWindow]; return self; } - toggleCube:sender { BOOL state; state = (BOOL)[sender state]; [graphicView graphicsPerform:@selector(toggleCube3D:) with :(BOOL *)&state andDraw:YES]; [[graphicView window] flushWindow]; return self; } - toggleWireFrame:sender; { BOOL state; state = (BOOL)[sender state]; [graphicView graphicsPerform:@selector(toggleWireFrame3D:) with :(BOOL *)&state andDraw:YES]; [[graphicView window] flushWindow]; return self; } - toggleFill:sender { BOOL state; state = (BOOL)[sender state]; [graphicView graphicsPerform:@selector( toggleFill3D:) with :(BOOL *)&state andDraw:YES]; [[graphicView window] flushWindow]; return self; } - toggleMesh:sender { BOOL state; state = (BOOL)[sender state]; [graphicView graphicsPerform:@selector(toggleMesh3D:) with :(BOOL *)&state andDraw:YES]; [[graphicView window] flushWindow]; return self; } - showError:(char *)errorMessage { NXRunAlertPanel("Error", errorMessage, "OK", NULL, NULL); return self; } - mouseMoved:(const NXPoint *)offset in:sender withKey:(int)flag { threeD_t *threeD; float theta,phi; display disp; disp = ([sender histDisplay]); threeD = disp->threeDWorkArea; if (flag & NX_COMMANDMASK) { /*command key was held down */ theta = disp->theta + ((offset->x)*3.14/180); if (theta > 3.14) theta = theta - 6.28; /* pi * 2 */ if (theta < -3.14) theta = 6.28 + theta; [sender newTheta3D:&theta]; phi = -disp->phi + ((offset->y)*3.14/180); if (phi > 1.57) phi = -3.14 + phi; if (phi < -1.57) phi = 3.14 + phi; [sender newPhi3D:&phi]; } if (flag & NX_CONTROLMASK) { float diff,dist; diff = [distanceSlider mmaxValue] - [distanceSlider mminValue]; dist = disp->dist + ((offset->y)*diff/100); if (dist > -1./[distanceSlider mmaxValue]) dist = -1./[distanceSlider mmaxValue]; if (dist < -1./[distanceSlider mminValue]) dist = -1./[distanceSlider mminValue]; [sender newDist3D:&dist]; } return self; } /* Methods to support updating the inspector's View */ - updateView { display disp; drawtype_t drawtype; graphtype_t graphtype; int pos; threeD_t *threeD; static char *lineTitle[] = {"Solid","Dash","Dot","DotDash"}; if ( !selectedPlot ) { return self; } disp = [selectedPlot histDisplay]; graphtype = h_getDispType( disp ); if (graphtype == HISTOGRAM || graphtype == XYPLOT || graphtype == STRIPCHART) { [selectedPlot getDrawType:(drawtype_t *) & drawtype]; pos = drawtype & BOX; if (pos > 0) pos = 1; [[drawOptMatrix findCellWithTag:BOX_TAG] setState:pos]; [[drawOptMatrix findCellWithTag:BOX_TAG] setEnabled:YES]; pos = drawtype & POINT; if (pos > 0) pos = 1; [[drawOptMatrix findCellWithTag:PTS_TAG] setState:pos]; [[drawOptMatrix findCellWithTag:PTS_TAG] setEnabled:YES]; pos = drawtype & LINE; if (pos > 0) pos = 1; [[drawOptMatrix findCellWithTag:JOIN_TAG] setState:pos]; [[drawOptMatrix findCellWithTag:JOIN_TAG] setEnabled:YES]; pos = drawtype & ERRBAR; if (pos > 0) pos = 1; [[drawOptMatrix findCellWithTag:ERR_TAG] setState:pos]; [[drawOptMatrix findCellWithTag:ERR_TAG] setEnabled:YES]; [popUpButtonLine setEnabled:YES]; [popUpButtonLine setTitle:lineTitle[(int)h_getLineStyle(disp)]]; } else { [[drawOptMatrix findCellWithTag:BOX_TAG] setEnabled:NO]; [[drawOptMatrix findCellWithTag:PTS_TAG] setEnabled:NO]; [[drawOptMatrix findCellWithTag:JOIN_TAG] setEnabled:NO]; [[drawOptMatrix findCellWithTag:ERR_TAG] setEnabled:NO]; [popUpButtonLine setEnabled:NO]; } if (graphtype == COLORPLOT || graphtype == LEGOPLOT) { [popUpButtonSymbol setEnabled:NO]; [plotSymSizeNumber setStringValue: ""]; } else { [popUpButtonSymbol setEnabled:YES]; [popUpButtonSymbol setTitle:symbolTitle[(int)h_getPlotSym(disp)]]; [plotSymSizeNumber setFloatValue: h_getSymSize(disp)]; } [[drawOptMatrix findCellWithTag:TLT_TAG] setState:h_getDrawTitles(disp)]; [[drawOptMatrix findCellWithTag:AXES_TAG] setState:h_getDrawAxes(disp)]; [drawOptMatrix display]; [titleForm setStringValue:h_getTitle(disp) at:0]; /* * 3D stuff:- */ if (firstPlot) { if ( graphtype == LEGOPLOT || graphtype == THREEDSCATTER ) { [distanceSlider setEnabled:YES]; [phiSlider setEnabled:YES]; [thetaSlider setEnabled:YES]; [distText setEnabled:YES]; [phiText setEnabled:YES]; [thetaText setEnabled:YES]; [cubeSwitch setEnabled:YES]; [grayMatrix setEnabled:YES]; if (disp->threeDWorkArea == NULL) return self; threeD = disp->threeDWorkArea; [thetaSlider setFloatValue:disp->theta]; [thetaText setFloatValue:RAD_TO_DEG*disp->theta]; [phiSlider setFloatValue:-disp->phi]; [phiText setFloatValue:-RAD_TO_DEG*disp->phi]; [distanceSlider setFloatValue:-1/disp->dist]; [distText setFloatValue:disp->dist]; [cubeSwitch setState:(int)disp->doCube]; [wireFrameSwitch setState:(int)disp->doWireFrame]; [fillSwitch setState:(int)disp->doFill]; [meshSwitch setState:(int)disp->doMesh]; if (graphtype == LEGOPLOT) { [wireFrameSwitch setEnabled:YES]; [fillSwitch setEnabled:YES]; [meshSwitch setEnabled:YES]; } else if (graphtype == THREEDSCATTER) { [wireFrameSwitch setEnabled:NO]; [fillSwitch setEnabled:NO]; [meshSwitch setEnabled:NO]; } } else { [distanceSlider setEnabled:NO]; [phiSlider setEnabled:NO]; [thetaSlider setEnabled:NO]; [distText setEnabled:NO]; [phiText setEnabled:NO]; [thetaText setEnabled:NO]; [cubeSwitch setEnabled:NO]; [wireFrameSwitch setEnabled:NO]; [fillSwitch setEnabled:NO]; [meshSwitch setEnabled:NO]; [grayMatrix setEnabled:NO]; } } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.