コード例 #1
0
        public Selection(GLWindow window, BrushManager tools, Input input, QbManager manager, Floor floor, GUI gui)
            : base()
        {
            this.brushes = tools;
            this.input   = input;
            this.manager = manager;
            this.floor   = floor;
            this.gui     = gui;

            window.Resize += (e, a) =>
            {
                statusStrip = null;
            };

            color = new Colort(1, 0, 0);

            buffer = new float[16];


            input.AddHandler(new InputHandler()
            {
                mousedownhandler = (e) =>
                {
                    if (Singleton <GUI> .INSTANCE.OverWidget)
                    {
                        return;
                    }

                    if (e.Button == MouseButton.Left && !dirty && handledselectionchange && Singleton <Raycaster> .INSTANCE.HasHit)
                    {
                        handledselectionchange = brushes.onselectionchanged(input, manager.ActiveMatrix, lasthit, e);

                        if (handledselectionchange)
                        {
                            needscleaning = true;
                        }
                    }
                },
                mouseuphandler = (e) =>
                {
                    if (e.Button == MouseButton.Left && !dirty && handledselectionchange)
                    {
                        handledselectionchange = brushes.onselectionchanged(input, manager.ActiveMatrix, lasthit, e);

                        if (handledselectionchange)
                        {
                            needscleaning = true;
                        }
                    }
                }
            });
        }
コード例 #2
0
        public Raycaster(GLWindow window, Camera camera, Selection selection, Floor floor, Input input, QbManager manager, GUI gui)
        {
            this.window    = window;
            this.camera    = camera;
            this.input     = input;
            this.floor     = floor;
            this.selection = selection;
            this.manager   = manager;
            this.gui       = gui;

            clientwidth    = window.Width;
            clientheight   = window.Height;
            window.Resize += (e, o) =>
            {
                clientwidth  = window.Width;
                clientheight = window.Height;
            };

            thread = new Thread(RaycastTask);
            thread.Start();
        }
コード例 #3
0
        protected override void OnLoad(EventArgs e)
        {
            string version = Assembly.GetExecutingAssembly().GetName().Version.ToString();

            Title = String.Format("StoneVox 3D - version {0}", version);

            GL.Viewport(0, 0, Width, Height);
            Qfont_1280 = new QFont("data\\fonts\\Bigfish.ttf", 11.2f, new QFontBuilderConfiguration(true, false));
            Qfont_1400 = new QFont("data\\fonts\\Bigfish.ttf", 12f, new QFontBuilderConfiguration(true, false));
            Qfont_1920 = new QFont("data\\fonts\\Bigfish.ttf", 15, new QFontBuilderConfiguration(true, false));
            if (Width <= 1280)
            {
                Qfont = Qfont_1280;
            }
            else if (Width < 1400)
            {
                Qfont = Qfont_1400;
            }
            else
            {
                Qfont = Qfont_1920;
            }

            this.Qfont.Options.Colour = Color.White;
            //this.Qfont.Options.TransformToViewport = new TransformViewport(-1,-1,2,2);

            Scale.SetHScaling(0, Width);
            Scale.SetVScaling(0, Height);

            ShaderUtil.CreateShader("quad_interpolation", "./data/shaders/QuadInterpolation.vs", "./data/shaders/QuadInterpolation.fs");

            broadcaster = new Broadcaster();
            manager     = new QbManager(broadcaster);
            input       = new Input(this);
            camera      = new Camera(this, input, manager);
            brushes     = new BrushManager(this, input);
            floor       = new Floor(camera, broadcaster);
            gui         = new GUI(this, manager, input);
            selection   = new Selection(this, brushes, input, manager, floor, gui);
            renderer    = new Wireframe(camera, selection, floor, input);
            undoredo    = new UndoRedo(input);

            selection.GenerateVertexArray();

            if (!manager.HasModel)
            {
                manager.AddEmpty();
            }
            camera.LookAtModel(true);

            backcolor = new Color4(0, 0, 0, 0);

            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.Blend);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

            GL.Enable(EnableCap.CullFace);
            GL.CullFace(CullFaceMode.Back);

            int    ole_hresult = OleInitialize(IntPtr.Zero);
            IntPtr handle      = FindWindowByCaption(IntPtr.Zero, Title);

            dnd = new DragDropTarget();
            int dnd_hresult = RegisterDragDrop(handle, dnd);

            raycaster           = new Raycaster(this, camera, selection, floor, input, manager, gui);
            selection.raycaster = raycaster;

            Client.Initialized = true;
            base.OnLoad(e);
            SetForegroundWindow(WindowInfo.Handle);
        }
コード例 #4
0
        public Camera(GLWindow window, Input input, QbManager manager)
            : base()
        {
            this.input   = input;
            this.manager = manager;

            window.Resize += (e, s) =>
            {
                projection = Matrix4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(fov), (float)window.Width / (float)window.Height, nearPlane, farPlane);
            };

            position  = new Vector3(0f, 0f, 10f);
            direction = new Vector3(0f, 0f, 1f);
            direction.Normalize();

            projection          = Matrix4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(fov), (float)window.Width / (float)window.Height, nearPlane, farPlane);
            view                = Matrix4.LookAt(position, position + direction, VectorUtils.UP);
            modelviewprojection = projection * view;

            InputHandler handler = new InputHandler()
            {
                Keydownhandler = (e) =>
                {
                    var gui = Singleton <GUI> .INSTANCE;

                    if (gui.FocusingWidget)
                    {
                        // OMG FIX THIS... NEED TO CENTERALIZE THIS TYPE OF CHECKING
                        var possibletextbox = gui.lastWidgetFocused as TextBox;
                        if (possibletextbox != null)
                        {
                            return;
                        }

                        Label possiblelabe = gui.lastWidgetFocused as Label;
                        if (possiblelabe != null)
                        {
                            return;
                        }
                    }

                    //freecam is super interesting... but need a bit of work
                    //if (e.Key == Key.C)
                    //{
                    //    freecam = !freecam;

                    //    if (freecam)
                    //    {
                    //        Client.window.CursorVisible = false;
                    //    }
                    //    else
                    //    {
                    //        Client.window.CursorVisible = true;
                    //    }
                    //}
                },


                mousewheelhandler = (e) =>
                {
                    if (!Singleton <GUI> .INSTANCE.OverWidget)
                    {
                        if (e.Delta < 0)
                        {
                            position -= direction * 6 * 1f;
                        }
                        else if (e.Delta > 0)
                        {
                            position += direction * 6 * 1f;
                        }
                    }
                    else if (Singleton <GUI> .INSTANCE.lastWidgetOver.Drag)
                    {
                        if (e.Delta < 0)
                        {
                            position -= direction * 6 * 1f;
                        }
                        else if (e.Delta > 0)
                        {
                            position += direction * 6 * 1f;
                        }
                    }
                }
            };

            input.AddHandler(handler);
        }