示例#1
0
        public Drawable SelectGeometry(Application app, Scene scene, Engn_Camera cam)
        {
            if (app.Context.UI.Cursor.IsVisible())
            {
                if (ImGui.IsAnyItemHovered())
                {
                    return(null);
                }
                //Select element
                Vector3  hitposition;
                Drawable model;

                Rbfx_Utility.Raycast(scene, cam, 10000, out hitposition, out model);
                if (app.Context.Input.GetMouseButtonPress(MouseButton.MousebLeft))
                {
                    HiLightSelected(model);
                    SelectedModel = model;
                    return(SelectedModel);
                }
                else
                {
                    return(model as Drawable);
                }
            }

            return(null);
        }
示例#2
0
        private void SetupCameranViewPort()
        {
            //Camera-Viewport
            cam = new Engn_Camera(scene);
            cam.CameraNode.Position = (new Vector3(0, 2, -20));
            cam.LookAt(Vector3.Zero);
            viewport        = new Viewport(Context);
            viewport.Scene  = scene;
            viewport.Camera = cam.camera;
            Context.Renderer.SetViewport(0, viewport);

            //todo: not sure how setclipplane works
            //Graphics.SetClipPlane(true, Plane.Up, new Matrix3x4(Vector3.Zero, Quaternion.IDENTITY, 200f));
            cam.camera.ClipPlane = new Plane(Vector3.Up, new Vector3(0, 1, 0));
        }
示例#3
0
        public override void Start()
        {
            UI.Input.SetMouseVisible(true);

            //SetupResources Location
            string ResDir = @"./Resources/3D";

            Cache.AddResourceDir(ResDir);
            Cache.AddResourceDir(@"c:\windows\fonts");
            this.UI.Cursor = new Urho3DNet.Cursor(Context);

            // Scene
            scene = new Scene(Context);
            scene.CreateComponent <Octree>();

            Selection = new Engn_Selection();

            //Camera-Viewport
            cam = new Engn_Camera(scene);
            cam.CameraNode.Position = (new Vector3(0, 2, -20));
            cam.LookAt(Vector3.Zero);
            viewport        = new Viewport(Context);
            viewport.Scene  = scene;
            viewport.Camera = cam.camera;
            Engine.Renderer.SetViewport(0, viewport);


            // Background
            Engine.Renderer.DefaultZone.FogColor = (new Color(0.5f, 0.5f, 0.7f));

            //Plan
            //we don't to set wireplan to rootnode, as we need it for any root node that can be created later
            new Engn_WirePlane(scene);

            //Add Zone
            new Engn_Zone_Test(scene);

            //AddPlan
            new Engn_Plan(scene);

            // Light
            light = scene.CreateChild("Light");
            var l = light.CreateComponent <Light>();

            light.Position = (new Vector3(0, 50, -1));
            l.Range        = 100f;
            light.LookAt(Vector3.Zero);
            l.LightType   = LightType.LightPoint;
            l.CastShadows = true;
            l.ShadowBias  = new BiasParameters(0.00025f, 0.5f);
            // Set cascade splits at 10, 50 and 200 world units, fade shadows out at 80% of maximum shadow distance
            l.ShadowCascade = new CascadeParameters(10.0f, 50.0f, 200.0f, 0.0f, 0.8f);


            //Create Root Components for all models
            RootNode = scene.CreateChild("RootNode");

            //setup Menu
            uiMenu = new UIMenu(RootNode, Selection);

            //create RandomBoxes
            new Rbfx_RandomBoxes(RootNode);
            //info window shows name by hovered
            SetupInfoWindow();


            //create customshape
            CreateCustomShape();

            //drawModelform Scratch
            CreateModelfromScratch();

            bool setup = false;

            SubscribeToEvent(E.Update, args =>
            {
                uiMenu.SetupMenu();
                //what to do if selection is nothing
                onUnSelect();

                //camera movement
                cam.FirstPersonCamera(this, this.Time.TimeStep, 10, Selection?.SelectedModel?.Node);

                //CheckSelection
                var hoverselected = Selection.SelectGeometry(this, scene, cam);
                uiMenu.Selection  = Selection;
                uiMenu.RootNode   = RootNode;

                if (scene.Input.GetMouseButtonPress(Urho3DNet.MouseButton.MousebLeft))
                {
                    touraroundboxes(Selection.SelectedModel);

                    var node = RootNode.GetChild("Building");
                    if (node != null)
                    {
                        objname = objname == "door" ? "wall" : "door";
                        DisplaceAll(node, objname);
                    }
                }

                //invoke any actions in the list
                if (Actions.Count > 0)
                {
                    var runningactions = Actions.ToList();
                    Actions.Clear();
                    for (int i = 0; i < runningactions.Count; i++)
                    {
                        runningactions[i].Invoke();
                    }
                }

                if (scene.Input.GetMouseButtonClick(Urho3DNet.MouseButton.MousebRight))
                {
                    if (Selection.SelectedModel != null)
                    {
                        uiMenu.ActionMenu = menuaction.ObjectContext;
                    }
                }

                DisplayInfoText(hoverselected);
            });
        }