Exemple #1
0
        internal static ManifestCompilationResult Compile(string AppName, int BackgroundColor, bool LightForegroundText, bool ShowNameOnSquare150x150Logo, byte[] Square70x70LogoData, byte[] Square150x150LogoData, string Square70x70LogoName, string Square150x150LogoName, string OptionalSquare70x70LogoFormat = null, string OptionalSquare150x150LogoFormat = null, string OptionalSquare70x70LogoDirectoryPath = null, string OptionalSquare150x150LogoDirectoryPath = null)
        {
            var Square70x70LogoFormat   = OptionalSquare70x70LogoFormat ?? ImageService.GetFormat(Square70x70LogoData);
            var Square150x150LogoFormat = OptionalSquare150x150LogoFormat ?? ImageService.GetFormat(Square150x150LogoData);

            var Square70x70LogoDirectoryPath   = OptionalSquare70x70LogoDirectoryPath ?? string.Empty;
            var Square150x150LogoDirectoryPath = OptionalSquare150x150LogoDirectoryPath ?? string.Empty;

            var Square70x70LogoFullName   = PathService.CombineName(Square70x70LogoName, Square70x70LogoFormat);
            var Square150x150LogoFullName = PathService.CombineName(Square150x150LogoName, Square150x150LogoFormat);

            var Square70x70LogoPath   = PathService.CombinePath(Square70x70LogoDirectoryPath, Square70x70LogoFullName);
            var Square150x150LogoPath = PathService.CombinePath(Square150x150LogoDirectoryPath, Square150x150LogoFullName);

            var VisualElements = new VisualElements();

            VisualElements.SetBackgroundColorOn(BackgroundColor);
            VisualElements.SetForegroundTextOn(LightForegroundText);
            VisualElements.SetShowNameOnSquare150x150LogoOn(ShowNameOnSquare150x150Logo);
            VisualElements.SetSquare70x70LogoOn(Square70x70LogoPath);
            VisualElements.SetSquare150x150LogoOn(Square150x150LogoPath);
            var Manifest = VisualElementsManifest.ManifestService.Create(VisualElements);

            var ManifestData     = StringFormatter.Serialize(Manifest);
            var ManifestFileName = ManifestNameBuilder.Build(AppName);

            var Components = new Dictionary <ManifestComponentType, ManifestComponentData>()
            {
                { ManifestComponentType.Manifest, new ManifestComponentData(ManifestData, ManifestFileName) },
                { ManifestComponentType.Square70x70Logo, new ManifestComponentData(Square70x70LogoData, Square70x70LogoPath) },
                { ManifestComponentType.Square150x150Logo, new ManifestComponentData(Square150x150LogoData, Square150x150LogoPath) },
            };

            return(new ManifestCompilationResult(Components));
        }
        public void LoadSession()
        {
            string fileName, title;

            if (!OpenFileDialog(false, out fileName, out title))
            {
                return;
            }
            lastOpenedFile      = fileName;
            lastOpenedFileTitle = title;
            BinaryFormatter bf = new BinaryFormatter();

            using (FileStream fs = new FileStream(fileName, FileMode.Open))
            {
                CurrentSession = (TaskSession)bf.Deserialize(fs);
            }
            CurrentSession.VisualElements = VisualElements;
            CurrentSession.Client         = new AwesomiumWrap();
            VisualElements.Clear();
            foreach (var e in CurrentSession.FunctionalElements)
            {
                CurrentSession.RestoreTask(e);
            }
            this.Title = title;

            Log(LogType.Message, "Session {0} was loaded", title);
        }
Exemple #3
0
                public void PaintSimulationZone(ISimulationGeneratorFactors factor, VisualElements visualElement)
                {
                    string factorValue1 = factor.GetFactorValue(FactorName1);
                    string factorValue2 = factor.GetFactorValue(FactorName2);

                    int index1 = values1.IndexOf(factorValue1);

                    if (index1 == -1)
                    {
                        values1.Add(factorValue1);
                        index1 = values1.Count - 1;
                    }

                    int index2 = values2.IndexOf(factorValue2);

                    if (index2 == -1)
                    {
                        values2.Add(factorValue2);
                        index2 = values2.Count - 1;
                    }

                    index1 = index1 % MaximumIndex1;
                    index2 = index2 % MaximumIndex2;
                    Setter1(visualElement, index1);
                    Setter2(visualElement, index2);
                }
 private void InitializeVisualElements(IEnumerable <T> source)
 {
     VisualElements.Clear();
     foreach (var element in source)
     {
         VisualElements.Add(element);
     }
 }
Exemple #5
0
 public VisualElementManagerMock(IEnumerable <Step> stepsToUseForInitialize)
     : this()
 {
     foreach (var step in stepsToUseForInitialize)
     {
         VisualElements.Add(new VisualElement(null)
         {
             ElementID = step.ElementID,
             WindowID  = Guid.Parse("df575070-f243-4e6d-bc14-a5196294cedf"),
         });
     }
 }
 private void LoadSelectedItem()
 {
     CurrentVisualElements           = new VisualElements(CurrentMenuItem.ManifestPath);
     TargetLabel.Text                = CurrentMenuItem.Target;
     MediumTilePreview.Text          = CurrentMenuItem.Name;
     BackgroundTextBox.Text          = CurrentVisualElements.BackgroundColor != Color.Empty ? ColorTranslator.ToHtml(CurrentVisualElements.BackgroundColor) : "";
     ForegroundDropdown.SelectedItem = CurrentVisualElements.ForegroundText;
     MediumTilePreview.TileImage     = CurrentMenuItem.Icon;
     MediumLogoTextBox.Text          = CurrentVisualElements.MediumLogo;
     SmallLogoTextBox.Text           = CurrentVisualElements.SmallLogo;
     ShowNameToggle.Checked          = CurrentVisualElements.ShowNameOnMediumLogo;
     ResetButton.Enabled             = CurrentVisualElements.UserGenerated;
 }
Exemple #7
0
                public void PaintSimulationZone(ISimulationGeneratorFactors factor, VisualElements visualElement)
                {
                    string factorValue = factor.GetFactorValue(FactorName);
                    int    index       = values.IndexOf(factorValue);

                    if (index == -1)
                    {
                        values.Add(factorValue);
                        index = values.Count - 1;
                    }
                    index = index % MaximumIndex;
                    Setter(visualElement, index);
                }
Exemple #8
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 #9
0
        public void buildgraph()
        {
            SeriesCollection.Clear();
            VisualElements.Clear();

            SeriesCollection.Add(
                new StackedColumnSeries
            {
                Values = new ChartValues <double> {
                    4, 5, 6, 8
                },
                StackMode  = StackMode.Values,    // this is not necessary, values is the default stack mode
                DataLabels = true
            }
                );
            SeriesCollection.Add(
                new StackedColumnSeries
            {
                Values = new ChartValues <double> {
                    2, 5, 6, 7
                },
                StackMode  = StackMode.Values,
                DataLabels = true
            }
                );


            //adding series updates and animates the chart
            SeriesCollection.Add(new StackedColumnSeries
            {
                Values = new ChartValues <double> {
                    6, 2, 7
                },
                StackMode = StackMode.Values
            });

            //adding values also updates and animates
            SeriesCollection[2].Values.Add(4d);

            Labels = new[] { "Chrome", "Mozilla", "Opera", "IE" };

            VisualElementTest vstest = new VisualElementTest();

            countpos++;
            VisualElements.Add(vstest.visual);
            DataContext = this;
        }
Exemple #10
0
                public void PaintSimulationZone(ISimulationGeneratorFactors factor, VisualElements visualElement, Series series)
                {
                    string factorValue = factor.GetFactorValue(FactorName);

                    int index1 = values.IndexOf(factorValue);

                    if (index1 == -1)
                    {
                        values.Add(factorValue);
                        index1 = values.Count - 1;
                    }
                    int index2 = index1 / MaximumIndex1;

                    index2 = index2 % MaximumIndex2;
                    index1 = index1 % MaximumIndex1;
                    Setter1(visualElement, index1);
                    Setter2(visualElement, index2);
                }
Exemple #11
0
        internal static ManifestCompilationResult Compile(string AppName, int BackgroundColor, bool LightForegroundText, bool ShowNameOnSquare150x150Logo)
        {
            var VisualElements = new VisualElements();

            VisualElements.SetBackgroundColorOn(BackgroundColor);
            VisualElements.SetForegroundTextOn(LightForegroundText);
            VisualElements.SetShowNameOnSquare150x150LogoOn(ShowNameOnSquare150x150Logo);
            var Manifest = VisualElementsManifest.ManifestService.Create(VisualElements);

            var ManifestData     = StringFormatter.Serialize(Manifest);
            var ManifestFileName = ManifestNameBuilder.Build(AppName);

            var Components = new Dictionary <ManifestComponentType, ManifestComponentData>()
            {
                { ManifestComponentType.Manifest, new ManifestComponentData(ManifestData, ManifestFileName) }
            };

            return(new ManifestCompilationResult(Components));
        }
Exemple #12
0
        internal LayoutLine GetStringBoundaryLine(SIString str, FingerboardSide dir)
        {
            LayoutLine boundary = null;

            if (dir == FingerboardSide.Bass)
            {
                boundary = VisualElements.OfType <StringCenter>().FirstOrDefault(c => c.Right.Index == str.Index);
            }
            else
            {
                boundary = VisualElements.OfType <StringCenter>().FirstOrDefault(c => c.Left.Index == str.Index);
            }

            if (boundary == null)
            {
                return(VisualElements.OfType <FingerboardSideEdge>().First(e => e.Side == dir));
            }

            return(boundary);
        }
Exemple #13
0
                public void PaintSimulationZone(ISimulationGeneratorFactors factor, VisualElements visualElement, Series series)
                {
                    int index;

                    if (FactorName == "Graph series")
                    {
                        index = (series.Parent as Graph).Series.IndexOf(series);
                    }
                    else
                    {
                        string factorValue = factor.GetFactorValue(FactorName);

                        index = values.IndexOf(factorValue);
                        if (index == -1)
                        {
                            values.Add(factorValue);
                            index = values.Count - 1;
                        }
                    }

                    index = index % MaximumIndex;
                    Setter(visualElement, index);
                }
Exemple #14
0
 public void PaintSimulationZone(ISimulationGeneratorFactors factor, VisualElements visualElement)
 {
     visualElement.colour = Colour;
     visualElement.Line   = LineType;
     visualElement.Marker = MarkerType;
 }
 public void Clear()
 {
     _visualStart = 0;
     _elements.Clear();
     VisualElements.Clear();
 }
Exemple #16
0
 /// <summary>A static setter function for line type from an index</summary>
 /// <param name="visualElement">The visual element to change</param>
 /// <param name="index">The index</param>
 public static void SetLineType(VisualElements visualElement, int index)
 {
     visualElement.Line = (LineType)Enum.GetValues(typeof(LineType)).GetValue(index);
 }
Exemple #17
0
 /// <summary>A static setter function for marker from an index</summary>
 /// <param name="visualElement">The visual element to change</param>
 /// <param name="index">The index</param>
 public static void SetMarker(VisualElements visualElement, int index)
 {
     visualElement.Marker = (MarkerType)Enum.GetValues(typeof(MarkerType)).GetValue(index);
 }
Exemple #18
0
        /// <summary>
        /// Paint the visual elements (colour, line and marker) of all simulation / zone pairs.
        /// </summary>
        /// <param name="factors">The simulation/zone pairs to change</param>
        /// <param name="storage">Storage reader</param>
        /// <param name="baseData">Base data</param>
        private List <SeriesDefinition> ConvertToSeriesDefinitions(List <ISimulationGeneratorFactors> factors, IStorageReader storage, DataTable baseData)
        {
            // Create an appropriate painter object
            SimulationZonePainter.IPainter painter;
            if (FactorToVaryColours != null)
            {
                if (FactorToVaryLines == FactorToVaryColours)
                {
                    painter = new SimulationZonePainter.SequentialPainterTwoFactors()
                    {
                        FactorName    = FactorToVaryColours,
                        MaximumIndex1 = ColourUtilities.Colours.Length,
                        MaximumIndex2 = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type
                        Setter1       = VisualElements.SetColour,
                        Setter2       = VisualElements.SetLineType
                    }
                }
                ;
                else if (FactorToVaryMarkers == FactorToVaryColours)
                {
                    painter = new SimulationZonePainter.SequentialPainterTwoFactors()
                    {
                        FactorName    = FactorToVaryColours,
                        MaximumIndex1 = ColourUtilities.Colours.Length,
                        MaximumIndex2 = Enum.GetValues(typeof(MarkerType)).Length - 1,// minus 1 to avoid None type
                        Setter1       = VisualElements.SetColour,
                        Setter2       = VisualElements.SetMarker
                    }
                }
                ;
                else if (FactorToVaryLines != null)
                {
                    painter = new SimulationZonePainter.DualPainter()
                    {
                        FactorName1   = FactorToVaryColours,
                        FactorName2   = FactorToVaryLines,
                        MaximumIndex1 = ColourUtilities.Colours.Length,
                        MaximumIndex2 = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type
                        Setter1       = VisualElements.SetColour,
                        Setter2       = VisualElements.SetLineType
                    }
                }
                ;
                else if (FactorToVaryMarkers != null)
                {
                    painter = new SimulationZonePainter.DualPainter()
                    {
                        FactorName1   = FactorToVaryColours,
                        FactorName2   = FactorToVaryMarkers,
                        MaximumIndex1 = ColourUtilities.Colours.Length,
                        MaximumIndex2 = Enum.GetValues(typeof(MarkerType)).Length - 1,// minus 1 to avoid None type
                        Setter1       = VisualElements.SetColour,
                        Setter2       = VisualElements.SetMarker
                    }
                }
                ;
                else
                {
                    painter = new SimulationZonePainter.SequentialPainter()
                    {
                        FactorName   = FactorToVaryColours,
                        MaximumIndex = ColourUtilities.Colours.Length,
                        Setter       = VisualElements.SetColour
                    }
                };
            }
            else if (FactorToVaryLines != null)
            {
                painter = new SimulationZonePainter.SequentialPainter()
                {
                    FactorName   = FactorToVaryLines,
                    MaximumIndex = Enum.GetValues(typeof(LineType)).Length - 1, // minus 1 to avoid None type
                    Setter       = VisualElements.SetLineType
                };
            }
            else if (FactorToVaryMarkers != null)
            {
                painter = new SimulationZonePainter.SequentialPainter()
                {
                    FactorName   = FactorToVaryMarkers,
                    MaximumIndex = Enum.GetValues(typeof(MarkerType)).Length - 1,// minus 1 to avoid None type
                    Setter       = VisualElements.SetMarker
                };
            }
            else
            {
                painter = new SimulationZonePainter.DefaultPainter()
                {
                    Colour = Colour, LineType = Line, MarkerType = Marker
                }
            };

            List <SeriesDefinition> definitions = new List <SeriesDefinition>();

            // Apply the painter to all simulation zone objects.
            foreach (ISimulationGeneratorFactors factor in factors)
            {
                VisualElements visualElement = new VisualElements();
                visualElement.colour        = Colour;
                visualElement.Line          = Line;
                visualElement.LineThickness = LineThickness;
                visualElement.Marker        = Marker;
                visualElement.MarkerSize    = MarkerSize;
                painter.PaintSimulationZone(factor, visualElement);

                SeriesDefinition seriesDefinition = new Models.Graph.SeriesDefinition();
                seriesDefinition.type          = Type;
                seriesDefinition.marker        = visualElement.Marker;
                seriesDefinition.line          = visualElement.Line;
                seriesDefinition.markerSize    = visualElement.MarkerSize;
                seriesDefinition.lineThickness = visualElement.LineThickness;
                seriesDefinition.colour        = visualElement.colour;
                seriesDefinition.xFieldName    = XFieldName;
                seriesDefinition.yFieldName    = YFieldName;
                seriesDefinition.xAxis         = XAxis;
                seriesDefinition.yAxis         = YAxis;
                seriesDefinition.xFieldUnits   = storage.GetUnits(TableName, XFieldName);
                seriesDefinition.yFieldUnits   = storage.GetUnits(TableName, YFieldName);
                seriesDefinition.showInLegend  = ShowInLegend;
                factor.Factors.ForEach(f => seriesDefinition.title += f.Value);
                if (IncludeSeriesNameInLegend)
                {
                    seriesDefinition.title += ": " + Name;
                }
                if (Checkpoint != "Current")
                {
                    seriesDefinition.title += " (" + Checkpoint + ")";
                }
                DataView data = new DataView(baseData);
                try
                {
                    data.RowFilter = CreateRowFilter(storage, new ISimulationGeneratorFactors[] { factor },
                                                     DataTableUtilities.GetColumnNames(baseData));
                }
                catch
                {
                }
                if (data.Count > 0)
                {
                    seriesDefinition.data  = data.ToTable();
                    seriesDefinition.x     = GetDataFromTable(seriesDefinition.data, XFieldName);
                    seriesDefinition.y     = GetDataFromTable(seriesDefinition.data, YFieldName);
                    seriesDefinition.x2    = GetDataFromTable(seriesDefinition.data, X2FieldName);
                    seriesDefinition.y2    = GetDataFromTable(seriesDefinition.data, Y2FieldName);
                    seriesDefinition.error = GetErrorDataFromTable(seriesDefinition.data, YFieldName);
                    if (Cumulative)
                    {
                        seriesDefinition.y = MathUtilities.Cumulative(seriesDefinition.y as IEnumerable <double>);
                    }
                    if (CumulativeX)
                    {
                        seriesDefinition.x = MathUtilities.Cumulative(seriesDefinition.x as IEnumerable <double>);
                    }
                }
                definitions.Add(seriesDefinition);
            }
            return(definitions);
        }
Exemple #19
0
 /// <summary>A static setter function for colour from an index</summary>
 /// <param name="visualElement">The visual element to change</param>
 /// <param name="index">The index</param>
 public static void SetColour(VisualElements visualElement, int index)
 {
     visualElement.colour = ColourUtilities.Colours[index];
 }
Exemple #20
0
 protected override void InitializeVisualElements()
 {
     _visualElements = new VisualElements("appbar_page_text", "Data Files", "View and manipulate data files");
 }
Exemple #21
0
 private T AddVisualElement <T>(T elem) where T : VisualElement
 {
     VisualElements.Add(elem);
     elem.Layout = this;
     return(elem);
 }
Exemple #22
0
 internal StringCenter GetStringsCenter(SIString left, SIString right)
 {
     return(VisualElements.OfType <StringCenter>().FirstOrDefault(c =>
                                                                  (left.Index == c.Right.Index || left.Index == c.Left.Index) &&
                                                                  (right.Index == c.Right.Index || right.Index == c.Left.Index)));
 }
Exemple #23
0
 VisualElement IVisualElementManager.GetVisualElement(string elementID, bool includeUnloaded)
 {
     return(VisualElements.FirstOrDefault(e => e.ElementID == elementID));
 }
Exemple #24
0
 public T GetElement <T>(Predicate <T> predicate) where T : VisualElement
 {
     return(VisualElements.OfType <T>().FirstOrDefault(x => predicate(x)));
 }
Exemple #25
0
 public IEnumerable <T> GetElements <T>(Predicate <T> predicate) where T : VisualElement
 {
     return(VisualElements.OfType <T>().Where(x => predicate(x)));
 }
Exemple #26
0
 public IEnumerable <T> GetElements <T>() where T : VisualElement
 {
     return(VisualElements.OfType <T>());
 }
Exemple #27
0
        private void FinishFingerboardShape()
        {
            var trebleSideEdge = VisualElements.OfType <FingerboardSideEdge>().First(e => e.Side == FingerboardSide.Treble);
            var bassSideEdge   = VisualElements.OfType <FingerboardSideEdge>().First(e => e.Side == FingerboardSide.Bass);
            var trebleNutFret  = VisualElements.OfType <FretLine>().First(f => f.IsNut && f.Strings.Contains(FirstString));
            var bassNutFret    = VisualElements.OfType <FretLine>().First(f => f.IsNut && f.Strings.Contains(LastString));

            //create inward fingerboard edges from nut
            if (!Strings.AllEqual(s => s.StartingFret))
            {
                foreach (var str in Strings)
                {
                    if (str.Next != null && str.StartingFret != str.Next.StartingFret)
                    {
                        var nut1 = VisualElements.OfType <FretLine>().First(f => f.IsNut && f.Strings.Contains(str));
                        var nut2 = VisualElements.OfType <FretLine>().First(f => f.IsNut && f.Strings.Contains(str.Next));
                        AddVisualElement(new FingerboardEdge(nut1.Points.First(), nut2.Points.Last())
                        {
                            IsSideEdge = true
                        });

                        //var center = GetStringBoundaryLine(str, FingerboardSide.Bass) as StringCenter;
                        //var p1 = center.GetRelativePoint(str.LayoutLine, str.LayoutLine.P1);
                        //var p2 = center.GetRelativePoint(str.Next.LayoutLine, str.Next.LayoutLine.P1);
                        //AddVisualElement(new FingerboardEdge(p1, p2) { IsSideEdge = true });
                    }
                }
            }

            var trebSideNutInter = PointM.Empty;

            if (trebleNutFret.Intersects(trebleSideEdge, out trebSideNutInter))
            {
                trebleSideEdge.P1 = trebSideNutInter;
            }

            var bassSideNutInter = PointM.Empty;

            if (bassNutFret.Intersects(bassSideEdge, out bassSideNutInter))
            {
                bassSideEdge.P1 = bassSideNutInter;
            }

            trebleSideEdge.RealEnd = trebleSideEdge.P2;
            bassSideEdge.RealEnd   = bassSideEdge.P2;

            var trebleLastFret = VisualElements.OfType <FretLine>().First(f => f.FretIndex == FirstString.NumberOfFrets && f.Strings.Contains(FirstString));
            var bassLastFret   = VisualElements.OfType <FretLine>().First(f => f.FretIndex == LastString.NumberOfFrets && f.Strings.Contains(LastString));

            PointM trebleEndPoint = trebleLastFret.Points.Last();
            PointM bassEndPoint   = bassLastFret.Points.First();

            if (!Margins.LastFret.IsEmpty)
            {
                trebleEndPoint += trebleSideEdge.Direction * Margins.LastFret;
                bassEndPoint   += bassSideEdge.Direction * Margins.LastFret;
            }

            //split physical from virtual fingerboard
            var virtualTrebleEdge = AddVisualElement(new LayoutLine(trebleEndPoint, trebleSideEdge.P2, VisualElementType.FingerboardContinuation));
            var virtualBassEdge   = AddVisualElement(new LayoutLine(bassEndPoint, bassSideEdge.P2, VisualElementType.FingerboardContinuation));

            trebleSideEdge.P2 = virtualTrebleEdge.P1;
            bassSideEdge.P2   = virtualBassEdge.P1;

            if (NumberOfStrings > 1)
            {
                var bridgeLine = new LayoutPolyLine(Strings.Select(s => s.LayoutLine.P2), VisualElementType.BridgeLine);
                VisualElements.Add(bridgeLine);

                var bridgeTrebleInter = PointM.Empty;
                if (bridgeLine.Intersects(virtualTrebleEdge, out bridgeTrebleInter))
                {
                    virtualTrebleEdge.P2 = bridgeTrebleInter;
                }

                var bridgeBassInter = PointM.Empty;
                if (bridgeLine.Intersects(virtualBassEdge, out bridgeBassInter))
                {
                    virtualBassEdge.P2 = bridgeBassInter;
                }
            }

            if (trebleLastFret.Strings.Count() == NumberOfStrings && trebleLastFret.IsStraight && trebleLastFret.FretIndex == MaximumFret)
            {
                AddVisualElement(new FingerboardEdge(bassSideEdge.P2, trebleSideEdge.P2));
            }
            else if (!Margins.LastFret.IsEmpty)
            {
                var fretLines  = VisualElements.OfType <FretLine>();
                var edgePoints = new List <PointM>();

                for (int i = NumberOfStrings - 1; i >= 0; i--)
                {
                    var strLastFret = fretLines.First(fl => fl.FretIndex == Strings[i].NumberOfFrets && fl.Strings.Contains(Strings[i]));
                    var trebleSide  = GetStringBoundaryLine(Strings[i], FingerboardSide.Treble);
                    var bassSide    = GetStringBoundaryLine(Strings[i], FingerboardSide.Bass);
                    var pt1         = PointM.Empty;
                    var pt2         = PointM.Empty;

                    if (!strLastFret.Intersects(bassSide, out pt1))
                    {
                        pt1 = strLastFret.Points.First();
                    }

                    if (!strLastFret.Intersects(trebleSide, out pt2))
                    {
                        pt2 = strLastFret.Points.Last();
                    }

                    pt1 += bassSide.Direction * Margins.LastFret;
                    pt2 += trebleSide.Direction * Margins.LastFret;

                    edgePoints.Add(pt1);
                    edgePoints.Add(pt2);
                }

                //edgePoints.RemoveAll(p => p.IsEmpty);
                edgePoints = edgePoints.Distinct().ToList();
                var fretboardEdge = AddVisualElement(new FingerboardEdge(edgePoints));
                //fretboardEdge.InterpolateSpline();
            }

            var fingerboardEnds = VisualElements.OfType <FingerboardEdge>();

            var trebleLine = FirstString.LayoutLine;

            foreach (var end in fingerboardEnds)
            {
                if (end.Intersects(trebleLine, out PointM inter, false))
                {
                    AddVisualElement(new LayoutLine(trebleLine.P1, inter, VisualElementType.FingerboardMargin));
                    break;
                }
            }

            if (LastString != FirstString)
            {
                var bassLine = LastString.LayoutLine;

                foreach (var end in fingerboardEnds)
                {
                    if (end.Intersects(bassLine, out PointM inter, false))
                    {
                        AddVisualElement(new LayoutLine(bassLine.P1, inter, VisualElementType.FingerboardMargin));
                        break;
                    }
                }
            }
        }
Exemple #28
0
 protected override void InitializeVisualElements()
 {
     _visualElements = new VisualElements("appbar_layer", "Workspace", "View and manipulate data files");
 }
Exemple #29
0
 protected override void InitializeVisualElements()
 {
     _visualElements = new VisualElements("appbar_magnify", "Search", "Pick one of the search modes");
 }
Exemple #30
0
        private void LayoutStrings(Measure[] nutStringPos, Measure[] bridgeStringPos)
        {
            var stringLines = VisualElements.OfType <StringLine>();

            if (NumberOfStrings == 1)
            {
                ConstructString(Strings[0], nutStringPos[0], bridgeStringPos[0]);
            }
            else if (ScaleLengthMode != ScaleLengthType.Multiple)
            {
                var trebleStr = ConstructString(Strings[0], nutStringPos[0], bridgeStringPos[0]);
                var bassStr   = ConstructString(Strings[NumberOfStrings - 1], nutStringPos[NumberOfStrings - 1], bridgeStringPos[NumberOfStrings - 1]);

                var maxHeight = Measure.Max(trebleStr.Bounds.Height, bassStr.Bounds.Height);
                AdjustStringVerticalPosition(trebleStr, maxHeight);
                AdjustStringVerticalPosition(bassStr, maxHeight);

                var nutLine     = Line.FromPoints(trebleStr.P1.ToVector(), bassStr.P1.ToVector());
                var bridgeLine  = Line.FromPoints(trebleStr.P2.ToVector(), bassStr.P2.ToVector());
                var twelfthFret = new LayoutLine(PointM.Average(trebleStr.P1, trebleStr.P2), PointM.Average(bassStr.P1, bassStr.P2));

                //create the remaining strings by distributing them equally between the outer strings
                for (int i = 1; i < NumberOfStrings - 1; i++)
                {
                    var nutPos        = nutLine.GetPointForX(nutStringPos[i].NormalizedValue);
                    var bridgePos     = bridgeLine.GetPointForX(bridgeStringPos[i].NormalizedValue);
                    var createdString = AddVisualElement(new StringLine(Strings[i],
                                                                        PointM.FromVector(nutPos, nutStringPos[i].Unit),
                                                                        PointM.FromVector(bridgePos, bridgeStringPos[i].Unit)));

                    //strings distributed equally between the outer strings (which are tapered/angled) do not have their centers aligned
                    //so we correct the string length (at bridge) so that its center is aligned with the twelfth fret

                    var middle         = createdString.GetIntersection(twelfthFret);
                    var distFromNut    = PointM.Distance(createdString.P1, middle);
                    var distFromBridge = PointM.Distance(createdString.P2, middle);

                    var stringCenterOffset = Measure.Abs(distFromNut - distFromBridge);

                    if (!CompensateFretPositions && stringCenterOffset > Measure.Mm(0.05))
                    {
                        //adjust the end of the string so that it's center is above the 12th fret
                        createdString.P2 = createdString.P1 + (createdString.Direction * distFromNut * 2);
                    }

                    Strings[i].RecalculateLengths();//store the physical length of the string
                }
            }
            else
            {
                for (int i = 0; i < NumberOfStrings; i++)
                {
                    ConstructString(Strings[i], nutStringPos[i], bridgeStringPos[i]);
                }

                //*** Adjust strings position for multiscale
                var maxPerpHeight = Measure.FromNormalizedValue(stringLines.Max(l => l.Bounds.Height.NormalizedValue), UnitOfMeasure.Mm);
                foreach (var strLine in stringLines)
                {
                    AdjustStringVerticalPosition(strLine, maxPerpHeight);
                }
            }

            //calculate starting fret position if different from 0 (nut)
            foreach (var str in Strings)
            {
                if (str.StartingFret != 0)
                {
                    var startingFretPosRatio = GetEqualTemperedFretPosition(str.StartingFret);
                    var stringVector         = str.PlaceFretsRelativeToString ? str.LayoutLine.Direction * -1 : new Vector(0, 1);
                    var startingFretPos      = str.LayoutLine.P2 + (stringVector * str.CalculatedLength * startingFretPosRatio);

                    if (!str.PlaceFretsRelativeToString)
                    {
                        startingFretPos = str.LayoutLine.SnapToLine(startingFretPos, LineSnapDirection.Horizontal);
                    }

                    str.LayoutLine.P1 = startingFretPos;
                    str.RecalculateLengths();
                }
            }

            for (int i = 0; i < NumberOfStrings - 1; i++)
            {
                AddVisualElement(new StringCenter(Strings[i + 1].LayoutLine, Strings[i].LayoutLine));
            }
        }