Exemplo n.º 1
0
        public void EventOccurred(IEventData data, EventType type)
        {
            var line = data as PathRenderInfo;

            if (line != null)
            {
                int   op        = line.GetOperation();
                var   color     = GetColorNumber(line.GetStrokeColor());
                float linewidth = line.GetLineWidth();
                var   path      = line.GetPath();
                var   subpaths  = path.GetSubpaths();
                int   count     = subpaths.Count;

                // check for stroke
                if (op != 1)
                {
                    return;
                }

                if (color < 2)
                {
                    return;
                }

                // check the identity matrix (CTM)
                var ctm = line.GetCtm();

                var sign_x = ctm.Get(0);
                var rot_x  = ctm.Get(1);
                var zero_x = ctm.Get(2);
                var rot_y  = ctm.Get(3);
                var sign_y = ctm.Get(4);
                var zero_y = ctm.Get(5);

                if (zero_x != 0 || zero_y != 0 || rot_x != 0 || rot_y != 0)
                {
                    throw new InvalidOperationException();
                }

                if (sign_x != 1 || sign_y != 1)
                {
                    throw new InvalidOperationException();
                }

                foreach (var subp in subpaths)
                {
                    if (subp.IsEmpty() || subp.IsSinglePointOpen())
                    {
                        continue;
                    }

                    if (!subp.IsClosed())
                    {
                        PdfReaderException.AlwaysThrow("!subp.IsClosed()");
                    }

                    var segs = subp.GetSegments()
                               .SelectMany(s => s.GetBasePoints())
                               .ToArray();

                    float x1 = (float)segs.Min(s => s.x);
                    float x2 = (float)segs.Max(s => s.x);
                    float y1 = (float)segs.Min(s => s.y);
                    float y2 = (float)segs.Max(s => s.y);

                    float translate_x = ctm.Get(6);
                    float translate_y = ctm.Get(7);

                    var mark = new MarkLine()
                    {
                        X         = x1 + translate_x,
                        H         = y1 + translate_y,
                        Width     = x2 - x1,
                        Height    = y2 - y1,
                        LineWidth = linewidth,
                        Color     = color
                    };

                    if (color < 2)
                    {
                        PdfReaderException.AlwaysThrow("Invalid color");
                    }

                    if (mark.X < 0 || mark.H < 0)
                    {
                        PdfReaderException.AlwaysThrow("mark.X < 0 || mark.H < 0");
                    }

                    _blockSet.Add(mark);
                }
            }
        }
Exemplo n.º 2
0
 public SeriesItem()
 {
     data      = new List <double>();
     markPoint = new MarkPoint();
     markLine  = new MarkLine();
 }
Exemplo n.º 3
0
        /// <summary>
        /// 数据项初始化
        /// </summary>
        /// <param name="option"></param>
        private void OptionSeries(Option option)
        {
            SeriesRectangle series = new SeriesRectangle {
                Name = "最高温度", Type = "line"
            };

            MarkPoint          mp            = new MarkPoint();
            MarkPointDataThree markPointData = new MarkPointDataThree {
                Type = "max", Name = "最大"
            };
            MarkPointDataThree markPointDataT = new MarkPointDataThree {
                Type = "min", Name = "最小的值"
            };

            mp.Data          = new MarkPointData[] { markPointData, markPointDataT };
            series.MarkPoint = mp;

            MarkLine ml = new MarkLine
            {
                //Data = new MarkLineData[]
                //{
                //    new MarkLineDataThree {Name = "最小", Type = "min"},
                //    new MarkLineDataThree {Name = "最大", Type = "max"},
                //    new MarkLineDataThree {Name = "平均", Type = "average"},
                //},
                DataGroup = new MarkLineData[, ]
                {
                    {
                        new MarkLineDataThree {
                            Name = "最小", Type = "min"
                        },
                        new MarkLineDataThree {
                            Name = "最大", Type = "max"
                        },
                    }
                },
            };

            series.MarkLine = ml;

            series.Data = new SeriesData[]
            {
                new SeriesDataOne {
                    Value = "12"
                },
                new SeriesDataOne {
                    Value = "11"
                },
                new SeriesDataOne {
                    Value = "13"
                },
                new SeriesDataOne {
                    Value = "14"
                },
                new SeriesDataOne {
                    Value = "12"
                },
                new SeriesDataOne {
                    Value = "18"
                },
                new SeriesDataOne {
                    Value = "19"
                },
                new SeriesDataOne {
                    Value = "22"
                },
            };
            option.Series = new Series[] { series };
        }