Click here to Skip to main content
15,886,840 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi,
Im drawing a coordinate system in my viewport.
Everything is fine, until I change my view direction (ex. from top view to front view).
When I change my view direction, my bitmapped letters (X, y & Z) are misplacing.
Could anybody help me pls..

C#
private void MakeCoordinateSystem()
        {
            double basedia = 0.0004;
            double dd = Math.Min(CurrentViewPortData.clipX, CurrentViewPortData.clipY) / 5.0;
            RemoveModelViewMatrixTranslation();

            double[] m = new double[16];
            gl.GetDoublev(gl.MODELVIEW_MATRIX, m);
            gl.LoadIdentity();
            gl.Translated(CurrentViewPortData.clipX - dd * 0.8, CurrentViewPortData.clipY - dd * 0.8, CurrentViewPortData.sphereRadius * 49.0);
            gl.MultMatrixd(m);

            IntPtr Qobj = glu.NewQuadric();

            gl.Color3f(0.0f, 0.0f, 0.0f);
            glu.Sphere(Qobj, basedia * 1.5 * dd * 100.0, 10, 10);

            gl.Color3f(1.0f, 0.0f, 0.0f);
            gl.Rotatef(90.0f, 0.0f, 1.0f, 0.0f);
            glu.Cylinder(Qobj, basedia * dd * 100.0, basedia * dd * 100.0, basedia * 10.0 * dd * 100.0, 10, 10);
            gl.Translated(0.0f, 0.0f, basedia * 10.0 * dd * 100.0);
            gl.Rotatef(180.0f, 0.0f, 1.0f, 0.0f);
            glu.Disk(Qobj, 0.0, basedia * dd * 100.0 * 2.0f, 10, 5);
            gl.Rotatef(-180.0f, 0.0f, 1.0f, 0.0f);
            glu.Cylinder(Qobj, basedia * 2.0 * dd * 100.0, 0.0, basedia * 3.0 * dd * 100.0, 10, 10);


            double[] xLocation = new double[3] { 0.0, -basedia * 1.5 * dd * 100.0, basedia * 4.0 * dd * 100.0 };
            double[] yLocation = new double[3] { -basedia * 1.5 * dd * 100.0, 0.0, basedia * 4.0 * dd * 100.0 };
            double[] zLocation = new double[3] { -basedia * dd * 100.0, -basedia * 1.5 * dd * 100.0, basedia * 4.5 * dd * 100.0 };

           // GetXYZPositions(ref xLocation, ref yLocation, ref zLocation);

           // double[] StringLoc = { 0.0, -basedia * 0.9*dd * 100.0, basedia * 4.0 * dd * 100.0 };
            byte[] xraster = new byte[] {
            0xc1, 0x80,
            0xc1, 0x80,
            0xc1, 0x80,
            0xc1, 0x80,
            0x63, 0x00,
            0x63, 0x00,
            0x36, 0x00,
            0x36, 0x00,
            0x1c, 0x00,
            0x1c, 0x00,
            0x36, 0x00,
            0x36, 0x00,
            0x63, 0x00,
            0x63, 0x00,
            0xc1, 0x80,
            0xc1, 0x80,
            0xc1, 0x80,
            0xc1, 0x80
            };
            gl.RasterPos3dv(xLocation);
            //GlUtility.GenXList(StringLoc);
            gl.PushMatrix();
            gl.Bitmap(9, 18, 0.0f, 0.0f, 0.0f, 0.0f, xraster);
            gl.PopMatrix();
            gl.Translated(0.0f, 0.0f, -basedia * 10.0 * dd * 100.0);


            gl.Color3f(0.0f, 1.0f, 0.0f);
            gl.Rotatef(-90.0f, 0.0f, 1.0f, 0.0f);
            gl.Rotatef(-90.0f, 1.0f, 0.0f, 0.0f);
            glu.Cylinder(Qobj, basedia * dd * 100.0, basedia * dd * 100.0, basedia * 10.0 * dd * 100.0, 10, 10);
            gl.Translated(0.0f, 0.0f, basedia * 10.0 * dd * 100.0);
            gl.Rotatef(180.0f, 1.0f, 0.0f, 0.0f);
            glu.Disk(Qobj, 0.0, basedia * dd * 100.0 * 2.0f, 10, 5);
            gl.Rotatef(-180.0f, 1.0f, 0.0f, 0.0f);
            glu.Cylinder(Qobj, basedia * 2.0 * dd * 100.0, 0.0, basedia * 3.0 * dd * 100.0, 10, 10);


            //StringLoc[0] = 0.0;
            //StringLoc[1] = -basedia * 0.9 * dd * 100.0; ;
            //StringLoc[2] = basedia * 4.0 * dd * 100.0;
            gl.RasterPos3dv(yLocation);
            byte[] yraster = new byte[] { 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00,
                                          0x14,0x00, 0x36,0x00, 0x36,0x00, 0x63,0x00,0x63,0x00, 0xc1,0x80, 0xc1, 0x80};

            gl.PushMatrix();
            gl.Bitmap(9, 18, 0.0f, 0.0f, 0.0f, 0.0f, yraster);
            gl.PopMatrix();
            gl.Translated(0.0f, 0.0f, -basedia * 10.0 * dd * 100.0);


            gl.Color3f(0.0f, 0.0f, 1.0f);
            gl.Rotatef(-90.0f, 1.0f, 0.0f, 0.0f);
            gl.Rotatef(180.0f, 0.0f, 1.0f, 0.0f);
            glu.Cylinder(Qobj, basedia * dd * 100.0, basedia * dd * 100.0, basedia * 10.0 * dd * 100.0, 10, 10);
            gl.Translated(0.0f, 0.0f, basedia * 10.0 * dd * 100.0);
            gl.Rotatef(180.0f, 1.0f, 0.0f, 0.0f);
            glu.Disk(Qobj, 0.0, basedia * dd * 100.0 * 2.0f, 10, 5);
            gl.Rotatef(-180.0f, 1.0f, 0.0f, 0.0f);
            glu.Cylinder(Qobj, basedia * 2.0 * dd * 100.0, 0.0, basedia * 3.0 * dd * 100.0, 10, 10);
            gl.Rotatef(180.0f, 0.0f, 0.0f, 1.0f);

            //StringLoc[0] = -basedia * 0.5 * dd * 100.0;
            //StringLoc[1] = -basedia * 1.0 * dd * 100.0;
            //StringLoc[2] = basedia * 6.0 * dd * 100.0;
            zLocation[0] = 0.0;
            zLocation[1] = -basedia * 4.0 * dd * 100.0 * .5;
            zLocation[2] = basedia * 6.0 * dd * 100.0 * .866;
            gl.RasterPos3dv(zLocation);
            byte[] zraster = new byte[] {
                                        0xfe, 0x00,
                                        0xfe, 0x00,
                                        0xfe, 0x00,
                                        0xc0, 0x00,
                                        0xc0, 0x00,
                                        0x60, 0x00,
                                        0x60, 0x00,
                                        0x30, 0x00,
                                        0x30, 0x00,
                                        0x18, 0x00,
                                        0x18, 0x00,
                                        0x0c, 0x00,
                                        0x0c, 0x00,
                                        0x06, 0x00,
                                        0x06, 0x00,
                                        0xfe, 0x00,
                                        0xfe, 0x00,
                                        0xfe, 0x00,
                                        0xfe, 0x00
                                        };
            gl.PushMatrix();
            gl.Bitmap(9, 18, 0.0f, 0.0f, 0.0f, 0.0f, zraster);
            gl.PopMatrix();
            //Reset color to black
            gl.Color3f(0.0f, 0.0f, 0.0f);
        }
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900