public override void getDrawRequests(MDrawInfo info, bool objectAndActiveOnly, MDrawRequestQueue queue) { quadricShape shapeNode = surfaceShape as quadricShape; if (shapeNode == null) { return; } // The following line will be removed when all the .net assemblies will be merged into one // We would then be able to call info.getPrototype(this) MDrawRequest request = info.getPrototype(this); quadricGeom geom = shapeNode.geometry(); MDrawData data; getDrawData(geom, out data); request.setDrawData(data); // Are we displaying meshes? if (!info.objectDisplayStatus(M3dView.DisplayObjects.kDisplayMeshes)) { return; } // Use display status to determine what color to draw the object // switch (info.displayStyle) { case M3dView.DisplayStyle.kWireFrame: getDrawRequestsWireframe(request, info); queue.add(request); break; case M3dView.DisplayStyle.kGouraudShaded: request.token = (int)DrawShapeStyle.kDrawSmoothShaded; getDrawRequestsShaded(request, info, queue, data); queue.add(request); break; case M3dView.DisplayStyle.kFlatShaded: request.token = (int)DrawShapeStyle.kDrawFlatShaded; getDrawRequestsShaded(request, info, queue, data); queue.add(request); break; default: break; } }
public quadricShape() { fGeometry = new quadricGeom(); fGeometry.radius1 = 1.0; fGeometry.radius2 = 1.0; fGeometry.height = 2.0; fGeometry.startAngle = 0.0; fGeometry.sweepAngle = 90.0; fGeometry.slices = 8; fGeometry.loops = 6; fGeometry.stacks = 4; fGeometry.shapeType = 0; }
public override MBoundingBox boundingBox() { MBoundingBox result = new MBoundingBox(); quadricGeom geom = this.geometry(); double r = geom.radius1; MPoint t = new MPoint(r, r, r); MPoint nt = new MPoint(-r, -r, -r); result.expand(t); result.expand(nt); r = geom.radius2; result.expand(t); result.expand(nt); r = geom.height; result.expand(t); result.expand(nt); return(result); }
public override void draw(MDrawRequest request, M3dView view) // // From the given draw request, get the draw data and determine // which quadric to draw and with what values. // { MDrawData data = request.drawData(); quadricGeom geom = data.geometry() as quadricGeom; DrawShapeStyle token = (DrawShapeStyle)request.token; bool drawTexture = false; view.beginGL(); if ((token == DrawShapeStyle.kDrawSmoothShaded) || (token == DrawShapeStyle.kDrawFlatShaded)) { OpenGL.glEnable((uint)OpenGL.GL_POLYGON_OFFSET_FILL); // Set up the material // MMaterial material = request.material; material.setMaterial(request.multiPath, request.isTransparent); // Enable texturing // drawTexture = material.materialIsTextured; if (drawTexture) { OpenGL.glEnable((uint)OpenGL.GL_TEXTURE_2D); } // Apply the texture to the current view // if (drawTexture) { material.applyTexture(view, data); } } IntPtr qobj = GLUFunctionInvoker.gluNewQuadric(); switch (token) { case DrawShapeStyle.kDrawWireframe: case DrawShapeStyle.kDrawWireframeOnShaded: GLUFunctionInvoker.gluQuadricDrawStyle(qobj, GLU_LINE); break; case DrawShapeStyle.kDrawSmoothShaded: GLUFunctionInvoker.gluQuadricNormals(qobj, GLU_SMOOTH); GLUFunctionInvoker.gluQuadricTexture(qobj, GLtrue); GLUFunctionInvoker.gluQuadricDrawStyle(qobj, GLU_FILL); break; case DrawShapeStyle.kDrawFlatShaded: GLUFunctionInvoker.gluQuadricNormals(qobj, GLU_FLAT); GLUFunctionInvoker.gluQuadricTexture(qobj, GLtrue); GLUFunctionInvoker.gluQuadricDrawStyle(qobj, GLU_FILL); break; } switch (geom.shapeType) { case (short)DrawShapeType.kDrawCylinder: GLUFunctionInvoker.gluCylinder(qobj, geom.radius1, geom.radius2, geom.height, geom.slices, geom.stacks); break; case (short)DrawShapeType.kDrawDisk: GLUFunctionInvoker.gluDisk(qobj, geom.radius1, geom.radius2, geom.slices, geom.loops); break; case (short)DrawShapeType.kDrawPartialDisk: GLUFunctionInvoker.gluPartialDisk(qobj, geom.radius1, geom.radius2, geom.slices, geom.loops, geom.startAngle, geom.sweepAngle); break; case (short)DrawShapeType.kDrawSphere: default: GLUFunctionInvoker.gluSphere(qobj, geom.radius1, geom.slices, geom.stacks); break; } // Turn off texture mode // if (drawTexture) { OpenGL.glDisable((uint)OpenGL.GL_TEXTURE_2D); } view.endGL(); }