Exemple #1
0
        public void RebuildLayout()
        {
            if (LayoutChanges.Count == 1 && LayoutChanges[0] is PropertyChange pc && pc.Property == nameof(LeftHanded))
            {
                if (VisualElements.Count > 0)
                {
                    VisualElements.ForEach(e => e.FlipHandedness());
                    isLayoutDirty = false;
                    LayoutChanges.Clear();
                    OnLayoutUpdated();
                    return;
                }
            }

            VisualElements.Clear();
            for (int i = 0; i < NumberOfStrings; i++)
            {
                Strings[i].ClearLayoutData();
            }

            _CachedBounds = RectangleM.Empty;

            if (StringSpacing is StringSpacingSimple)
            {
                (StringSpacing as StringSpacingSimple).CalculateAdjustedPositions();
            }

            Measure nutCenter    = Measure.Zero;
            Measure bridgeCenter = Measure.Zero;

            Measure[] nutStringPos    = StringSpacing.GetStringPositions(FingerboardEnd.Nut, out nutCenter);
            Measure[] bridgeStringPos = StringSpacing.GetStringPositions(FingerboardEnd.Bridge, out bridgeCenter);

            LayoutStrings(nutStringPos, bridgeStringPos);
            CreateFingerboardEdges();
            PlaceFrets();
            FinishFingerboardShape();

            var layoutBounds = GetLayoutBounds();

            VisualElements.Add(new LayoutLine(new PointM(Measure.Zero, layoutBounds.Top), new PointM(Measure.Zero, layoutBounds.Bottom), VisualElementType.CenterLine));

            if (LeftHanded)
            {
                VisualElements.ForEach(e => e.FlipHandedness());
            }

            isLayoutDirty = false;
            LayoutChanges.Clear();
            OnLayoutUpdated();
        }
Exemple #2
0
        public void Save(Stream stream)
        {
            var root = new XElement("Layout");

            //*** BASIC PARAMETERS ***
            if (!string.IsNullOrEmpty(LayoutName))
            {
                root.Add(new XAttribute("Name", LayoutName));
            }

            LayoutVersion = CURRENT_LAYOUT_VERSION;
            root.Add(new XAttribute("Version", LayoutVersion));

            root.Add(new XComment("Temperaments: " + Enum.GetNames(typeof(Temperament)).Aggregate((i, j) => i + ", " + j)));
            root.Add(SerializeProperty("Temperament", FretsTemperament));

            root.Add(SerializeProperty("LeftHanded", LeftHanded));
            root.Add(SerializeProperty("FretCompensation", CompensateFretPositions));

            root.Add(new XComment("LengthFunctions: " + Enum.GetNames(typeof(LengthFunction)).Aggregate((i, j) => i + ", " + j)));
            root.Add(CurrentScaleLength.Serialize("ScaleLength"));
            root.Add(Margins.Serialize("FingerboardMargins"));

            var stringsElem = new XElement("Strings", new XAttribute("Count", NumberOfStrings));

            for (int i = 0; i < NumberOfStrings; i++)
            {
                //stringsElem.Add(SerializationHelper.GenericSerialize(Strings[i], "String"));
                stringsElem.Add(Strings[i].Serialize("String"));
            }
            root.Add(stringsElem);

            if (NumberOfStrings > 1)
            {
                root.Add(new XComment(string.Format("StringSpacingAlignment: {0}",
                                                    Enum.GetNames(typeof(StringSpacingAlignment)).Aggregate((i, j) => i + ", " + j)
                                                    )
                                      ));
                root.Add(new XComment(string.Format("StringSpacingMethod: {0}",
                                                    Enum.GetNames(typeof(StringSpacingMethod)).Aggregate((i, j) => i + ", " + j)
                                                    )
                                      ));
                root.Add(StringSpacing.Serialize("StringSpacings"));
            }

            var doc = new XDocument(root);

            doc.Save(stream);
        }