protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) { RotarySwitch rotarySwitch = Visual as RotarySwitch; if (rotarySwitch != null) { if (rotarySwitch.DrawLines) { drawingContext.DrawDrawing(_lines); } foreach (SwitchPositionLabel label in _labels) { drawingContext.DrawText(label.Text, label.Location); } _imageBrush.RelativeTransform = new RotateTransform(rotarySwitch.KnobRotation, 0.5d, 0.5d); drawingContext.DrawRectangle(_imageBrush, null, _imageRect); } }
protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) { base.OnRender(drawingContext); if (IsBusy) { var centerX = ActualWidth / 2; var centerY = ActualHeight / 2; var drawing = new DrawingGroup(); var radius = 30.0; var ballSize = 10.0; var transform = new RotateTransform(); for (double i = 0; i < 8; ++i) { var color = (byte)(double)(((1.0 - i / 8.0) * 255.0)); drawing.Children.Add( new GeometryDrawing( new SolidColorBrush(Color.FromArgb(255, color, color, color)), null, new EllipseGeometry( new Point( centerX + radius * Math.Cos((Math.PI * 2 / 8.0) * i), centerY + radius * Math.Sin((Math.PI * 2 / 8.0) * i)), ballSize, ballSize))); } transform.CenterX = centerX; transform.CenterY = centerY; transform.BeginAnimation(RotateTransform.AngleProperty, new DoubleAnimation(0, 360, new Duration(TimeSpan.FromSeconds(1.5))) { RepeatBehavior = RepeatBehavior.Forever, }); drawing.Transform = transform; drawingContext.DrawDrawing(drawing); } }
private void DrawTiles(System.Windows.Media.DrawingContext dc) { TilesWideObject = (int)(this.ActualWidth / 4) + 1; TilesHighObject = (int)(this.ActualHeight / 4) + 1; int startX = (int)CurrentPointObject.X - (TilesWideObject / 2); int startY = (int)CurrentPointObject.Y - (TilesHighObject / 2); if (startX < 0) startX = 0; if (startY < 0) startY = 0; int endX = startX + TilesWideObject; int endY = startY + TilesHighObject; if (endX > GameWorldObject.GameMapWidth) { endX = GameWorldObject.GameMapWidth; startX = endX - TilesWideObject; } else if (startX < 0) { startX = 0; endX = TilesWideObject; } if (endY > GameWorldObject.GameMapHeight) { endY = GameWorldObject.GameMapHeight; startY = endY - TilesHighObject; } else if (startY < 0) { startY = 0; endY = TilesHighObject; } int CountX = 0; int CountY = 0; DrawingGroup dg = new DrawingGroup(); for (int x = startX; x < endX; x++) { for (int y = startY; y < endY; y++) { dg.Children.Add( new ImageDrawing(_mapTiles[GameWorldObject.GameMap[x, y].GraphicsTile.TileStartPoint], new Rect(CountX * 4, CountY * 4, 4, 4) )); dg.Children.Add( new GeometryDrawing( null, new Pen( new SolidColorBrush( Color.FromRgb(255, 0, 20)), .1), new RectangleGeometry( new Rect(CountX * 4, CountY * 4, 4, 4) ) ) ); CountY++; } CountY = 0; CountX++; } dg.Freeze(); dc.DrawDrawing(dg); //dc.DrawDrawing(DrawMainMapLocation()) }
private void DrawTiles(System.Windows.Media.DrawingContext dc) { TilesWideObject = (int)(this.ActualWidth / 64) + 1; TilesHighObject = (int)(this.ActualHeight / 64) + 1; int startX = (int)CurrentPointObject.X - (TilesWideObject / 2); int startY = (int)CurrentPointObject.Y - (TilesHighObject / 2); if (startX < 0) startX = 0; if (startY < 0) startY = 0; int endX = startX + TilesWideObject; int endY = startY + TilesHighObject; if (endX > GameWorldObject.GameMapWidth) { endX = GameWorldObject.GameMapWidth; startX = endX - TilesWideObject; } else if (startX < 0) { startX = 0; endX = TilesWideObject; } if (endY > GameWorldObject.GameMapHeight) { endY = GameWorldObject.GameMapHeight; startY = endY - TilesHighObject; } else if (startY < 0) { startY = 0; endY = TilesHighObject; } int CountX = 0; int CountY = 0; DrawingGroup dg = new DrawingGroup(); for (int x = startX; x < endX; x++) { for (int y = startY; y < endY; y++) { dg.Children.Add( new ImageDrawing(_mapTiles[GameWorldObject.GameMap[x, y].GraphicsTile.TileStartPoint], new Rect(CountX * 64, CountY * 64, 64, 64) )); dg.Children.Add( new GeometryDrawing( null, new Pen( new SolidColorBrush( Color.FromRgb(255, 0, 20)), .3), new RectangleGeometry( new Rect(CountX * 64, CountY * 64, 64, 64) ) ) ); #if DEBUG if (x % 5 == 0 && y % 5 == 0) { FormattedText text = new FormattedText("X:" + x + " Y:" + y, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new System.Windows.Media.Typeface("arial"), 12, new SolidColorBrush(Color.FromRgb(255, 0, 20))); Geometry geometry = text.BuildGeometry(new Point(CountX * 64, CountY * 64)); GeometryDrawing gd = new GeometryDrawing(new SolidColorBrush(Color.FromRgb(255, 0, 20)), new Pen(), geometry); dg.Children.Add(gd); } #endif CountY++; } CountY = 0; CountX++; } dg.Freeze(); dc.DrawDrawing(dg); }