private bool ApplyModifiers(Vector2d joint1, ref Vector2d joint2) { var axis = UI.InputUtils.CheckPressed(Hotkey.ToolAxisLock); var perpendicularaxis = UI.InputUtils.CheckPressed(Hotkey.ToolPerpendicularAxisLock); var modified = false; if (axis || perpendicularaxis) { var angle = Angle.FromVector(_snapline.GetVector()); if (perpendicularaxis) { angle.Degrees -= 90; } joint2 = Utility.AngleLock(joint1, joint2, angle); modified = true; } return(modified); }
private void SetupRedOptions(PropertyTree tree) { var vec = _ownerline.GetVector(); var len = vec.Length; var angle = Angle.FromVector(vec); angle.Degrees += 90; var lineProp = tree.Add("Line Properties", 120); Console.WriteLine(_ownerline.GetType().ToString()); if (!(_ownerline is SceneryLine scenery)) { var id = new NumberProperty(lineProp) { Min = 0, Max = int.MaxValue - 1, NumberValue = _ownerline.ID, OnlyWholeNumbers = true, }; id.ValueChanged += (o, e) => { ChangeID((int)id.NumberValue); }; lineProp.Add("ID", id); } _length = new NumberProperty(lineProp) { Min = 0.0000001, Max = double.MaxValue - 1, NumberValue = len, }; _length.ValueChanged += (o, e) => { ChangeLength(_length.NumberValue); }; lineProp.Add("Length", _length); _angleProp = new NumberProperty(lineProp) { Min = 0, Max = 360, NumberValue = angle.Degrees, }; _angleProp.ValueChanged += (o, e) => { ChangeAngle(_angleProp.NumberValue); }; lineProp.Add("Angle", _angleProp); if (!(_ownerline is SceneryLine)) { var multilines = new NumberProperty(lineProp) { Min = 1, Max = int.MaxValue - 1, OnlyWholeNumbers = true, }; multilines.NumberValue = GetMultiLines(true).Count; multilines.ValueChanged += (o, e) => { Multiline((int)multilines.NumberValue); }; lineProp.Add("Multilines", multilines); } if (_ownerline is SceneryLine sceneryLine) { _width = new NumberProperty(lineProp) { Min = 0.1, Max = 25.5, NumberValue = _ownerline.Width, }; _width.ValueChanged += (o, e) => { ChangeWidth(_width.NumberValue); }; lineProp.Add("Width", _width); } if (_ownerline is RedLine red) { var acceleration = tree.Add("Acceleration", 120); var multiplier = new NumberProperty(acceleration) { Min = 1, Max = 255, NumberValue = red.Multiplier, OnlyWholeNumbers = true, }; multiplier.ValueChanged += (o, e) => { ChangeMultiplier((int)multiplier.NumberValue); }; acceleration.Add("Multiplier", multiplier); var accelinverse = GwenHelper.AddPropertyCheckbox( acceleration, "Inverse", red.inv ); accelinverse.ValueChanged += (o, e) => { using (var trk = _editor.CreateTrackWriter()) { var multi = GetMultiLines(false); foreach (var l in multi) { var cpy = (StandardLine)l.Clone(); cpy.Position = l.Position2; cpy.Position2 = l.Position; cpy.inv = accelinverse.IsChecked; UpdateLine(trk, l, cpy); } var owner = (StandardLine)_ownerline.Clone(); owner.Position = _ownerline.Position2; owner.Position2 = _ownerline.Position; owner.inv = accelinverse.IsChecked; UpdateOwnerLine(trk, owner); } }; } }
private void SetupBlueAndRedOptions(PropertyTree tree) { int currentMultiplier = 0; bool inv = false; StandardLine.Ext lineEXT = ((StandardLine)_ownerline).Extension; bool leftEXT = ((StandardLine)_ownerline).Extension == StandardLine.Ext.Both || ((StandardLine)_ownerline).Extension == StandardLine.Ext.Left; bool rightEXT = ((StandardLine)_ownerline).Extension == StandardLine.Ext.Both || ((StandardLine)_ownerline).Extension == StandardLine.Ext.Right; if (_ownerline is RedLine red) { currentMultiplier = red.Multiplier; inv = red.inv; } var table = tree.Add("Acceleration", 120); multiplier = new NumberProperty(table) { Min = -255, Max = 255, NumberValue = (inv ? -currentMultiplier : currentMultiplier), OnlyWholeNumbers = true, }; multiplier.ValueChanged += (o, e) => { if (multiplier.NumberValue < 0) { accelinverse.IsChecked = true; } else { accelinverse.IsChecked = false; } ChangeMultiplier((int)Math.Abs(multiplier.NumberValue)); }; table.Add("Multiplier", multiplier); multilines = new NumberProperty(table) { Min = 1, Max = 9999, OnlyWholeNumbers = true, }; multilines.NumberValue = GetMultiLines(true).Count; multilines.ValueChanged += (o, e) => { Multiline((int)multilines.NumberValue); }; table.Add("Multilines", multilines); accelinverse = GwenHelper.AddPropertyCheckbox( table, "Inverse", inv ); accelinverse.ValueChanged += (o, e) => { if (accelinverse.IsChecked) { if (multiplier.NumberValue > 0) { multiplier.NumberValue = -multiplier.NumberValue; } } else { multiplier.NumberValue = Math.Abs(multiplier.NumberValue); } using (var trk = _editor.CreateTrackWriter()) { var multi = GetMultiLines(false); foreach (var l in multi) { var cpy = (StandardLine)l.Clone(); cpy.Position = l.Position2; cpy.Position2 = l.Position; cpy.inv = accelinverse.IsChecked; UpdateLine(trk, l, cpy); } var owner = (StandardLine)_ownerline.Clone(); owner.Position = _ownerline.Position2; owner.Position2 = _ownerline.Position; owner.inv = accelinverse.IsChecked; UpdateOwnerLine(trk, owner); } var vec = _ownerline.GetVector(); var angle = Angle.FromVector(vec); angle.Degrees += 90; angleProp.NumberValue = angle.Degrees; }; multiplier.ValueChanged += (o, e) => { int val = (int)multiplier.NumberValue; if (val == 0) { accelinverse.Disable(); } else { accelinverse.Enable(); } }; if ((int)multiplier.NumberValue == 0) { accelinverse.Disable(); } table = tree.Add("Line Extensions (AGWs)", 120); leftAGW = GwenHelper.AddPropertyCheckbox(table, "Starting Extension", leftEXT); leftAGW.ValueChanged += (o, e) => { UpdateAGWs(leftAGW.IsChecked, rightAGW.IsChecked); }; rightAGW = GwenHelper.AddPropertyCheckbox(table, "Ending Extension", rightEXT); rightAGW.ValueChanged += (o, e) => { UpdateAGWs(leftAGW.IsChecked, rightAGW.IsChecked); }; }