PE: Added - Bounding Box Snapping, it dont matter what size objects are they will always snap perfectly.
This commit is contained in:
@@ -289,10 +289,29 @@ namespace FlaxEditor.Gizmo
|
|||||||
{
|
{
|
||||||
float snapValue = isScaling ? ScaleSnapValue : TranslationSnapValue;
|
float snapValue = isScaling ? ScaleSnapValue : TranslationSnapValue;
|
||||||
_translationScaleSnapDelta += delta;
|
_translationScaleSnapDelta += delta;
|
||||||
delta = new Vector3(
|
if (!isScaling && snapValue < 0)
|
||||||
(int)(_translationScaleSnapDelta.X / snapValue) * snapValue,
|
{
|
||||||
(int)(_translationScaleSnapDelta.Y / snapValue) * snapValue,
|
//PE: Snap to object bounding box
|
||||||
(int)(_translationScaleSnapDelta.Z / snapValue) * snapValue);
|
GetSelectedObjectsBounds(out var b, out _);
|
||||||
|
float X, Y, Z;
|
||||||
|
if (b.Minimum.X < 0) X = Math.Abs(b.Minimum.X) + b.Maximum.X;
|
||||||
|
else X = b.Minimum.X - b.Maximum.X;
|
||||||
|
if (b.Minimum.Y < 0) Y = Math.Abs(b.Minimum.Y) + b.Maximum.Y;
|
||||||
|
else Y = b.Minimum.Y - b.Maximum.Y;
|
||||||
|
if (b.Minimum.Z < 0) Z = Math.Abs(b.Minimum.Z) + b.Maximum.Z;
|
||||||
|
else Z = b.Minimum.Z - b.Maximum.Z;
|
||||||
|
delta = new Vector3(
|
||||||
|
(int)(_translationScaleSnapDelta.X / X) * X,
|
||||||
|
(int)(_translationScaleSnapDelta.Y / Y) * Y,
|
||||||
|
(int)(_translationScaleSnapDelta.Z / Z) * Z);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delta = new Vector3(
|
||||||
|
(int)(_translationScaleSnapDelta.X / snapValue) * snapValue,
|
||||||
|
(int)(_translationScaleSnapDelta.Y / snapValue) * snapValue,
|
||||||
|
(int)(_translationScaleSnapDelta.Z / snapValue) * snapValue);
|
||||||
|
}
|
||||||
_translationScaleSnapDelta -= delta;
|
_translationScaleSnapDelta -= delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -310,6 +310,10 @@ namespace FlaxEditor.Viewport
|
|||||||
var button = translateSnappingCM.AddButton(v.ToString());
|
var button = translateSnappingCM.AddButton(v.ToString());
|
||||||
button.Tag = v;
|
button.Tag = v;
|
||||||
}
|
}
|
||||||
|
var buttonBB = translateSnappingCM.AddButton("Bounding Box");
|
||||||
|
buttonBB.Tag = -1.0f;
|
||||||
|
|
||||||
|
|
||||||
translateSnappingCM.ButtonClicked += OnWidgetTranslateSnapClick;
|
translateSnappingCM.ButtonClicked += OnWidgetTranslateSnapClick;
|
||||||
translateSnappingCM.VisibleChanged += OnWidgetTranslateSnapShowHide;
|
translateSnappingCM.VisibleChanged += OnWidgetTranslateSnapShowHide;
|
||||||
_translateSnapping.Parent = translateSnappingWidget;
|
_translateSnapping.Parent = translateSnappingWidget;
|
||||||
@@ -640,7 +644,10 @@ namespace FlaxEditor.Viewport
|
|||||||
{
|
{
|
||||||
var v = (float)button.Tag;
|
var v = (float)button.Tag;
|
||||||
TransformGizmo.TranslationSnapValue = v;
|
TransformGizmo.TranslationSnapValue = v;
|
||||||
_translateSnapping.Text = v.ToString();
|
if (v < 0.0f)
|
||||||
|
_translateSnapping.Text = "Bounding Box";
|
||||||
|
else
|
||||||
|
_translateSnapping.Text = v.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnWidgetTranslateSnapShowHide(Control control)
|
private void OnWidgetTranslateSnapShowHide(Control control)
|
||||||
|
|||||||
Reference in New Issue
Block a user