From 1f0acc0411b5c97d0d469f513f20ad4bbd98d6e6 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Tue, 18 Jul 2017 18:20:04 -0700 Subject: [PATCH 1/2] Moving to a dynamic Vertex data type --- PartPreviewWindow/CreateDiscreteMeshes.cs | 2 +- .../View3D/BaseObject3DEditor.cs | 42 +++++++++++++------ PartPreviewWindow/View3D/MeshViewerWidget.cs | 8 ++++ PartPreviewWindow/View3D/View3DWidget.cs | 4 +- StaticData/Translations/Master.txt | 9 ++++ Submodules/agg-sharp | 2 +- 6 files changed, 51 insertions(+), 16 deletions(-) diff --git a/PartPreviewWindow/CreateDiscreteMeshes.cs b/PartPreviewWindow/CreateDiscreteMeshes.cs index 5542f6b6b..27bcc400a 100644 --- a/PartPreviewWindow/CreateDiscreteMeshes.cs +++ b/PartPreviewWindow/CreateDiscreteMeshes.cs @@ -92,7 +92,7 @@ namespace MatterHackers.MatterControl while (attachedFaces.Count > 0) { Face faceToAdd = attachedFaces.Pop(); - foreach (Vertex attachedVertex in faceToAdd.Vertices()) + foreach (IVertex attachedVertex in faceToAdd.Vertices()) { foreach (Face faceAttachedToVertex in attachedVertex.ConnectedFaces()) { diff --git a/PartPreviewWindow/View3D/BaseObject3DEditor.cs b/PartPreviewWindow/View3D/BaseObject3DEditor.cs index a7aa935d9..8f09dfab5 100644 --- a/PartPreviewWindow/View3D/BaseObject3DEditor.cs +++ b/PartPreviewWindow/View3D/BaseObject3DEditor.cs @@ -55,25 +55,43 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.item = item; FlowLayoutWidget mainContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); - FlowLayoutWidget tabContainer = new FlowLayoutWidget(FlowDirection.TopToBottom) - { - HAnchor = HAnchor.AbsolutePosition, - Visible = true, - Width = theme.WhiteButtonFactory.FixedWidth - }; - mainContainer.AddChild(tabContainer); + FlowLayoutWidget behavior3DTypeButtons = new FlowLayoutWidget(); + mainContainer.AddChild(behavior3DTypeButtons); - Button changeColorButton = theme.textImageButtonFactory.Generate("Color".Localize()); - changeColorButton.Margin = new BorderDouble(5); - changeColorButton.HAnchor = HAnchor.ParentRight; + // put in the button for making the behavior solid + Button solidBehaviorButton = theme.textImageButtonFactory.Generate("Solid".Localize()); + solidBehaviorButton.Margin = new BorderDouble(5); Random rand = new Random(); - changeColorButton.Click += (s, e) => + solidBehaviorButton.Click += (s, e) => { item.Color = new RGBA_Bytes(rand.Next(255), rand.Next(255), rand.Next(255)); + item.BehaviorType = Behavior3DTypes.Solid; view3DWidget.Invalidate(); }; - tabContainer.AddChild(changeColorButton); + behavior3DTypeButtons.AddChild(solidBehaviorButton); + + // put in the button for making the behavior a hole + Button holeBehaviorButton = theme.textImageButtonFactory.Generate("Hole".Localize()); + holeBehaviorButton.Margin = new BorderDouble(5); + holeBehaviorButton.Click += (s, e) => + { + item.BehaviorType = Behavior3DTypes.Hole; + view3DWidget.Invalidate(); + }; + + behavior3DTypeButtons.AddChild(holeBehaviorButton); + + // put in the button for making the behavior support + Button supportBehaviorButton = theme.textImageButtonFactory.Generate("Support".Localize()); + supportBehaviorButton.Margin = new BorderDouble(5); + supportBehaviorButton.Click += (s, e) => + { + item.BehaviorType = Behavior3DTypes.Support; + view3DWidget.Invalidate(); + }; + + behavior3DTypeButtons.AddChild(supportBehaviorButton); return mainContainer; } diff --git a/PartPreviewWindow/View3D/MeshViewerWidget.cs b/PartPreviewWindow/View3D/MeshViewerWidget.cs index 76faaf248..a3c83d63f 100644 --- a/PartPreviewWindow/View3D/MeshViewerWidget.cs +++ b/PartPreviewWindow/View3D/MeshViewerWidget.cs @@ -613,6 +613,14 @@ namespace MatterHackers.MeshVisualizer Scene.HasSelection && (object3D == Scene.SelectedItem || Scene.SelectedItem.Children.Contains(object3D)); RGBA_Bytes drawColor = object3D.Color; + if(object3D.BehaviorType == Behavior3DTypes.Support) + { + drawColor = new RGBA_Bytes(RGBA_Bytes.Yellow, 120); + } + else if(object3D.BehaviorType == Behavior3DTypes.Hole) + { + drawColor = new RGBA_Bytes(RGBA_Bytes.Gray, 120); + } if (drawColor.Alpha0To1 == 0) { diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index 8d511d3c4..a1ef042a0 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -1914,7 +1914,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow foreach (Face face in lowestVertex.ConnectedFaces()) { double biggestAngleToFaceVertex = double.MinValue; - foreach (Vertex faceVertex in face.Vertices()) + foreach (IVertex faceVertex in face.Vertices()) { if (faceVertex != lowestVertex) { @@ -1938,7 +1938,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow double maxDistFromLowestZ = 0; List faceVertexes = new List(); - foreach (Vertex vertex in faceToLayFlat.Vertices()) + foreach (IVertex vertex in faceToLayFlat.Vertices()) { Vector3 vertexPosition = Vector3.Transform(vertex.Position, objectToWold); faceVertexes.Add(vertexPosition); diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index ffb902325..3382c480d 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -4324,3 +4324,12 @@ Translated:Sign in to access your cloud printer profiles.\n\nOnce signed in you English:Updating Mesh Translated:Updating Mesh +English:Solid +Translated:Solid + +English:Hole +Translated:Hole + +English:Support +Translated:Support + diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 0ae38f478..9dba4cbf6 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 0ae38f47898e67ca5d948fdfdf06877185caf159 +Subproject commit 9dba4cbf615723600ed3b7b3be7181f8baa4f828 From 95f7c3498beb1cc44a978061b6cb58efa3afa96c Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Wed, 19 Jul 2017 09:56:38 -0700 Subject: [PATCH 2/2] Took out FaceEdgeTextrueData and WeakTable --- PartPreviewWindow/CreateDiscreteMeshes.cs | 6 +++--- PartPreviewWindow/View3D/MeshViewerWidget.cs | 5 ++--- PartPreviewWindow/View3D/View3DWidget.cs | 2 +- SlicerConfiguration/Slicing/SliceLayers.cs | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/PartPreviewWindow/CreateDiscreteMeshes.cs b/PartPreviewWindow/CreateDiscreteMeshes.cs index 27bcc400a..9231b9889 100644 --- a/PartPreviewWindow/CreateDiscreteMeshes.cs +++ b/PartPreviewWindow/CreateDiscreteMeshes.cs @@ -107,7 +107,7 @@ namespace MatterHackers.MatterControl var faceVertices = new List(); foreach (FaceEdge faceEdgeToAdd in faceAttachedToVertex.FaceEdges()) { - var newVertex = meshFromCurrentVolume.CreateVertex(faceEdgeToAdd.firstVertex.Position, CreateOption.CreateNew, SortOption.WillSortLater); + var newVertex = meshFromCurrentVolume.CreateVertex(faceEdgeToAdd.FirstVertex.Position, CreateOption.CreateNew, SortOption.WillSortLater); faceVertices.Add(newVertex); } @@ -205,7 +205,7 @@ namespace MatterHackers.MatterControl // figure out which area one or more of the vertices are in add the face to the right new mesh foreach (FaceEdge faceEdge in face.FaceEdges()) { - Vector2 position = new Vector2(faceEdge.firstVertex.Position.x, faceEdge.firstVertex.Position.y); + Vector2 position = new Vector2(faceEdge.FirstVertex.Position.x, faceEdge.FirstVertex.Position.y); position += renderOffset; position *= scaleFactor; @@ -216,7 +216,7 @@ namespace MatterHackers.MatterControl var faceVertices = new List(); foreach (FaceEdge faceEdgeToAdd in face.FaceEdges()) { - var newVertex = discreteMeshes[areaIndex].CreateVertex(faceEdgeToAdd.firstVertex.Position); + var newVertex = discreteMeshes[areaIndex].CreateVertex(faceEdgeToAdd.FirstVertex.Position); faceVertices.Add(newVertex); } diff --git a/PartPreviewWindow/View3D/MeshViewerWidget.cs b/PartPreviewWindow/View3D/MeshViewerWidget.cs index a3c83d63f..01025f6df 100644 --- a/PartPreviewWindow/View3D/MeshViewerWidget.cs +++ b/PartPreviewWindow/View3D/MeshViewerWidget.cs @@ -380,9 +380,8 @@ namespace MatterHackers.MeshVisualizer faceData.Textures.Add(BedImage); foreach (FaceEdge faceEdge in face.FaceEdges()) { - FaceEdgeTextureUvData edgeUV = FaceEdgeTextureUvData.Get(faceEdge); - edgeUV.TextureUV.Add(new Vector2((displayVolumeToBuild.x / 2 + faceEdge.firstVertex.Position.x) / displayVolumeToBuild.x, - (displayVolumeToBuild.y / 2 + faceEdge.firstVertex.Position.y) / displayVolumeToBuild.y)); + faceEdge.SetUv(0, new Vector2((displayVolumeToBuild.x / 2 + faceEdge.FirstVertex.Position.x) / displayVolumeToBuild.x, + (displayVolumeToBuild.y / 2 + faceEdge.FirstVertex.Position.y) / displayVolumeToBuild.y)); } } } diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index a1ef042a0..5fda6aa83 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -2394,7 +2394,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // change the color to be the right thing GLMeshTrianglePlugin glMeshPlugin = GLMeshTrianglePlugin.Get(meshAndTransform.MeshData, (faceEdge) => { - Vector3 normal = faceEdge.containingFace.normal; + Vector3 normal = faceEdge.ContainingFace.normal; normal = Vector3.TransformVector(normal, meshAndTransform.Matrix).GetNormal(); VertexColorData colorData = new VertexColorData(); diff --git a/SlicerConfiguration/Slicing/SliceLayers.cs b/SlicerConfiguration/Slicing/SliceLayers.cs index 9fc8554fe..9b9e52128 100644 --- a/SlicerConfiguration/Slicing/SliceLayers.cs +++ b/SlicerConfiguration/Slicing/SliceLayers.cs @@ -71,8 +71,8 @@ namespace MatterHackers.MatterControl.Slicing double maxZ = double.MinValue; foreach (FaceEdge faceEdge in face.FaceEdges()) { - minZ = Math.Min(minZ, faceEdge.firstVertex.Position.z); - maxZ = Math.Max(maxZ, faceEdge.firstVertex.Position.z); + minZ = Math.Min(minZ, faceEdge.FirstVertex.Position.z); + maxZ = Math.Max(maxZ, faceEdge.FirstVertex.Position.z); } for (int layerIndex = 0; layerIndex < layerCount; layerIndex++)