Making base more consistent with web version

This commit is contained in:
LarsBrubaker 2020-05-14 20:19:47 -07:00
parent 63d6a630a9
commit 47771e6c19
2 changed files with 62 additions and 20 deletions

View file

@ -28,6 +28,7 @@ either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
@ -84,6 +85,18 @@ namespace MatterHackers.MatterControl.DesignTools
[DisplayName("Height")]
public double ExtrusionHeight { get; set; } = 5;
[ReadOnly(true)]
public string NoBaseMessage { get; set; } = "No base is added under your part. Switch to a different base option to create a base.";
[DisplayName("")]
[ReadOnly(true)]
public string SpaceHolder1 { get; set; } = "";
[DisplayName("")]
[ReadOnly(true)]
public string SpaceHolder2 { get; set; } = "";
[EnumDisplay(Mode = EnumDisplayAttribute.PresentationMode.Buttons)]
public CenteringTypes Centering { get; set; } = CenteringTypes.Weighted;
@ -323,12 +336,14 @@ namespace MatterHackers.MatterControl.DesignTools
VertexStorage rawVectorShape = basePolygons.PolygonToPathStorage();
var vectorShape = new VertexSourceApplyTransform(rawVectorShape, Affine.NewScaling(1.0 / scalingForClipper));
var mesh = VertexSourceToMesh.Extrude(vectorShape, zHeight: ExtrusionHeight);
mesh.Translate(new Vector3(0, 0, -ExtrusionHeight + bottomWithoutBase));
var baseObject = new Object3D()
{
Mesh = VertexSourceToMesh.Extrude(vectorShape, zHeight: ExtrusionHeight)
Mesh = mesh
};
Children.Add(baseObject);
baseObject.Mesh.Translate(new Vector3(0, 0, -ExtrusionHeight + bottomWithoutBase));
}
else
{
@ -340,10 +355,26 @@ namespace MatterHackers.MatterControl.DesignTools
public void UpdateControls(PublicPropertyChange change)
{
change.SetRowVisible(nameof(BaseSize), () => BaseType != BaseTypes.None);
change.SetRowVisible(nameof(InfillAmount), () => BaseType == BaseTypes.Outline);
change.SetRowVisible(nameof(Centering), () => BaseType == BaseTypes.Circle);
change.SetRowVisible(nameof(ExtrusionHeight), () => BaseType != BaseTypes.None);
var changeSet = new Dictionary<string, bool>();
changeSet.Add(nameof(NoBaseMessage), BaseType == BaseTypes.None);
changeSet.Add(nameof(SpaceHolder1), BaseType == BaseTypes.None || BaseType == BaseTypes.Rectangle);
changeSet.Add(nameof(SpaceHolder2), BaseType == BaseTypes.None);
changeSet.Add(nameof(BaseSize), BaseType != BaseTypes.None);
changeSet.Add(nameof(InfillAmount), BaseType == BaseTypes.Outline);
changeSet.Add(nameof(Centering), BaseType == BaseTypes.Circle);
changeSet.Add(nameof(ExtrusionHeight), BaseType != BaseTypes.None);
// first turn on all the settings we want to see
foreach (var kvp in changeSet.Where(c => c.Value))
{
change.SetRowVisible(kvp.Key, () => kvp.Value);
}
// then turn off all the settings we want to hide
foreach (var kvp in changeSet.Where(c => !c.Value))
{
change.SetRowVisible(kvp.Key, () => kvp.Value);
}
}
}
}

View file

@ -580,21 +580,32 @@ namespace MatterHackers.MatterControl.DesignTools
}
else if (propertyValue is string stringValue)
{
// create a string editor
var field = new TextField(theme);
field.Initialize(0);
field.SetValue(stringValue, false);
field.Content.HAnchor = HAnchor.Stretch;
RegisterValueChanged(field, (valueString) => valueString);
rowContainer = CreateSettingsRow(property, field, theme);
var label = rowContainer.Children.First();
if (field is TextField)
if (readOnly)
{
var spacer = rowContainer.Children.OfType<HorizontalSpacer>().FirstOrDefault();
spacer.HAnchor = HAnchor.Absolute;
spacer.Width = Math.Max(0, 100 - label.Width);
var valueField = new TextWidget(stringValue, textColor: theme.TextColor, pointSize: 10);
rowContainer = new SettingsRow(property.DisplayName.Localize(),
property.Description.Localize(),
valueField,
theme);
}
else // normal edit row
{
// create a string editor
var field = new TextField(theme);
field.Initialize(0);
field.SetValue(stringValue, false);
field.Content.HAnchor = HAnchor.Stretch;
RegisterValueChanged(field, (valueString) => valueString);
rowContainer = CreateSettingsRow(property, field, theme);
var label = rowContainer.Children.First();
if (field is TextField)
{
var spacer = rowContainer.Children.OfType<HorizontalSpacer>().FirstOrDefault();
spacer.HAnchor = HAnchor.Absolute;
spacer.Width = Math.Max(0, 100 - label.Width);
}
}
}
else if (propertyValue is char charValue)