Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
 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;
 }
Esempio n. 3
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);
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
 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;
 }