improving editor
This commit is contained in:
parent
512ac181b3
commit
2d940e6246
5 changed files with 78 additions and 42 deletions
|
|
@ -53,14 +53,14 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
propertyEditor.UndoBuffer,
|
propertyEditor.UndoBuffer,
|
||||||
propertyEditor.Theme,
|
propertyEditor.Theme,
|
||||||
VertexBufferChanged,
|
VertexBufferChanged,
|
||||||
|
ref tabIndex,
|
||||||
vertexStorage.UnscaledOffset,
|
vertexStorage.UnscaledOffset,
|
||||||
vertexStorage.Scale,
|
vertexStorage.Scale,
|
||||||
(unscaledOffset, scale) =>
|
(unscaledOffset, scale) =>
|
||||||
{
|
{
|
||||||
vertexStorage.UnscaledOffset = unscaledOffset;
|
vertexStorage.UnscaledOffset = unscaledOffset;
|
||||||
vertexStorage.Scale = scale;
|
vertexStorage.Scale = scale;
|
||||||
}
|
});
|
||||||
);
|
|
||||||
|
|
||||||
if (property.Source is Object3D object3D)
|
if (property.Source is Object3D object3D)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -74,10 +74,16 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
UndoBuffer undoBuffer,
|
UndoBuffer undoBuffer,
|
||||||
ThemeConfig theme,
|
ThemeConfig theme,
|
||||||
Action vertexChanged,
|
Action vertexChanged,
|
||||||
|
ref int tabIndex,
|
||||||
Vector2 unscaledRenderOffset = default,
|
Vector2 unscaledRenderOffset = default,
|
||||||
double layerScale = 1,
|
double layerScale = 1,
|
||||||
Action<Vector2, double> scaleChanged = null)
|
Action<Vector2, double> scaleChanged = null)
|
||||||
{
|
{
|
||||||
|
// remember the initial tab index
|
||||||
|
initialTabIndex = tabIndex;
|
||||||
|
// and add to the tab index the number of controls we plan to add
|
||||||
|
tabIndex += 2;
|
||||||
|
|
||||||
HAnchor = HAnchor.Stretch;
|
HAnchor = HAnchor.Stretch;
|
||||||
BackgroundOutlineWidth = 1;
|
BackgroundOutlineWidth = 1;
|
||||||
BackgroundColor = theme.BackgroundColor;
|
BackgroundColor = theme.BackgroundColor;
|
||||||
|
|
@ -127,49 +133,42 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
|
|
||||||
private void AddPositionControls(ThemeConfig theme, FlowLayoutWidget toolBar)
|
private void AddPositionControls(ThemeConfig theme, FlowLayoutWidget toolBar)
|
||||||
{
|
{
|
||||||
var tabIndex = 0;
|
var tabIndex = initialTabIndex;
|
||||||
xEditWidget = new ThemedNumberEdit(0, theme, singleCharLabel: 'X', allowNegatives: true, allowDecimals: true, pixelWidth: VectorXYEditWidth, tabIndex: tabIndex)
|
xEditWidget = new ThemedNumberEdit(0, theme, singleCharLabel: 'X', allowNegatives: true, allowDecimals: true, pixelWidth: VectorXYEditWidth)
|
||||||
{
|
{
|
||||||
TabIndex = tabIndex++,
|
TabIndex = tabIndex++,
|
||||||
SelectAllOnFocus = true,
|
SelectAllOnFocus = true,
|
||||||
Margin = theme.ButtonSpacing,
|
Margin = theme.ButtonSpacing,
|
||||||
VAnchor = VAnchor.Center,
|
VAnchor = VAnchor.Center,
|
||||||
|
Enabled = false,
|
||||||
};
|
};
|
||||||
xEditWidget.ActuallNumberEdit.InternalNumberEdit.MaxDecimalsPlaces = 3;
|
xEditWidget.ActuallNumberEdit.InternalNumberEdit.MaxDecimalsPlaces = 3;
|
||||||
xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) =>
|
xEditWidget.ActuallNumberEdit.EditComplete += (sender, e) =>
|
||||||
{
|
{
|
||||||
if (controlPointBeingDragged > -1)
|
var oldPosition = vertexStorage[controlPointBeingDragged].Position;
|
||||||
{
|
var newPosition = new Vector2(xEditWidget.ActuallNumberEdit.Value, yEditWidget.ActuallNumberEdit.Value);
|
||||||
var vertexData = vertexStorage[controlPointBeingDragged];
|
var delta = newPosition - oldPosition;
|
||||||
if (vertexData.Hint == CommandHint.C4Point)
|
OffsetSelectedPoint(delta);
|
||||||
{
|
|
||||||
// the prev point
|
|
||||||
if (controlPointBeingDragged > 0)
|
|
||||||
{
|
|
||||||
controlPointBeingDragged--;
|
|
||||||
vertexData = new VertexData(vertexData.Command, new Vector2(vertexData.Position.X, xEditWidget.ActuallNumberEdit.Value), vertexData.Hint);
|
|
||||||
controlPointBeingDragged++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
xEditWidget.ActuallNumberEdit.KeyDown += NumberField.InternalTextEditWidget_KeyDown;
|
xEditWidget.ActuallNumberEdit.KeyDown += NumberField.InternalTextEditWidget_KeyDown;
|
||||||
toolBar.AddChild(xEditWidget);
|
toolBar.AddChild(xEditWidget);
|
||||||
|
|
||||||
yEditWidget = new ThemedNumberEdit(0, theme, 'Y', allowNegatives: true, allowDecimals: true, pixelWidth: VectorXYEditWidth, tabIndex: tabIndex)
|
yEditWidget = new ThemedNumberEdit(0, theme, 'Y', allowNegatives: true, allowDecimals: true, pixelWidth: VectorXYEditWidth)
|
||||||
{
|
{
|
||||||
TabIndex = tabIndex++,
|
TabIndex = tabIndex++,
|
||||||
SelectAllOnFocus = true,
|
SelectAllOnFocus = true,
|
||||||
VAnchor = VAnchor.Center,
|
VAnchor = VAnchor.Center,
|
||||||
Margin = theme.ButtonSpacing,
|
Margin = theme.ButtonSpacing,
|
||||||
|
Enabled = false,
|
||||||
};
|
};
|
||||||
yEditWidget.ActuallNumberEdit.InternalNumberEdit.MaxDecimalsPlaces = 3;
|
yEditWidget.ActuallNumberEdit.InternalNumberEdit.MaxDecimalsPlaces = 3;
|
||||||
yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) =>
|
yEditWidget.ActuallNumberEdit.EditComplete += (sender, e) =>
|
||||||
{
|
{
|
||||||
|
var oldPosition = vertexStorage[controlPointBeingDragged].Position;
|
||||||
|
var newPosition = new Vector2(xEditWidget.ActuallNumberEdit.Value, yEditWidget.ActuallNumberEdit.Value);
|
||||||
|
var delta = newPosition - oldPosition;
|
||||||
|
OffsetSelectedPoint(delta);
|
||||||
};
|
};
|
||||||
yEditWidget.ActuallNumberEdit.KeyDown += NumberField.InternalTextEditWidget_KeyDown;
|
yEditWidget.ActuallNumberEdit.KeyDown += NumberField.InternalTextEditWidget_KeyDown;
|
||||||
|
|
||||||
|
|
@ -193,7 +192,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
};
|
};
|
||||||
|
|
||||||
// the sharp corner button
|
// the sharp corner button
|
||||||
var sharpButton = new ThemedRadioTextButton("S", theme)
|
sharpButton = new ThemedRadioTextButton("S", theme)
|
||||||
{
|
{
|
||||||
BackgroundColor = theme.SlightShade,
|
BackgroundColor = theme.SlightShade,
|
||||||
HoverColor = theme.SlightShade.WithAlpha(75),
|
HoverColor = theme.SlightShade.WithAlpha(75),
|
||||||
|
|
@ -206,7 +205,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
sharpButton.Click += (s, e) => { controlPointConstraint = ControlPointConstraint.Sharp; };
|
sharpButton.Click += (s, e) => { controlPointConstraint = ControlPointConstraint.Sharp; };
|
||||||
|
|
||||||
// the aligned corner button
|
// the aligned corner button
|
||||||
var alignedButton = new ThemedRadioTextButton("A", theme)
|
alignedButton = new ThemedRadioTextButton("A", theme)
|
||||||
{
|
{
|
||||||
BackgroundColor = theme.SlightShade,
|
BackgroundColor = theme.SlightShade,
|
||||||
HoverColor = theme.SlightShade.WithAlpha(75),
|
HoverColor = theme.SlightShade.WithAlpha(75),
|
||||||
|
|
@ -219,7 +218,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
alignedButton.Click += (s, e) => { controlPointConstraint = ControlPointConstraint.Aligned; };
|
alignedButton.Click += (s, e) => { controlPointConstraint = ControlPointConstraint.Aligned; };
|
||||||
|
|
||||||
// the free button
|
// the free button
|
||||||
var freeButton = new ThemedRadioTextButton("F", theme)
|
freeButton = new ThemedRadioTextButton("F", theme)
|
||||||
{
|
{
|
||||||
BackgroundColor = theme.SlightShade,
|
BackgroundColor = theme.SlightShade,
|
||||||
HoverColor = theme.SlightShade.WithAlpha(75),
|
HoverColor = theme.SlightShade.WithAlpha(75),
|
||||||
|
|
@ -243,6 +242,10 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
private int controlPointBeingHovered = -1;
|
private int controlPointBeingHovered = -1;
|
||||||
private ThemedNumberEdit yEditWidget;
|
private ThemedNumberEdit yEditWidget;
|
||||||
private ThemedNumberEdit xEditWidget;
|
private ThemedNumberEdit xEditWidget;
|
||||||
|
private int initialTabIndex;
|
||||||
|
private ThemedRadioTextButton sharpButton;
|
||||||
|
private ThemedRadioTextButton alignedButton;
|
||||||
|
private ThemedRadioTextButton freeButton;
|
||||||
|
|
||||||
public void CenterPartInView()
|
public void CenterPartInView()
|
||||||
{
|
{
|
||||||
|
|
@ -260,7 +263,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
|
|
||||||
public override void OnDraw(Graphics2D graphics2D)
|
public override void OnDraw(Graphics2D graphics2D)
|
||||||
{
|
{
|
||||||
new VertexSourceApplyTransform(vertexStorage, TotalTransform).RenderCurve(graphics2D, theme.TextColor, 2, true, theme.PrimaryAccentColor.Blend(theme.TextColor, .5), theme.PrimaryAccentColor);
|
new VertexSourceApplyTransform(vertexStorage, TotalTransform).RenderPath(graphics2D, theme.TextColor, 2, true, theme.PrimaryAccentColor.Blend(theme.TextColor, .5), theme.PrimaryAccentColor);
|
||||||
|
|
||||||
//if (vertexStorage.GetType().GetCustomAttributes(typeof(PathEditorFactory.ShowAxisAttribute), true).FirstOrDefault() is PathEditorFactory.ShowAxisAttribute showAxisAttribute)
|
//if (vertexStorage.GetType().GetCustomAttributes(typeof(PathEditorFactory.ShowAxisAttribute), true).FirstOrDefault() is PathEditorFactory.ShowAxisAttribute showAxisAttribute)
|
||||||
{
|
{
|
||||||
|
|
@ -316,31 +319,62 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
xEditWidget.Enabled= false;
|
xEditWidget.Enabled= false;
|
||||||
yEditWidget.Text = "---";
|
yEditWidget.Text = "---";
|
||||||
yEditWidget.Enabled= false;
|
yEditWidget.Enabled= false;
|
||||||
|
|
||||||
|
sharpButton.Enabled = false;
|
||||||
|
alignedButton.Enabled = false;
|
||||||
|
freeButton.Enabled = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xEditWidget.Enabled = true;
|
UpdateControlsForSelection();
|
||||||
yEditWidget.Enabled = true;
|
|
||||||
UpdatePositionControls();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MouseButtons.Middle:
|
case MouseButtons.Middle:
|
||||||
mouseDownTransformOverride = ETransformState.Move;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MouseButtons.Right:
|
case MouseButtons.Right:
|
||||||
mouseDownTransformOverride = ETransformState.Scale;
|
if (Keyboard.IsKeyDown(Keys.ControlKey))
|
||||||
|
{
|
||||||
|
mouseDownTransformOverride = ETransformState.Scale;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mouseDownTransformOverride = ETransformState.Move;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdatePositionControls()
|
private void UpdateControlsForSelection()
|
||||||
{
|
{
|
||||||
xEditWidget.Value = vertexStorage[controlPointBeingDragged].Position.X;
|
xEditWidget.Enabled = true;
|
||||||
yEditWidget.Value = vertexStorage[controlPointBeingDragged].Position.Y;
|
yEditWidget.Enabled = true;
|
||||||
|
sharpButton.Enabled = true;
|
||||||
|
alignedButton.Enabled = true;
|
||||||
|
freeButton.Enabled = true;
|
||||||
|
|
||||||
|
var selected = vertexStorage[controlPointBeingDragged];
|
||||||
|
xEditWidget.Value = selected.Position.X;
|
||||||
|
yEditWidget.Value = selected.Position.Y;
|
||||||
|
|
||||||
|
switch(selected.Hint)
|
||||||
|
{
|
||||||
|
case CommandHint.C4Point:
|
||||||
|
case CommandHint.C4ControlToPoint:
|
||||||
|
case CommandHint.C4ControlFromPrev:
|
||||||
|
freeButton.Checked = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (selected.IsMoveTo
|
||||||
|
|| selected.IsLineTo)
|
||||||
|
{
|
||||||
|
sharpButton.Checked = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GetControlPointIndex(Vector2 mousePosition)
|
private int GetControlPointIndex(Vector2 mousePosition)
|
||||||
|
|
@ -379,8 +413,7 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
{
|
{
|
||||||
ScalingTransform.inverse_transform(ref mouseDelta);
|
ScalingTransform.inverse_transform(ref mouseDelta);
|
||||||
OffsetSelectedPoint(mouseDelta);
|
OffsetSelectedPoint(mouseDelta);
|
||||||
vertexChanged?.Invoke();
|
UpdateControlsForSelection();
|
||||||
UpdatePositionControls();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -395,7 +428,8 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
private void OffsetSelectedPoint(Vector2 delta)
|
private void OffsetSelectedPoint(Vector2 delta)
|
||||||
{
|
{
|
||||||
if (controlPointBeingDragged < 0
|
if (controlPointBeingDragged < 0
|
||||||
|| controlPointBeingDragged >= vertexStorage.Count)
|
|| controlPointBeingDragged >= vertexStorage.Count
|
||||||
|
|| delta.LengthSquared == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -421,6 +455,8 @@ namespace MatterHackers.MatterControl.DesignTools
|
||||||
// only drag the point
|
// only drag the point
|
||||||
vertexStorage[controlPointBeingDragged] = new VertexData(vertexData.Command, vertexData.Position + delta, vertexData.Hint);
|
vertexStorage[controlPointBeingDragged] = new VertexData(vertexData.Command, vertexData.Position + delta, vertexData.Hint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vertexChanged?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DoTranslateAndZoom(MouseEventArgs mouseEvent)
|
private void DoTranslateAndZoom(MouseEventArgs mouseEvent)
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ namespace MatterHackers.MatterControl
|
||||||
{
|
{
|
||||||
if (item is ILibraryAssetStream streamInterface)
|
if (item is ILibraryAssetStream streamInterface)
|
||||||
{
|
{
|
||||||
// If we are loding a binary MCX file, coy its assets
|
// If we are loding a binary MCX file, copy its assets
|
||||||
await CopyAssetsFromBinaryMcx(streamInterface);
|
await CopyAssetsFromBinaryMcx(streamInterface);
|
||||||
|
|
||||||
using (var contentStream = await streamInterface.GetStream(progressReporter))
|
using (var contentStream = await streamInterface.GetStream(progressReporter))
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ namespace MatterHackers.MatterControl.Library
|
||||||
|
|
||||||
public DateTime DateModified { get; }
|
public DateTime DateModified { get; }
|
||||||
|
|
||||||
public virtual string ID => Util.GetLongHashCode(this.FilePath).ToString();
|
public virtual string ID => Util.GetLongHashCode(this.FilePath + DateModified.ToString()).ToString();
|
||||||
|
|
||||||
public virtual bool IsProtected => false;
|
public virtual bool IsProtected => false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit b2125420fc190b876dabccb44c0107832bd156fd
|
Subproject commit 9545c19b13d294e47d87ab3b9ae67366827072b3
|
||||||
Loading…
Add table
Add a link
Reference in a new issue