Exemple #1
0
        protected override void OnDragDrop(DragEventArgs drgevent)
        {
            base.OnDragDrop(drgevent);
            if (DesignView.Context == null)
            {
                return;
            }

            if (m_ghosts.Count > 0)
            {
                foreach (DomNode ghost in m_ghosts)
                {
                    ghost.RemoveFromParent();
                }

                var dragDropTarget = TargetGame();
                ApplicationUtil.Insert(
                    dragDropTarget,
                    dragDropTarget,
                    m_ghosts,
                    "Drag and Drop",
                    null);

                m_ghosts.Clear();
                DesignView.InvalidateViews();
            }
        }
        protected override void OnDragLeave(EventArgs e)
        {
            base.OnDragLeave(e);
            if (DesignView.Context == null)
            {
                return;
            }

            if (m_ghosts.Count > 0)
            {
                IGame             dragDropTarget = TargetGame();
                IGameObjectFolder rootFolder     = dragDropTarget.RootGameObjectFolder;
                foreach (DomNode ghost in m_ghosts)
                {
                    // reset translation.
                    ITransformable xformnode = ghost.As <ITransformable>();
                    xformnode.Translation = new Vec3F(0, 0, 0);

                    rootFolder.GameObjects.Remove(ghost.As <IGameObject>());
                }

                m_ghosts.Clear();
                DesignView.InvalidateViews();
            }
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            if (DesignView.Context == null || GameEngine.IsInError)
            {
                e.Graphics.Clear(DesignView.BackColor);
                if (GameEngine.IsInError)
                {
                    e.Graphics.DrawString(GameEngine.CriticalError, Font, Brushes.Red, 1, 1);
                }
                return;
            }

            FrameTime ft = DesignView.GetFrameTime();

            GameEngine.SetGameLevel(DesignView.Context.Cast <NativeObjectAdapter>());
            GameEngine.Update(ft.TotalTime, ft.ElapsedTime, false);
            Render();
            // draw selection
            if (IsPicking)
            {
                Rectangle rect = MakeRect(FirstMousePoint, CurrentMousePoint);
                if (rect.Width > 0 && rect.Height > 0)
                {
                    e.Graphics.DrawRectangle(s_marqueePen, rect);
                }
            }
        }
        protected override void OnDragDrop(DragEventArgs drgevent)
        {
            base.OnDragDrop(drgevent);
            if (DesignView.Context == null)
            {
                return;
            }

            if (m_ghosts.Count > 0)
            {
                IGame             dragDropTarget = TargetGame();
                IGameObjectFolder rootFolder     = dragDropTarget.RootGameObjectFolder;

                foreach (DomNode ghost in m_ghosts)
                {
                    rootFolder.GameObjects.Remove(ghost.As <IGameObject>());
                }
                ApplicationUtil.Insert(
                    dragDropTarget,
                    rootFolder.Cast <DomNode>(),
                    m_ghosts,
                    "Drag and Drop",
                    null);

                m_ghosts.Clear();
                DesignView.InvalidateViews();
            }
        }
        public NativeDesignControl(DesignView designView) :
            base(designView)
        {
            ClientSize = new Size(10, 10);
            if (!GameEngine.IsInError)
            {
                swapChainId = GameEngine.GetObjectTypeId("SwapChain");
                SurfaceId   = GameEngine.CreateObject(swapChainId, this.Handle, IntPtr.Size);
                SizePropId  = GameEngine.GetObjectPropertyId(swapChainId, "Size");
                GameEngine.SetObjectProperty(swapChainId, SurfaceId, SizePropId, ClientSize);
                BkgColorPropId = GameEngine.GetObjectPropertyId(swapChainId, "BkgColor");
                GameEngine.SetObjectProperty(swapChainId, SurfaceId, BkgColorPropId, BackColor);
            }
            if (s_marqueePen == null)
            {
                s_marqueePen             = new Pen(Color.FromArgb(30, 30, 30), 2);
                s_marqueePen.DashPattern = new float[] { 3, 3 };
            }

            m_renderState                = new RenderState();
            m_renderState.RenderFlag     = GlobalRenderFlags.Solid | GlobalRenderFlags.Textured | GlobalRenderFlags.Lit | GlobalRenderFlags.Shadows;
            m_renderState.WireFrameColor = Color.DarkBlue;
            m_renderState.SelectionColor = Color.FromArgb(66, 255, 161);
            BackColor              = SystemColors.ControlDark;
            m_renderState.Changed += (sender, e) => Invalidate();
        }
Exemple #6
0
        protected override void OnDragOver(DragEventArgs drgevent)
        {
            base.OnDragOver(drgevent);
            if (DesignView.Context == null || m_ghosts.Count == 0)
            {
                return;
            }

            //  Just do an intersection against the terrain to
            //  calculate basic insertion position
            Vec3F terrainHit;

            if (GetTerrainCollision(out terrainHit, PointToClient(new Point(drgevent.X, drgevent.Y))))
            {
                foreach (var ghost in m_ghosts)
                {
                    var gameObject = ghost.As <ITransformable>();
                    if (gameObject != null)
                    {
                        gameObject.Translation = terrainHit;
                    }
                }

                DesignView.InvalidateViews();
            }
        }
Exemple #7
0
        private void RenderExtras(GUILayer.SimpleRenderingContext context, DesignView designView)
        {
            bool renderSelected = RenderState.DisplayBound == DisplayFlagModes.Selection ||
                                  RenderState.DisplayCaption == DisplayFlagModes.Selection ||
                                  RenderState.DisplayPivot == DisplayFlagModes.Selection;

            if (renderSelected)
            {
                var selection = DesignView.Context.As <ISelectionContext>().Selection;
                IEnumerable <DomNode> rootDomNodes = DomNode.GetRoots(selection.AsIEnumerable <DomNode>());
                RenderProperties(context, rootDomNodes,
                                 RenderState.DisplayCaption == DisplayFlagModes.Selection,
                                 RenderState.DisplayBound == DisplayFlagModes.Selection,
                                 RenderState.DisplayPivot == DisplayFlagModes.Selection);
            }

            if (RenderState.GridMode == RenderState.GridModes.Enabled)
            {
                var          game       = designView.Context.As <IGame>();
                GridRenderer gridRender = game.Grid.Cast <GridRenderer>();
                gridRender.Render(context, Camera);
            }

            RenderProperties(context, Items,
                             RenderState.DisplayCaption == DisplayFlagModes.Always,
                             RenderState.DisplayBound == DisplayFlagModes.Always,
                             RenderState.DisplayPivot == DisplayFlagModes.Always);

            GameEngine.DrawText2D(m_pendingCaption, Util3D.CaptionFont, 1, 1, Color.White);
        }
        protected override void OnDragOver(DragEventArgs drgevent)
        {
            base.OnDragOver(drgevent);
            if (DesignView.Context == null ||
                m_ghosts.Count == 0)
            {
                return;
            }


            Point clientPoint = PointToClient(new Point(drgevent.X, drgevent.Y));
            Ray3F rayw        = GetWorldRay(clientPoint);

            bool shiftPressed = Control.ModifierKeys == Keys.Shift;

            DomNode   hitnode = null;
            HitRecord?hit     = null;

            if (shiftPressed)
            {
                Matrix4F    v    = Camera.ViewMatrix;
                Matrix4F    p    = Camera.ProjectionMatrix;
                HitRecord[] hits = GameEngine.RayPick(v, p, rayw, false);
                foreach (HitRecord ht in hits)
                {
                    hitnode = GameEngine.GetAdapterFromId(ht.instanceId).Cast <DomNode>();

                    bool skip = false;
                    // ignore ghosts
                    foreach (DomNode node in m_ghosts)
                    {
                        if (hitnode == node || hitnode.IsDescendantOf(node))
                        {
                            skip = true;
                            break;
                        }
                    }
                    if (skip)
                    {
                        continue;
                    }
                    hit = ht;
                    break;
                }
            }

            ISnapFilter snapFilter = Globals.MEFContainer.GetExportedValue <ISnapFilter>();
            bool        snap       = (shiftPressed && hit.HasValue);

            foreach (DomNode ghost in m_ghosts)
            {
                HitRecord?hr = (snap && (snapFilter == null || snapFilter.CanSnapTo(ghost, hitnode))) ? hit : null;
                ProjectGhost(ghost, rayw, hr);
            }
            DesignView.Tick();
        }
        public void OnSaveModel(object sender, EventArgs args)
        {
            if (string.IsNullOrEmpty(CurrentPath))
            {
                FileDialog dialog = new SaveFileDialog();

                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    CurrentPath = dialog.FileName;
                }
            }

            DesignerModel model = new DesignerModel();

            DesignView.Save(model);
            model.SaveToFile(CurrentPath);
        }
        protected override void OnDragOver(DragEventArgs drgevent)
        {
            base.OnDragOver(drgevent);
            if (DesignView.Context == null || m_ghosts.Count == 0)
            {
                return;
            }

            //  Just do an intersection against the terrain to
            //  calculate basic insertion position
            Vec3F terrainHit;

            if (GetInsertionPosition(out terrainHit, PointToClient(new Point(drgevent.X, drgevent.Y))))
            {
                ISnapSettings snapSettings = (ISnapSettings)DesignView;
                foreach (var ghost in m_ghosts)
                {
                    var gameObject = ghost.As <ITransformable>();
                    if (gameObject != null)
                    {
                        gameObject.Translation = terrainHit;

                        // When if terrain alignment mode, we need to query the terrain collision model
                        // for a terrain normal associated with this point. The
                        if (snapSettings.TerrainAlignment == TerrainAlignmentMode.TerrainUp)
                        {
                            using (var intersectionScene = GameEngine.GetEditorSceneManager().GetIntersectionScene())
                            {
                                float            terrainHeight;
                                GUILayer.Vector3 terrainNormal;
                                if (GUILayer.EditorInterfaceUtils.GetTerrainHeightAndNormal(
                                        out terrainHeight, out terrainNormal,
                                        intersectionScene, terrainHit.X, terrainHit.Y))
                                {
                                    gameObject.Rotation = TransformUtils.RotateToVector(
                                        gameObject.Rotation, new Vec3F(terrainNormal.X, terrainNormal.Y, terrainNormal.Z),
                                        Sce.Atf.Rendering.Dom.AxisSystemType.ZIsUp);
                                }
                            }
                        }
                    }
                }

                DesignView.InvalidateViews();
            }
        }
Exemple #11
0
        protected override void OnDragLeave(EventArgs e)
        {
            base.OnDragLeave(e);
            if (DesignView.Context == null)
            {
                return;
            }

            if (m_ghosts.Count > 0)
            {
                foreach (DomNode ghost in m_ghosts)
                {
                    ghost.RemoveFromParent();
                }
                m_ghosts.Clear();
                DesignView.InvalidateViews();
            }
        }
        public void OnLoadModel(object sender, EventArgs <Tuple <string, DesignerModel> > args)
        {
            if (DesignView.IsDirty)
            {
                DialogResult result = MessageBox.Show("Current Model has been changed, are you sure to save it?", "Warning", MessageBoxButtons.YesNoCancel);

                if (result == DialogResult.Yes)
                {
                    OnSaveModel(this, EventArgs.Empty);
                }
            }

            // clean up
            DesignView.Cleanup();

            CurrentPath = Title = args.Data.Item1;
            DesignView.Load(args.Data.Item2);
        }
        private void RenderManipulators(GUILayer.SimpleRenderingContext context, DesignView designView)
        {
            var mani = designView.Manipulator;

            if (mani == null)
            {
                return;
            }

            var extra           = mani as IManipulatorExtra;
            var clearBeforeDraw = (extra != null) ? extra.ClearBeforeDraw() : true;

            if (clearBeforeDraw)
            {
                // disable depth write and depth read
                context.InitState(false, false);
            }

            mani.Render(context, this);
        }
Exemple #14
0
        public NativeDesignControl(DesignView designView) :
            base(designView)
        {
            if (s_marqueePen == null)
            {
                s_marqueePen             = new Pen(Color.FromArgb(30, 30, 30), 2);
                s_marqueePen.DashPattern = new float[] { 3, 3 };
            }

            m_renderState                = new RenderState();
            m_renderState.RenderFlag     = GlobalRenderFlags.Solid | GlobalRenderFlags.Textured | GlobalRenderFlags.Lit | GlobalRenderFlags.Shadows;
            m_renderState.WireFrameColor = Color.DarkBlue;
            m_renderState.SelectionColor = Color.FromArgb(66, 255, 161);
            BackColor = SystemColors.ControlDark;
            m_renderState.OnChanged += (sender, e) => Invalidate();

            Adapter = new DesignControlAdapter(
                this, Camera,
                GameEngine.GetEditorSceneManager(),
                GameEngine.GlobalSelection, GameEngine.GetSavedResources());

            Adapter.AddRenderCallback((GUILayer.SimpleRenderingContext context) => RenderManipulators(context, designView));
            Adapter.AddRenderCallback((GUILayer.SimpleRenderingContext context) => RenderExtras(context, designView));
        }
Exemple #15
0
 private void RenderCallback(DesignView designView, Sce.Atf.Rendering.Camera camera)
 {
 }
 public void MoveDown()
 {
     DesignView.MoveDown();
 }
 public void SetPenAsTransparent(bool transparent)
 {
     DesignView.SetPenAsTransparent(transparent);
 }
 public void OnPrint(PrintPageEventArgs args)
 {
     DesignView.OnPrint(args);
 }