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; } } } }); }
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(); }
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); }
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); }