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