Ejemplo n.º 1
0
        private static Bitmap GenerateIcon(Model3DNode model, GLControl glcontrol, Vector2 icon_size, M3D.Model.Utils.Vector3 orientation, Color4 bgColor)
        {
            ImageCapture.SetViewPoint(glcontrol);
            var rotation    = new M3D.Model.Utils.Vector3(orientation);
            var translation = new M3D.Model.Utils.Vector3(0.0f, 0.0f, 0.0f);

            M3D.Model.Utils.Vector3 ext = model.CalculateMinMax().Ext;
            var num   = ext.X <= (double)ext.Z ? ext.Z <= (double)ext.Y ? 100f / ext.Y : 100f / ext.Z : ext.Y <= (double)ext.X ? 100f / ext.X : 100f / ext.Y;
            var scale = new M3D.Model.Utils.Vector3(num, num, num);

            ImageCapture.SetupForIconRender(new OpenTK.Vector3(100f, 100f, 250f), new OpenTK.Vector3(0.0f, 0.0f, 0.0f), bgColor);
            ImageCapture.RenderModelGetScreenMinMax(model, rotation, translation, scale, out Rectangle screen_rec);
            return(ImageCapture.GrabIconFromRender(glcontrol, ref screen_rec, icon_size));
        }
Ejemplo n.º 2
0
        private static Rectangle GetScreenMinMax(Model3DNode model)
        {
            int[]    numArray = new int[4];
            double[] data1    = new double[16];
            double[] data2    = new double[16];
            GL.GetInteger(GetPName.Viewport, numArray);
            GL.GetDouble(GetPName.Modelview0MatrixExt, data1);
            GL.GetDouble(GetPName.ProjectionMatrix, data2);
            var       right      = new Matrix4((float)data2[0], (float)data2[1], (float)data2[2], (float)data2[3], (float)data2[4], (float)data2[5], (float)data2[6], (float)data2[7], (float)data2[8], (float)data2[9], (float)data2[10], (float)data2[11], (float)data2[12], (float)data2[13], (float)data2[14], (float)data2[15]);
            var       left       = new Matrix4((float)data1[0], (float)data1[1], (float)data1[2], (float)data1[3], (float)data1[4], (float)data1[5], (float)data1[6], (float)data1[7], (float)data1[8], (float)data1[9], (float)data1[10], (float)data1[11], (float)data1[12], (float)data1[13], (float)data1[14], (float)data1[15]);
            var       screen_max = new M3D.Model.Utils.Vector3(float.MinValue, float.MinValue, float.MinValue);
            var       screen_min = new M3D.Model.Utils.Vector3(float.MaxValue, float.MaxValue, float.MaxValue);
            ModelSize minMax     = model.CalculateMinMax();

            M3D.Model.Utils.Vector3 min = minMax.Min;
            M3D.Model.Utils.Vector3 max = minMax.Max;
            M3D.Model.Utils.Vector3 ext = minMax.Ext;
            var coord1 = new M3D.Model.Utils.Vector3(min);

            ImageCapture.UpdateScreenMinMax(coord1, ref screen_min, ref screen_max, Matrix4.Mult(left, right), numArray);
            coord1.X = max.X;
            ImageCapture.UpdateScreenMinMax(coord1, ref screen_min, ref screen_max, Matrix4.Mult(left, right), numArray);
            coord1.Z = max.Z;
            ImageCapture.UpdateScreenMinMax(coord1, ref screen_min, ref screen_max, Matrix4.Mult(left, right), numArray);
            coord1.X = min.X;
            ImageCapture.UpdateScreenMinMax(coord1, ref screen_min, ref screen_max, Matrix4.Mult(left, right), numArray);
            var coord2 = new M3D.Model.Utils.Vector3(max);

            ImageCapture.UpdateScreenMinMax(coord2, ref screen_min, ref screen_max, Matrix4.Mult(left, right), numArray);
            coord2.X = min.X;
            ImageCapture.UpdateScreenMinMax(coord2, ref screen_min, ref screen_max, Matrix4.Mult(left, right), numArray);
            coord2.Z = min.Z;
            ImageCapture.UpdateScreenMinMax(coord2, ref screen_min, ref screen_max, Matrix4.Mult(left, right), numArray);
            coord2.X = max.X;
            ImageCapture.UpdateScreenMinMax(coord2, ref screen_min, ref screen_max, Matrix4.Mult(left, right), numArray);
            return(new Rectangle((int)screen_min.X, (int)screen_min.Y, (int)(screen_max.X - (double)screen_min.X), (int)(screen_max.Y - (double)screen_min.Y)));
        }