コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                    }
                };
            }
        }
コード例 #3
0
        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);
            };
        }