Пример #1
0
        protected override void BuildSVG()
        {
            base.BuildSVG();

            SampleGroup.Children.Clear();

            Definitions.Children.Add(SampleDefinition);
            PanZoomGroup.Children.Add(SampleGroup);

            //draw waveform
            Path.PathData.Clear();
            var coords    = new List <float>();
            var curveMove = 'M';

            foreach (var sample in Model.Samples)
            {
                coords.Add(sample.Time.Value);
                coords.Add(sample.Value.Value);
            }
            SvgPathBuilder.CreatePathSegment(curveMove, Path.PathData, coords, char.IsLower(curveMove));
            coords.Clear();

            SampleGroup.Children.Add(Path);

//			foreach (var sample in Samples)
//				sample.BuildSVGTo(SampleGroup);
        }
Пример #2
0
        void CreatePath(float x1, float y1, float x2, float y2, bool isLinear, bool easeIn, bool easeOut)
        {
            var coords    = new List <float>();
            var curveMove = 'M';

            var curveType = 'C';

            if (isLinear)
            {
                curveType = 'L';
            }

            coords.Add(x1);
            coords.Add(-y1);

            SvgPathBuilder.CreatePathSegment(curveMove, Path.PathData, coords, char.IsLower(curveMove));
            coords.Clear();

            if (!isLinear)
            {
                if (easeOut)
                {
                    coords.Add(x1 + (x2 - x1) * (float)Model.Start.EaseOut.Value.x);
                    coords.Add(-y1);
                }
                else
                {
                    coords.Add(x1 + (x2 - x1) * (1 / 3f));
                    coords.Add(-(y1 + (y2 - y1) * (1 / 3f)));
                }

                if (easeIn)
                {
                    coords.Add(x2 + (x2 - x1) * (float)Model.Start.EaseIn.Value.x);
                    coords.Add(-y2);
                }
                else
                {
                    coords.Add(x2 - (x2 - x1) * (1 / 3f));
                    coords.Add(-(y2 - (y2 - y1) * (1 / 3f)));
                }
            }

            coords.Add(x2);
            coords.Add(-y2);
            SvgPathBuilder.CreatePathSegment(curveType, Path.PathData, coords, char.IsLower(curveType));
        }
Пример #3
0
        protected override void CalcGeometry(SvgPath elem, Vector2 trans, Vector2 scale, int slice)
        {
            elem.PathData.Clear();

            var verts = FVerticesIn[slice];
            var cont1 = FControl1In[slice];
            var cont2 = FControl2In[slice];
            var comms = FCommandIn[slice];
            var arc   = FArcRotationIn[slice];

            var coords = new List <float>(7);

            for (int i = 0; i < verts.SliceCount; i++)
            {
                coords.Clear();

                var c = comms[i][0];

                //make sure the first and last command fits the specification
                if (i == 0)
                {
                    c = 'M';
                }
                else if (i == verts.SliceCount - 1)
                {
                    c = 'Z';
                }

                //fill in params
                switch (c)
                {
                case 'm':                         // relative moveto
                case 'M':                         // moveto

                    coords.Add(verts[i].X);
                    coords.Add(verts[i].Y);
                    break;

                case 'a':
                case 'A':

                    coords.Add(cont1[i].X);
                    coords.Add(cont1[i].Y);

                    coords.Add(arc[i] * 360);

                    coords.Add(cont2[i].X);
                    coords.Add(cont2[i].Y);

                    coords.Add(verts[i].X);
                    coords.Add(verts[i].Y);

                    break;

                case 'l':                         // relative lineto
                case 'L':                         // lineto

                    coords.Add(verts[i].X);
                    coords.Add(verts[i].Y);
                    break;

                case 'H':                         // horizontal lineto
                case 'h':                         // relative horizontal lineto

                    coords.Add(verts[i].X);
                    break;

                case 'V':                         // vertical lineto
                case 'v':                         // relative vertical lineto

                    coords.Add(verts[i].Y);
                    break;

                case 'Q':                         // curveto
                case 'q':                         // relative curveto

                    coords.Add(cont1[i].X);
                    coords.Add(cont1[i].Y);

                    coords.Add(verts[i].X);
                    coords.Add(verts[i].Y);
                    break;

                case 'T':                         // shorthand/smooth curveto
                case 't':                         // relative shorthand/smooth curveto

                    coords.Add(verts[i].X);
                    coords.Add(verts[i].Y);
                    break;

                case 'C':                         // curveto
                case 'c':                         // relative curveto

                    coords.Add(cont1[i].X);
                    coords.Add(cont1[i].Y);

                    coords.Add(cont2[i].X);
                    coords.Add(cont2[i].Y);

                    coords.Add(verts[i].X);
                    coords.Add(verts[i].Y);

                    break;

                case 'S':                         // shorthand/smooth curveto
                case 's':                         // relative shorthand/smooth curveto

                    coords.Add(cont1[i].X);
                    coords.Add(cont1[i].Y);

                    coords.Add(verts[i].X);
                    coords.Add(verts[i].Y);
                    break;
                }

                SvgPathBuilder.CreatePathSegment(c, elem.PathData, coords, char.IsLower(c));
            }
        }