Add inspection rendering for scene graph

This commit is contained in:
John Lewin 2017-10-21 08:56:08 -07:00
parent daa4d5c53a
commit 6836abebf3
4 changed files with 90 additions and 42 deletions

View file

@ -6,6 +6,7 @@ using System.Windows.Forms;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.DataConverters3D;
using MatterHackers.MatterControl.PartPreviewWindow;
using MatterHackers.MeshVisualizer;
using MatterHackers.VectorMath;
@ -22,15 +23,22 @@ namespace MatterHackers.MatterControl
private Dictionary<IObject3D, TreeNode> sceneTreeNodes = new Dictionary<IObject3D, TreeNode>();
private InteractiveScene scene;
private View3DWidget view3DWidget;
public InspectForm(GuiWidget inspectedSystemWindow, InteractiveScene scene)
public InspectForm(GuiWidget inspectedSystemWindow, InteractiveScene scene, View3DWidget view3DWidget)
: this(inspectedSystemWindow)
{
this.view3DWidget = view3DWidget;
this.scene = scene;
this.scene.Children.ItemsModified += Scene_ChildrenModified;
sceneTreeView.SuspendLayout();
this.AddTree(scene, null, "Scene");
sceneTreeView.ResumeLayout();
if (view3DWidget.ContainsFocus)
{
tabControl1.SelectedIndex = 1;
}
}
private void Scene_ChildrenModified(object sender, EventArgs e)
@ -340,11 +348,13 @@ namespace MatterHackers.MatterControl
private void SceneTreeView_AfterSelect(object sender, TreeViewEventArgs e)
{
this.InspectedObject3D = e.Node.Tag as IObject3D;
this.scene.DebugItem = this.InspectedObject3D;
view3DWidget.PartHasBeenChanged();
}
private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{
this.InspectedWidget.Invalidate();
this.InspectedWidget?.Invalidate();
}
public void MoveUpTree()
@ -375,7 +385,9 @@ namespace MatterHackers.MatterControl
private void systemWindow_AfterDraw(object sender, EventArgs e)
{
if (this.Inspecting && !inspectedSystemWindow.HasBeenClosed)
if (this.Inspecting
&& !inspectedSystemWindow.HasBeenClosed
&& tabControl1.SelectedIndex == 0)
{
var namedChildren = new List<GuiWidget.WidgetAndPosition>();
inspectedSystemWindow.FindNamedChildrenRecursive(
@ -413,6 +425,7 @@ namespace MatterHackers.MatterControl
if (scene != null)
{
scene.Children.ItemsModified -= Scene_ChildrenModified;
scene.DebugItem = null;
}
if (mouseUpWidget != null)
@ -461,22 +474,10 @@ namespace MatterHackers.MatterControl
var node = e.Node;
if (node.IsVisible)
{
var item = node.Tag as IObject3D;
Brush brush;
if (scene.HasSelection
&& (scene.SelectedItem == item
|| scene.SelectedItem.Children.Contains(item)))
{
brush = SystemBrushes.Highlight;
}
else
{
brush = Brushes.Transparent;
}
e.Graphics.FillRectangle(brush, e.Node.Bounds);
//var item = node.Tag as IObject3D;
e.Graphics.FillRectangle(
(sceneTreeView.SelectedNode == node) ? SystemBrushes.Highlight : Brushes.Transparent,
node.Bounds);
TextRenderer.DrawText(
e.Graphics,
@ -487,5 +488,21 @@ namespace MatterHackers.MatterControl
Color.Transparent);
}
}
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.activeTreeNode != null
&& tabControl1.SelectedIndex != 0
&& this.activeTreeNode.Tag is GuiWidget widget)
{
widget.DebugShowBounds = false;
}
if (scene.DebugItem != null
&& tabControl1.SelectedIndex != 1)
{
scene.DebugItem = null;
}
}
}
}