This is BBRenderingStyle.m in view mode; [Download] [Up]
/* BBRenderingStyle.m * * This object knows how the rendering quality should be. It will produce the * necessary RenderMan code too. * * For interface-info see the header file. The comments in this file mostly * cover only the real implementation details. * * Written by: Thomas Engel * Created: 08.03.1994 (Copyleft) * Last modified: 30.05.1994 */ #import "BBRenderingStyle.h" @implementation BBRenderingStyle - init { N3DShader * aShader; self = [super init]; if( !self ) return self; // OK. We really are an object...here we go with our init. // We should ensure that there are at least some useful values preset. aShader = [N3DShader new]; [aShader setShader:"matte"]; [self setSurfaceType:N3D_SmoothSolids]; [self setGeometryType:BB_RenderedShape]; [self setShader:aShader]; [self setShadingQuality:BB_LowQuality]; [self setGeometryQuality:BB_LowQuality]; return self; } - applySettingsTo:aShape { // By default everything is visible and we won't draw any boxes. // The rest will come as needed. int i; id aList; [aShape setVisible:YES]; [aShape setDrawAsBox:NO]; aList = [self subshapesOf:aShape]; for( i=0; i<[aList count]; i++ ) [[[aList objectAt:i] setDrawAsBox:NO] setVisible:YES]; // Now lets apply the settings. [(N3DShape *)aShape setShader:shader]; if( surfaceType == N3D_SmoothSolids ) [aShape setSurfaceType:N3D_SmoothSolids andDescendants:YES]; else if( surfaceType == N3D_FacetedSolids ) [aShape setSurfaceType:N3D_FacetedSolids andDescendants:YES]; else if( surfaceType == N3D_ShadedWireFrame ) [aShape setSurfaceType:N3D_ShadedWireFrame andDescendants:YES]; else if( surfaceType == N3D_WireFrame ) [aShape setSurfaceType:N3D_WireFrame andDescendants:YES]; else if( surfaceType == N3D_PointCloud ) [aShape setSurfaceType:N3D_PointCloud andDescendants:YES]; else [aShape setSurfaceType:N3D_ShadedWireFrame andDescendants:YES]; // And new we'll check the geometry type. if( geometryType == BB_BoundedElements ) { for( i=0; i<[aList count]; i++ ) [[aList objectAt:i] setDrawAsBox:YES]; } else if( geometryType == BB_BoundedRegion ) { [aShape setDrawAsBox:YES]; for( i=0; i<[aList count]; i++ ) [[aList objectAt:i] setVisible:NO]; } return self; } - executeRiCommands { RiShadingRate( shadingRate ); RiGeometricApproximation( RI_TESSELATION, RI_PARAMETRIC, parameticRate, RI_NULL ); return self; } - setSurfaceType:(N3DSurfaceType)theSurface { surfaceType = theSurface; return self; } - (N3DSurfaceType)surfaceType { return surfaceType; } - setGeometryType:(BBGeometryType)theGeometry { geometryType = theGeometry; return self; } - (BBGeometryType)geometryType { return geometryType; } - setShader:aShader { shader = aShader; return self; } - shader { return shader; } - setShadingQuality:(BBQualityType)aQuality { shadingQuality = aQuality; if( shadingQuality == BB_ExcellentQuality ) shadingRate = 1; else if( shadingQuality == BB_GoodQuality ) shadingRate = 4; else if( shadingQuality == BB_AverageQuality ) shadingRate = 8; else if( shadingQuality == BB_LowQuality ) shadingRate = 16; else shadingRate = 32; return self; } - (BBQualityType)shadingQuality { return shadingQuality; } - setGeometryQuality:(BBQualityType)aQuality { geometryQuality = aQuality; if( geometryQuality == BB_ExcellentQuality ) { parameticRate[0] = 20; parameticRate[1] = 20; } else if( geometryQuality == BB_GoodQuality ) { parameticRate[0] = 14; parameticRate[1] = 14; } else if( geometryQuality == BB_AverageQuality ) { parameticRate[0] = 8; parameticRate[1] = 8; } else if( geometryQuality == BB_LowQuality ) { parameticRate[0] = 4; parameticRate[1] = 4; } else { parameticRate[0] = 1; parameticRate[1] = 1; } return self; } - (BBQualityType)geometryQuality { return geometryQuality; } - subshapesOf:aShape { // Well not really perfect but it should work here. We only get the // first level descentants. id newShape; id aList; aList = [List new]; newShape = [aShape descendant]; while( newShape ) { [aList addObject:newShape]; newShape = [newShape nextPeer]; } return aList; } @end /* * History: 27.03.94 The real code did find its way. * * 08.03.94 First try. * * * Bugs: What ?! */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.