Example #1
0
 public RenderPoint(Point ACenter, SoundPoint ALink)
 {
     Link   = ALink;
     Center = ACenter;
     Region = new EllipseGeometry(ACenter, Radius, Radius);
     Region.Freeze();
     Bounds = new Rect(ACenter.X - Radius, ACenter.Y - Radius, Radius * 2, Radius * 2);
 }
Example #2
0
        protected Geometry GeometryFromAnnotation(Annotation annotation)
        {
            if (annotation == null || annotation.Points == null || annotation.Points.Count == 0)
            {
                return(null);
            }

            if (annotation.Points.Count == 1)
            {
                Point           p       = new Point(annotation.Points[0].X + this.Left, annotation.Points[0].Y + this.Top);
                EllipseGeometry ellipse = new EllipseGeometry(p, 3.0, 3.0);

                if (ellipse.CanFreeze)
                {
                    ellipse.Freeze();
                }

                return(ellipse);
            }
            else if (annotation.Points.Count == 2)
            {
                Point        p1   = new Point(annotation.Points[0].X + this.Left, annotation.Points[0].Y + this.Top);
                Point        p2   = new Point(annotation.Points[1].X + this.Left, annotation.Points[1].Y + this.Top);
                LineGeometry line = new LineGeometry(p1, p2);

                if (line.CanFreeze)
                {
                    line.Freeze();
                }

                return(line);
            }
            else
            {
                StreamGeometry streamGeometry = new StreamGeometry();
                using (StreamGeometryContext sgc = streamGeometry.Open())
                {
                    Point start = new Point(annotation.Points[0].X + this.Left, annotation.Points[0].Y + this.Top);

                    sgc.BeginFigure(start, true, true);

                    for (int i = 1; i < annotation.Points.Count; i++)
                    {
                        Point next = new Point(annotation.Points[i].X + this.Left, annotation.Points[i].Y + this.Top);
                        sgc.LineTo(next, true, true);
                    }
                }

                if (streamGeometry.CanFreeze)
                {
                    streamGeometry.Freeze();
                }

                return(streamGeometry);
            }
        }
Example #3
0
        public EllipseGeometry GetInfluenceCircle(int gridSize, double radius)
        {
            if (_influenceCircle == null || _gridSizeScreenRect != gridSize || _influenceCircleRadius != radius)
            {
                _influenceCircle = new EllipseGeometry(GetScreenRectCenterPoint(gridSize), radius, radius);
                if (_influenceCircle.CanFreeze)
                {
                    _influenceCircle.Freeze();
                }

                _influenceCircleRadius = radius;
            }

            return(_influenceCircle);
        }
Example #4
0
        public Geometry GetHandle()
        {
            var freeableGeometry = _handles.FirstOrDefault(f => f.IsFree);

            if (freeableGeometry == null)
            {
                var geometry = new EllipseGeometry(new System.Windows.Point(0, 0), 10, 10);
                geometry.Freeze();

                freeableGeometry = new Freeable(geometry);
            }

            freeableGeometry.IsFree = false;
            _handles.Add(freeableGeometry);

            return(freeableGeometry.Geometry);
        }
        public override void Draw(DrawingContext context, Matrix matrix)
        {
            if (!this.ShouldDraw || !PlatformTypes.IsInstance(this.PlatformBrush, PlatformTypes.RadialGradientBrush, (ITypeResolver)this.Element.ProjectContext))
            {
                return;
            }
            Pen pen = new Pen((Brush)Brushes.Transparent, 15.0);

            pen.Freeze();
            Matrix          matrix1         = this.GetCompleteBrushTransformMatrix(true) * matrix;
            EllipseGeometry ellipseGeometry = new EllipseGeometry((Point)this.GetBrushPropertyAsWpf(RadialGradientBrushNode.CenterProperty), (double)this.GetBrushPropertyAsWpf(RadialGradientBrushNode.RadiusXProperty), (double)this.GetBrushPropertyAsWpf(RadialGradientBrushNode.RadiusYProperty));

            ellipseGeometry.Transform = (Transform) new MatrixTransform(matrix1);
            ellipseGeometry.Freeze();
            context.DrawGeometry((Brush)null, pen, (System.Windows.Media.Geometry)ellipseGeometry);
            context.DrawGeometry((Brush)null, this.ThinPen, (System.Windows.Media.Geometry)ellipseGeometry);
        }
Example #6
0
 public Path GetCircumCircle(Polygon polygon)
 {
     if (!circles.ContainsKey(polygon))
     {
         Triad           triad    = triangles[polygon];
         EllipseGeometry geometry = new EllipseGeometry();
         geometry.Center  = new Point(triad.CircumcircleX, triad.CircumcircleY);
         geometry.RadiusX = geometry.RadiusY = Math.Sqrt(triad.CircumcircleR2);
         geometry.Freeze();
         Path path = new Path();
         Panel.SetZIndex(path, CircleZIndex);
         path.StrokeThickness = CircleStrokeTickness;
         path.Stroke          = new SolidColorBrush(circleStrokeColor);
         path.Data            = geometry;
         circles[polygon]     = path;
     }
     return(circles[polygon]);
 }
Example #7
0
        protected override Geometry GetLayoutClip(Size layoutSlotSize)
        {
            Point    ellipsePoint = new Point(layoutSlotSize.Width / 2, layoutSlotSize.Height / 2);
            Geometry borderClip   = new EllipseGeometry(ellipsePoint,
                                                        layoutSlotSize.Width / 2.1, layoutSlotSize.Height / 2.1);

            borderClip.Freeze();

            Geometry baseClip = base.GetLayoutClip(layoutSlotSize);

            if (baseClip == null)
            {
                return(borderClip);
            }

            CombinedGeometry mergedClip = new CombinedGeometry(
                GeometryCombineMode.Intersect, baseClip, borderClip);

            mergedClip.Freeze();
            return(mergedClip);
        }
        private DrawingGroup CreateElement(Color color, int radius, Vector position)
        {
            var transparent = color;

            transparent.A = 1;

            EllipseGeometry geom = new EllipseGeometry(new Point(radius, radius), radius, radius);

            geom.Freeze();
            var d = new DrawingGroup();

            d.Children.Add(new GeometryDrawing(new RadialGradientBrush(color, transparent), new Pen(new SolidColorBrush(color), 1), geom));

            TransformGroup tg = new TransformGroup();

            tg.Children.Add(new TranslateTransform(position.X, position.Y));
            d.Transform = tg;

            MainVisualArea.Add(d);
            return(d);
        }
Example #9
0
        public Path CreateVertexPoint(Vertex vertex)
        {
            if (this.verticesPaths == null)
            {
                this.verticesPaths = new Dictionary <Vertex, Path>();
            }

            if (!this.verticesPaths.ContainsKey(vertex))
            {
                EllipseGeometry geometry = new EllipseGeometry();
                geometry.Center  = new Point(vertex.X, vertex.Y);
                geometry.RadiusX = geometry.RadiusY = VertexRadius;
                geometry.Freeze();
                Path path = new Path();
                path.StrokeThickness       = VertexTickness;
                path.Stroke                = new SolidColorBrush(VertexColor);
                path.Data                  = geometry;
                this.verticesPaths[vertex] = path;
            }
            return(this.verticesPaths[vertex]);
        }
Example #10
0
        protected override void OnRender(DrawingContext dc)
        {
            // Draw background
            dc.DrawRectangle(Brushes.White, null, new Rect(RenderSize));

            Transform t = new MatrixTransform(TheModel.GetTikzToScreenTransform().ToWpfMatrix());

            t.Freeze();

            Pen pen = new Pen(Brushes.WhiteSmoke, 1);

            pen.Freeze();

            TheModel.DrawRaster(
                (p1, p2) => dc.DrawLine(pen, t.Transform(p1), t.Transform(p2)),
                (r1, r2) =>
            {
                EllipseGeometry eg = new EllipseGeometry(new Point(0, 0), r1, r2);
                eg.Transform       = t;
                eg.Freeze();
                dc.DrawGeometry(null, pen, eg);
            });
        }
Example #11
0
        public virtual Drawing GetLightSource(LightColor color)
        {
            const double GunRange   = 0.05;
            const double CoreRange  = 0.16;
            const double CoreRange2 = CoreRange * 0.75;

            var drawingVisual = new DrawingVisual();

            using (var dc = drawingVisual.RenderOpen()) {
                var geometry = new StreamGeometry();
                using (var sgc = geometry.Open()) {
                    sgc.BeginFigure(new Point(0.5, 0.5 + GunRange), true, false);
                    sgc.LineTo(new Point(0.8, 0.5 + GunRange), true, false);
                    sgc.LineTo(new Point(0.8, 0.5 - GunRange), false, false);
                    sgc.LineTo(new Point(0.5, 0.5 - GunRange), true, false);
                    sgc.ArcTo(new Point(0.5, 0.5 + GunRange), new Size(0.2, 0.2), 0, true, SweepDirection.Counterclockwise, true, false);
                }
                geometry.Transform = DefaultScaleTransform;
                geometry.Freeze();
                dc.DrawGeometry(Brushes.Black, BlackPen, geometry);

                var ellipse = new EllipseGeometry(new Rect(0.5 - CoreRange - 0.195, 0.5 - CoreRange, CoreRange * 2, CoreRange * 2))
                {
                    Transform = DefaultScaleTransform
                };
                ellipse.Freeze();
                dc.DrawGeometry(GetBrush(color), null, ellipse);

                ellipse = new EllipseGeometry(new Rect(0.5 - CoreRange2 - 0.195, 0.5 - CoreRange2, CoreRange2 * 2, CoreRange2 * 2))
                {
                    Transform = DefaultScaleTransform
                };
                ellipse.Freeze();
                dc.DrawGeometry(GetDarkBrush(color), null, ellipse);
            }
            return(Freeze(drawingVisual.Drawing));
        }
        private void AddBranchAdornment(ITextViewLine line, SnapshotSpan span, LineCoverage coverage)
        {
            var diameter = _textView.LineHeight / _branchCoverageSpotHeightDivider;
            var spacing  = _branchCoverageSpotGap + diameter;
            var top      = (line.Height - diameter) / 2d;

            var brush = _brushesAndPens[coverage.BranchCoverageState].Brush;
            var pen   = _brushesAndPens[coverage.BranchCoverageState].Pen;

            var groupIndex = 0;
            var index      = 0;
            var left       = _sequenceCoverageLineWidth * 1.5d;

            foreach (var branchPoint in coverage.BranchesVisited)
            {
                foreach (var branch in branchPoint)
                {
                    var rect     = new Rect(left, line.Top + top, diameter, diameter);
                    var geometry = new EllipseGeometry(rect);
                    geometry.Freeze();

                    var brushOverride = brush;
                    var penOverride   = pen;
                    if (branch && coverage.BranchVisitors[groupIndex][index].Any(p => SelectedTests.Contains(p)))
                    {
                        brushOverride = _selectedBrushAndPen.Brush;
                        penOverride   = _selectedBrushAndPen.Pen;
                    }

                    var drawing = new GeometryDrawing(branch ? brushOverride : null, penOverride, geometry);
                    drawing.Freeze();

                    var drawingImage = new DrawingImage(drawing);
                    drawingImage.Freeze();

                    var image = new Image()
                    {
                        Source = drawingImage
                    };

                    var testMethod = coverage.BranchVisitors[groupIndex][index].FirstOrDefault();
                    if (testMethod != null)
                    {
                        image.MouseLeftButtonDown += (o, e) => e.Handled = true;
                        image.MouseLeftButtonUp   += (o, e) => _selectTestCommand.Execute(testMethod);
                        image.Cursor = Cursors.Hand;
                        image.Tag    = coverage.BranchVisitors[groupIndex][index].ToArray();
                        image.MouseRightButtonDown += (o, e) => e.Handled = true;
                        image.MouseRightButtonUp   += OnTestCoverageRightButtonUp;
                        SharedDictionaryManager.InitializeDictionaries(image.Resources.MergedDictionaries);
                    }

                    Canvas.SetLeft(image, geometry.Bounds.Left);
                    Canvas.SetTop(image, geometry.Bounds.Top);

                    _adornmentLayer.AddAdornment(AdornmentPositioningBehavior.TextRelative, span, null, image, null);

                    left += spacing;
                    index++;
                }
                groupIndex++;
                index = 0;

                left += spacing;
            }
        }
Example #13
0
        public PointSet[] GetSetsToDraw(Point leftTopView, Point rightBottomView, Window window)//, Matrix m)
        {
            lock (world.tickLocker)
            {
                calcOtherWatch.Restart();
                calcWatch.Restart();
                PointSet[] setsToDraw =
                    world.pointsManager.getPointsSets(
                        leftTopView.X, rightBottomView.X, leftTopView.Y, rightBottomView.Y,
                        maxPartiesRendered);
                calcGetSetsTimes.Add(calcOtherWatch.ElapsedMilliseconds);

                calcOtherWatch.Restart();
                int clustersDrawed = 0;
                int totalElements  = 0;
                foreach (Cluster c in world.pointsManager.clusters)
                {
                    if (c != null && c.idX >= world.pointsManager.li && c.idX <= world.pointsManager.ri && c.idY >= world.pointsManager.ti && c.idY <= world.pointsManager.bi)
                    {
                        clustersDrawed++;
                        totalElements += c.container.Values.Count;
                    }
                }
                calcIterateClustersTimes.Add(calcOtherWatch.ElapsedMilliseconds);

                calcOtherWatch.Restart();
                int    coloredGeometrySetLength = 0;
                double foodGetTime        = 0;
                int    foodGetCount       = 0;
                double createGeometryTime = 0;
                int    geometriesCreated  = 0;
                int    geometriesRestored = 0;
                //Parallel.For(0, coloredGeometry.Length - 1, (i) =>
                for (int i = 0; i < setsToDraw.Length; i++)
                {
                    PointSet        set = setsToDraw[i];
                    ColoredGeometry cg  = new ColoredGeometry();

                    Object val     = set.linkedObjects[CacheLastHashGeometryType];
                    uint   oldHash = 0;
                    if (val != null)
                    {
                        oldHash = (uint)val;
                    }
                    uint nowHash = set.hash;
                    if (oldHash == nowHash)
                    {
                        Object val2 = set.linkedObjects[CacheColoredGeometryType];
                        if (val2 != null)
                        {
                            geometriesRestored++;
                            continue;
                        }
                    }
                    geometriesCreated++;
                    set.linkedObjects[CacheLastHashGeometryType] = nowHash;

                    switch (set.type)
                    {
                    case World.ZoaType:
                        break;

                    case World.FoodType:
                        double size  = (set.joinDist * 2);
                        double alpha =
                            (world.pointsManager.lowestPointSize * world.pointsManager.lowestPointSize * set.points.Count * 4) /     //total food area
                            (Math.PI * size * size / 4);
                        if (alpha > 1)
                        {
                            alpha = 1;
                        }
                        coloredGeometrySetLength++;

                        double fire     = 0;
                        double grass    = 0;
                        double ocean    = 0;
                        double toxicity = 0;
                        foreach (StaticPoint p in set.points)
                        {
                            Food f = (Food)p.linkedObjects[World.WorldObjectType];    //world.food[p.id];
                            fire     += f.fire;
                            grass    += f.grass;
                            ocean    += f.ocean;
                            toxicity += f.toxicity;
                        }
                        toxicity /= set.points.Count;

                        /*Geometry g = new RectangleGeometry(
                         *      new Rect(
                         *          new Point(set.x - size / 2, set.y - size / 2),
                         *          new Point(set.x + size / 2, set.y + size / 2))
                         *  );*/
                        Geometry g = new EllipseGeometry(
                            new Rect(set.x - size / 2, set.y - size / 2, size, size)
                            );
                        g.Freeze();

                        double sum = fire + grass + ocean;
                        Color  c   = Color.FromArgb(
                            (byte)(alpha * 255),            //coeff * 255),
                            (byte)(fire / sum * 255),
                            (byte)(grass / sum * 255),
                            (byte)(ocean / sum * 255));
                        cg = new ColoredGeometry(g, c, null);
                        break;
                    }
                    set.linkedObjects[CacheColoredGeometryType] = cg;
                }//);
                createGeometryTime /= coloredGeometrySetLength;
                foodGetTime        /= foodGetCount;
                foodGetTimes.Add(foodGetTime);
                createGeometryTimes.Add(createGeometryTime);
                calcGeometryTimes.Add(calcOtherWatch.ElapsedMilliseconds);

                calcTimes.Add(calcWatch.ElapsedMilliseconds);

                if (calcTimes.Count > checkTimes)
                {
                    calcTimes.RemoveAt(0);
                }
                if (calcGetSetsTimes.Count > checkTimes)
                {
                    calcGetSetsTimes.RemoveAt(0);
                }
                if (calcIterateClustersTimes.Count > checkTimes)
                {
                    calcIterateClustersTimes.RemoveAt(0);
                }
                if (calcGeometryTimes.Count > checkTimes)
                {
                    calcGeometryTimes.RemoveAt(0);
                }

                int calcTime = 0;
                foreach (double d in calcTimes)
                {
                    calcTime += (int)d;
                }
                calcTime /= calcTimes.Count;

                int calcGetSetsTime = 0;
                foreach (double d in calcGetSetsTimes)
                {
                    calcGetSetsTime += (int)d;
                }
                calcGetSetsTime /= calcGetSetsTimes.Count;

                int calcIterateClustersTime = 0;
                foreach (double d in calcIterateClustersTimes)
                {
                    calcIterateClustersTime += (int)d;
                }
                calcIterateClustersTime /= calcIterateClustersTimes.Count;

                int calcGeometryTime = 0;
                foreach (double d in calcGeometryTimes)
                {
                    calcGeometryTime += (int)d;
                }
                calcGeometryTime /= calcGeometryTimes.Count;

                int renderTime = 0;
                lock (renderTimes)
                    foreach (double d in renderTimes)
                    {
                        renderTime += (int)d;
                    }
                if (renderTimes.Count > 0)
                {
                    renderTime /= renderTimes.Count;
                }

                try
                {
                    window.Dispatcher.Invoke(() =>
                    {
                        if (window.Title != null)
                        {
                            window.Title = String.Format(
                                "Clusters: {14}x{15}x{16} isGeneratingLayer: {17}|{18}%" +
                                " ClustersDrawed: {0}/{1}, Elements(Rendered/MaxRendered/InViewedClusters/Total): {2}/{3}/{4}/{5} " +
                                //"ElapsedTime: CalcSets/CalcClusters/CalcGeometry/CalcAll {6}/{7}/{8}/{9}ms" +
                                " Render {10}/Total {11}ms Geometries(Restored/Created): {12}/{13} FixedLayer: {19}",
                                //" CacheSize(CG/Drawings): {14}/{15}",
                                clustersDrawed, world.pointsManager.clusters.Length,
                                setsToDraw.Length, maxPartiesRendered, totalElements, world.pointsManager.pointsCount,
                                calcGetSetsTime, calcIterateClustersTime, calcGeometryTime,
                                calcTime, renderTime, calcTime + renderTime,
                                geometriesRestored, geometriesCreated,
                                world.pointsManager.clusters.GetLength(0), world.pointsManager.clusters.GetLength(1), world.pointsManager.clusters.GetLength(2),
                                world.pointsManager.isGeneratingLayer, (int)(world.pointsManager.layerGeneratingProgress * 100),
                                world.pointsManager.fixedLayerId);//,
                        }
                        //geometriesCache.Count, drawingsCache.Count);
                    });
                }
                catch (Exception e) { }

                return(setsToDraw);
            }
        }