protected override void DrawCore(DrawingContext drawingContext, DrawingAttributes drawingAttributes) { if (drawingContext == null) { throw new ArgumentNullException("drawingContext"); } if (null == drawingAttributes) { throw new ArgumentNullException("drawingAttributes"); } Pen pen = new Pen { StartLineCap = PenLineCap.Round, EndLineCap = PenLineCap.Round, Brush = new SolidColorBrush(drawingAttributes.Color), Thickness = drawingAttributes.Width }; BrushConverter bc = new BrushConverter(); Brush BackGround = (Brush)bc.ConvertFromString(drawingAttributes.GetPropertyData(DrawAttributesGuid.BackgroundColor).ToString()); GeometryConverter gc = new GeometryConverter(); Geometry geometry = (Geometry)gc.ConvertFromString(string.Format("M {0},{1} {2},{3} {4},{5} Z", StylusPoints[0].X, StylusPoints[1].Y, (Math.Abs(StylusPoints[1].X - StylusPoints[0].X))/2 + StylusPoints[0].X, StylusPoints[0].Y, StylusPoints[1].X, StylusPoints[1].Y)); GeometryDrawing gd = new GeometryDrawing(BackGround, pen, geometry); drawingContext.DrawDrawing(gd); }
protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) { base.OnRender(drawingContext); drawingContext.DrawRectangle(Background, null, new Rect(0, 0, ActualWidth, ActualHeight)); if (mode == SpectrogramMode.Scroll) { drawingContext.DrawDrawing(new ImageDrawing( writeableBitmap, new Rect(ActualWidth - position, 0, ActualWidth * 3, ActualHeight))); } else { drawingContext.DrawDrawing(new ImageDrawing( writeableBitmap, new Rect(0, 0, ActualWidth, ActualHeight))); } }
protected override void InnerDraw(DrawingContext drawingContext) { base.InnerDraw(drawingContext); drawingContext.PushTransform(_scaleTransform); drawingContext.DrawDrawing(_textDrawing); drawingContext.Pop(); }
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); } drawingContext.PushTransform(new RotateTransform(rotarySwitch.KnobRotation, _center.X, _center.Y)); drawingContext.DrawRectangle(_imageBrush, null, _imageRect); if (rotarySwitch.VisualizeDragging) { double length = (rotarySwitch.DragPoint - _center).Length; drawingContext.DrawLine(HeadingPen, _center, _center + new Vector(0d, -length)); } drawingContext.Pop(); if (rotarySwitch.VisualizeDragging) { drawingContext.DrawLine(DragPen, _center, rotarySwitch.DragPoint); } } }
protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); var ellipse = new EllipseGeometry(new Point(250, 50), 50, 50); var drawing = new GeometryDrawing(Brushes.BlueViolet, new Pen(Brushes.Bisque, 2), ellipse); drawingContext.DrawDrawing(drawing); }
/// <summary> /// /// </summary> /// <param name="drawingContext"></param> protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); foreach (var visual in Visuals) { drawingContext.DrawDrawing(visual.Drawing); } }
protected override void OnRender(SWM.DrawingContext drawingContext) { base.OnRender(drawingContext); DrawYAxis(); drawingContext.DrawDrawing(_drawingGroup); Redraw(); }
protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) { base.OnRender(drawingContext); drawingContext.DrawRectangle(Background, null, new Rect(0, 0, ActualWidth, ActualHeight)); if (writeableBitmap != null) { drawingContext.DrawDrawing(new ImageDrawing(writeableBitmap, new Rect(0, 0, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight))); } }
protected override void OnRender(DrawingContext dc) { if (_drawings.Count == 0 || _size.Height != ActualHeight || _size.Width != ActualWidth) { RenderSizeChanged(_size = new Size(ActualWidth, ActualHeight)); } if (_drawings.Count == 1) dc.DrawDrawing(_drawings[0]); base.OnRender(dc); }
//private const int Margin = 3; protected override void InnerDraw(DrawingContext drawingContext) { base.InnerDraw(drawingContext); if (_scaleTransform != null) drawingContext.PushTransform(_scaleTransform); if (_clipGeometry != null) drawingContext.PushClip(_clipGeometry); drawingContext.DrawDrawing(_textDrawing); if (_clipGeometry != null) drawingContext.Pop(); if (_scaleTransform != null) drawingContext.Pop(); }
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); } }
protected override void OnRender(DrawingContext drawingContext) { if (ChartData == null) return; if (GraphContents == null) { // ActualWidth and ActualHeight are NaN at initialization, need to do this here Viewport.Visible = new Rect(new Size(ActualWidth, ActualHeight)); Viewport.OnViewportResized(ActualWidth, ActualHeight); GraphContents = new DrawingGroup(); } if (FilteredPoints == null) Update(); using (DrawingContext context = GraphContents.Open()) { // Draw Background context.DrawRectangle(ChartStyle.BackgroundColor, null, Viewport.Output); // Draw Chart ChartDrawing.Draw(context, FilteredPoints, ChartStyle); //Draw Debug text context.DrawText(new FormattedText("Viewport.Visible=" + Viewport.Visible + "\n" + "Viewport.Output=" + Viewport.Output, CultureInfo.InvariantCulture, FlowDirection.LeftToRight, new Typeface("Arial"), 12, Brushes.Red), new Point(10, 10)); } drawingContext.DrawDrawing(GraphContents); }
protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); var bc = new BrushConverter(); var user = XIVInfoViewModel.Instance.CurrentUser; if (user == null) { return; } var origin = new Coordinate { X = (float) (ActualWidth / 2), Y = (float) (ActualHeight / 2) }; var scale = ((float) (ActualHeight / 2.0f) / 125.0f); var angle = Math.Abs(user.Heading * (180 / Math.PI) - 180); if (Settings.Default.RadarCompassMode) { var drawingGroup = new DrawingGroup { Transform = new RotateTransform { Angle = angle, CenterX = origin.X, CenterY = origin.Y } }; drawingGroup.Children.Add(new ImageDrawing(RadarIconHelper.RadarHeading, new Rect(origin.X - 64, origin.Y - 128, 128, 128))); drawingContext.DrawDrawing(drawingGroup); } else { drawingContext.DrawImage(RadarIconHelper.RadarHeading, new Rect(new Point(origin.X - 64, origin.Y - 128), new Size(128, 128))); } var sb = new StringBuilder(); var npcEntites = new List<ActorEntity>(XIVInfoViewModel.Instance.CurrentNPCs.Select(kvp => kvp.Value) .ToList()); var monsterEntites = new List<ActorEntity>(XIVInfoViewModel.Instance.CurrentMonsters.Select(kvp => kvp.Value) .ToList()); var pcEntites = new List<ActorEntity>(XIVInfoViewModel.Instance.CurrentPCs.Select(kvp => kvp.Value) .ToList()); if (Settings.Default.FilterRadarItems) { var npcFilters = PluginViewModel.Instance.Filters.Where(filter => filter.Type != Actor.Type.PC && filter.Type != Actor.Type.Monster) .ToList(); if (npcFilters.Any()) { npcEntites = RadarFilterHelper.ResolveFilteredEntities(npcFilters, npcEntites); } var monsterFilters = PluginViewModel.Instance.Filters.Where(filter => filter.Type == Actor.Type.Monster) .ToList(); if (PluginViewModel.Instance.RankedFilters.Any()) { monsterFilters.AddRange(PluginViewModel.Instance.RankedFilters); } if (monsterFilters.Any()) { monsterEntites = RadarFilterHelper.ResolveFilteredEntities(monsterFilters, monsterEntites); } var pcFilters = PluginViewModel.Instance.Filters.Where(filter => filter.Type == Actor.Type.PC) .ToList(); if (pcFilters.Any()) { pcEntites = RadarFilterHelper.ResolveFilteredEntities(pcFilters, pcEntites); } } #region Resolve PCs if (Settings.Default.PCShow) { foreach (var actorEntity in pcEntites) { sb.Clear(); var fsModifier = 0; drawingContext.PushOpacity(1); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale) .Add(origin); } screen = screen.Add(-8, -8, 0); if (Settings.Default.PCShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.PCShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.PCShowDistance) { sb.AppendFormat(" {0:N2} {1}", user.GetDistanceTo(actorEntity), ResolveHeightVariance(user, actorEntity)); } var useJob = Settings.Default.PCShowJob; if (Settings.Default.PCShowJob) { #region Get Job Icons switch (actorEntity.Job) { case Actor.Job.ACN: drawingContext.DrawImage(RadarIconHelper.Arcanist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.ALC: drawingContext.DrawImage(RadarIconHelper.Alchemist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.ARC: drawingContext.DrawImage(RadarIconHelper.Archer, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.ARM: drawingContext.DrawImage(RadarIconHelper.Armorer, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.AST: drawingContext.DrawImage(RadarIconHelper.Astrologian, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.BLM: drawingContext.DrawImage(RadarIconHelper.Blackmage, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.BRD: drawingContext.DrawImage(RadarIconHelper.Bard, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.BSM: drawingContext.DrawImage(RadarIconHelper.Blacksmith, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.BTN: drawingContext.DrawImage(RadarIconHelper.Botanist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.CNJ: drawingContext.DrawImage(RadarIconHelper.Conjurer, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.CPT: drawingContext.DrawImage(RadarIconHelper.Carpenter, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.CUL: drawingContext.DrawImage(RadarIconHelper.Culinarian, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.DRG: drawingContext.DrawImage(RadarIconHelper.Dragoon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.DRK: drawingContext.DrawImage(RadarIconHelper.DarkKnight, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.FSH: drawingContext.DrawImage(RadarIconHelper.Fisher, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.GLD: drawingContext.DrawImage(RadarIconHelper.Gladiator, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.GSM: drawingContext.DrawImage(RadarIconHelper.Goldsmith, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.LNC: drawingContext.DrawImage(RadarIconHelper.Leatherworker, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.LTW: drawingContext.DrawImage(RadarIconHelper.Leatherworker, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.MCH: drawingContext.DrawImage(RadarIconHelper.Machinist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.MIN: drawingContext.DrawImage(RadarIconHelper.Miner, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.MNK: drawingContext.DrawImage(RadarIconHelper.Monk, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.MRD: drawingContext.DrawImage(RadarIconHelper.Marauder, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.NIN: drawingContext.DrawImage(RadarIconHelper.Ninja, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.PGL: drawingContext.DrawImage(RadarIconHelper.Pugilist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.PLD: drawingContext.DrawImage(RadarIconHelper.Paladin, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.ROG: drawingContext.DrawImage(RadarIconHelper.Rogue, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.SCH: drawingContext.DrawImage(RadarIconHelper.Scholar, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.Unknown: if (actorEntity.OwnerID > 0 && actorEntity.OwnerID < 3758096384) { drawingContext.DrawImage(RadarIconHelper.Chocobo, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } useJob = false; break; case Actor.Job.WAR: drawingContext.DrawImage(RadarIconHelper.Warrior, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.WHM: drawingContext.DrawImage(RadarIconHelper.Whitemage, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.WVR: drawingContext.DrawImage(RadarIconHelper.Weaver, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; } #endregion } if (!useJob) { var imageSource = actorEntity.HPCurrent > 0 ? RadarIconHelper.Player : RadarIconHelper.Skull; drawingContext.DrawImage(imageSource, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.PCShowName || Settings.Default.PCShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, Int32.Parse(Settings.Default.PCFontSize) + fsModifier, (SolidColorBrush) bc.ConvertFromString(Settings.Default.PCFontColor)); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } } #endregion #region Resolve Monsters if (Settings.Default.MonsterShow) { foreach (var actorEntity in monsterEntites) { sb.Clear(); var fsModifier = 0; var fontColor = Settings.Default.MonsterFontColor; var RankB = LocaleHelper.GetRankedMonsters("B"); var RankA = LocaleHelper.GetRankedMonsters("A"); var RankS = LocaleHelper.GetRankedMonsters("S"); if (Settings.Default.MonsterShowRankColor) { if (RankA.Any(x => x.Equals(actorEntity.Name, StringComparison.InvariantCultureIgnoreCase))) { fontColor = Settings.Default.MonsterFontColorARank; fsModifier += 2; } else if (RankS.Any(x => x.Equals(actorEntity.Name, StringComparison.InvariantCultureIgnoreCase))) { fontColor = Settings.Default.MonsterFontColorSRank; fsModifier += 2; } else if (RankB.Any(x => x.Equals(actorEntity.Name, StringComparison.InvariantCultureIgnoreCase))) { fontColor = Settings.Default.MonsterFontColorBRank; fsModifier += 2; } } drawingContext.PushOpacity(1); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale) .Add(origin); } screen = screen.Add(-8, -8, 0); ImageSource actorIcon = null; switch (actorEntity.IsFate) { case true: actorIcon = RadarIconHelper.Fate; break; case false: if (actorEntity.OwnerID > 0 && actorEntity.OwnerID < 3758096384) { actorIcon = RadarIconHelper.ChocoboPersonal; } else { actorIcon = actorEntity.IsClaimed ? RadarIconHelper.MonsterClaimed : RadarIconHelper.Monster; } break; } if (actorEntity.HPCurrent > 0) { if (actorIcon != null) { drawingContext.DrawImage(actorIcon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } } else { drawingContext.DrawImage(RadarIconHelper.Skull, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.MonsterShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.MonsterShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.MonsterShowDistance) { sb.AppendFormat(" {0:N2} {1}", user.GetDistanceTo(actorEntity), ResolveHeightVariance(user, actorEntity)); } if (Settings.Default.MonsterShowName || Settings.Default.MonsterShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, Int32.Parse(Settings.Default.MonsterFontSize) + fsModifier, (SolidColorBrush) bc.ConvertFromString(fontColor)); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } } #endregion #region Resolve NPCs, Gathering & Other foreach (var actorEntity in npcEntites) { switch (actorEntity.Type) { case Actor.Type.NPC: #region Resolve NPCs if (Settings.Default.NPCShow) { sb.Clear(); var fsModifier = 0; drawingContext.PushOpacity(1); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale) .Add(origin); } screen = screen.Add(-8, -8, 0); if (Settings.Default.NPCShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.NPCShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.NPCShowDistance) { sb.AppendFormat(" {0:N2} {1}", user.GetDistanceTo(actorEntity), ResolveHeightVariance(user, actorEntity)); } var actorIcon = RadarIconHelper.NPC; if (actorEntity.HPCurrent > 0) { drawingContext.DrawImage(actorIcon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } else { drawingContext.DrawImage(RadarIconHelper.Skull, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.NPCShowName || Settings.Default.NPCShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, Int32.Parse(Settings.Default.NPCFontSize) + fsModifier, (SolidColorBrush) bc.ConvertFromString(Settings.Default.NPCFontColor)); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } #endregion break; case Actor.Type.Gathering: #region Resolve Gathering if (Settings.Default.GatheringShow) { sb.Clear(); var fsModifier = 0; drawingContext.PushOpacity(1); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale) .Add(origin); } screen = screen.Add(-8, -8, 0); if (Settings.Default.GatheringShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.GatheringShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.GatheringShowDistance) { sb.AppendFormat(" {0:N2} {1}", user.GetDistanceTo(actorEntity), ResolveHeightVariance(user, actorEntity)); } var actorIcon = RadarIconHelper.Wood; if (actorEntity.HPCurrent > 0) { drawingContext.DrawImage(actorIcon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } else { drawingContext.DrawImage(RadarIconHelper.Skull, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.GatheringShowName || Settings.Default.GatheringShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, Int32.Parse(Settings.Default.GatheringFontSize) + fsModifier, (SolidColorBrush) bc.ConvertFromString(Settings.Default.GatheringFontColor)); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } #endregion break; default: #region Resolve Other if (Settings.Default.OtherShow) { sb.Clear(); var fsModifier = 0; drawingContext.PushOpacity(1); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale); } screen = screen.Add(-8, -8, 0); ImageSource actorIcon; switch (actorEntity.Type) { case Actor.Type.Aetheryte: actorIcon = RadarIconHelper.Crystal; break; case Actor.Type.Minion: actorIcon = RadarIconHelper.Sheep; break; default: actorIcon = RadarIconHelper.NPC; break; } if (actorEntity.HPCurrent > 0 || actorEntity.Type == Actor.Type.Aetheryte) { if (actorIcon != null) { drawingContext.DrawImage(actorIcon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } } else { drawingContext.DrawImage(RadarIconHelper.Skull, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.OtherShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.OtherShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.OtherShowDistance) { sb.AppendFormat(" {0:N2} {1}", user.GetDistanceTo(actorEntity), ResolveHeightVariance(user, actorEntity)); } if (Settings.Default.OtherShowName || Settings.Default.OtherShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, Int32.Parse(Settings.Default.OtherFontSize) + fsModifier, (SolidColorBrush) bc.ConvertFromString(Settings.Default.OtherFontColor)); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } #endregion break; } } #endregion }
protected void RenderFalseHorizon(DrawingContext context) { if (falseHorizonPen == null) { return; } context.DrawDrawing(falseHorizonCrosshairs); context.DrawDrawing(pitchGauge); }
protected override void OnRender(DrawingContext drawingContext) { drawingContext.DrawDrawing(m_drawing); //base.OnRender(drawingContext); }
/// <summary> /// Renders the contents of an <see cref="T:System.Windows.Controls.Image"/> and /// the SelectorDrawing. /// </summary> /// <param name="dc">An instance of <see cref="T:System.Windows.Media.DrawingContext"/> /// used to render the control.</param> protected override void OnRender(DrawingContext dc) { base.OnRender(dc); if (ActualWidth == 0 || ActualHeight == 0) return; // Render the SelectorDrawing dc.PushTransform(new TranslateTransform(Position.X, Position.Y)); dc.DrawDrawing(Selector); dc.Pop(); }
public void Render(DrawingContext drawingContext) { if (BackGround != null) { drawingContext.DrawDrawing(BackGround); } if (Overlay != null) { drawingContext.DrawDrawing(Overlay); } }
//private void DrawNavNode(DrawingContext dc, CanvasData canvas, GridNode node) //{ // SolidColorBrush nodeBrush; // if (node.Flags.HasFlag(NavCellFlags.RoundedCorner0) || node.Flags.HasFlag(NavCellFlags.RoundedCorner1) || node.Flags.HasFlag(NavCellFlags.RoundedCorner2) || node.Flags.HasFlag(NavCellFlags.RoundedCorner3)) // { // nodeBrush = Brushes.SaddleBrown; // } // else if (node.Flags.HasFlag(NavCellFlags.AllowWalk)) // { // nodeBrush = Brushes.Green; // } // else if (node.Flags.HasFlag(NavCellFlags.AllowProjectile)) // { // nodeBrush = Brushes.DarkGray; // } // else // { // nodeBrush = Brushes.Black; // } // dc.DrawEllipse(nodeBrush, RadarResources.GridPen, node.NavigableCenter.ToCanvasPoint(), GridSize, GridSize); //} //private void DrawNodesInRadius(DrawingContext dc, CanvasData canvas) //{ // try // { // var nearestNode = MainGrid.Instance.GetNearestNodeToPosition(AdvDia.MyPosition); // if (nearestNode == null) return; // var nodes = MainGrid.Instance.GetNeighbors(nearestNode, 5); // foreach (var node in nodes) // { // DrawNavNode(dc, canvas, node); // } // } // catch (Exception ex) // { // Logger.Debug("Exception in RadarUI.DrawNodesInRadius(). {0} {1} {2}", ex.Message, ex.InnerException, ex); // } //} /// <summary> /// Draw a Scene /// </summary> private void DrawScenes(DrawingContext dc, CanvasData canvas) { try { if (Math.Abs(CenterActor.Point.X) < 0.01f && Math.Abs(CenterActor.Point.Y) < 0.01f) return; var worldId = AdvDia.CurrentWorldDynamicId; foreach (var adventurerScene in ScenesStorage.CurrentWorldScenes.Where(s => s.DynamicWorldId == worldId).ToList()) { //var scene = adventurerScene.TrinityScene; // Combine navcells into one drawing and store it; because they don't change relative to each other // And because translating geometry for every navcell on every frame is waaaaay too slow. if (Drawings.Relative.ContainsKey(adventurerScene.HashName)) continue; var drawing = new DrawingGroup(); using (var groupdc = drawing.Open()) { #region Terrain if (adventurerScene.Cells != null) { var figures = new List<PathFigure>(); foreach (var navCell in adventurerScene.Cells.Where(nc => nc.IsWalkable)) { var topLeft = new Vector3(navCell.MinX, navCell.MinY, 0); var topRight = new Vector3(navCell.MaxX, navCell.MinY, 0); var bottomLeft = new Vector3(navCell.MinX, navCell.MaxY, 0); var bottomRight = new Vector3(navCell.MaxX, navCell.MaxY, 0); var segments = new[] { new LineSegment(topLeft.ToCanvasPoint(), true), new LineSegment(topRight.ToCanvasPoint(), true), new LineSegment(bottomRight.ToCanvasPoint(), true) }; figures.Add(new PathFigure(bottomLeft.ToCanvasPoint(), segments, true)); } var geo = new PathGeometry(figures, FillRule.Nonzero, null); geo.GetOutlinedPathGeometry(); groupdc.DrawGeometry(RadarResources.WalkableTerrain, null, geo); } #endregion #region Scene Borders var sceneTopLeft = new Vector3(adventurerScene.Min.X, adventurerScene.Min.Y, 0); var sceneTopRight = new Vector3(adventurerScene.Max.X, adventurerScene.Min.Y, 0); var sceneBottomLeft = new Vector3(adventurerScene.Min.X, adventurerScene.Max.Y, 0); var sceneBottomRight = new Vector3(adventurerScene.Max.X, adventurerScene.Max.Y, 0); groupdc.DrawGeometry(null, RadarResources.WalkableTerrainBorder, new LineGeometry(sceneTopLeft.ToCanvasPoint(), sceneTopRight.ToCanvasPoint())); groupdc.DrawGeometry(null, RadarResources.WalkableTerrainBorder, new LineGeometry(sceneBottomLeft.ToCanvasPoint(), sceneBottomRight.ToCanvasPoint())); groupdc.DrawGeometry(null, RadarResources.WalkableTerrainBorder, new LineGeometry(sceneTopLeft.ToCanvasPoint(), sceneBottomLeft.ToCanvasPoint())); groupdc.DrawGeometry(null, RadarResources.WalkableTerrainBorder, new LineGeometry(sceneTopRight.ToCanvasPoint(), sceneBottomRight.ToCanvasPoint())); #endregion #region Scene Title var textPoint = adventurerScene.Center.ToVector3().ToCanvasPoint(); var glyphRun = DrawingUtilities.CreateGlyphRun(adventurerScene.Name, 10, textPoint); groupdc.DrawGlyphRun(Brushes.Wheat, glyphRun); textPoint = adventurerScene.Center.ToVector3().ToCanvasPoint(); textPoint.Y = textPoint.Y + 20; glyphRun = DrawingUtilities.CreateGlyphRun((adventurerScene.Max - adventurerScene.Min) + " " + (adventurerScene.HasChild ? "HasSubScene" : string.Empty) + " " + (adventurerScene.SubScene != null ? " (Loaded)" : string.Empty), 8, textPoint); groupdc.DrawGlyphRun(Brushes.Wheat, glyphRun); #endregion #region Nodes var sceneNodePen = new Pen { Brush = Brushes.Black, Thickness = 0.1f }; foreach (var node in adventurerScene.Nodes) { if (node.HasEnoughNavigableCells) { groupdc.DrawGeometry(null, sceneNodePen, new LineGeometry(node.TopLeft.ToVector3().ToCanvasPoint(), node.TopRight.ToVector3().ToCanvasPoint())); groupdc.DrawGeometry(null, sceneNodePen, new LineGeometry(node.TopLeft.ToVector3().ToCanvasPoint(), node.BottomLeft.ToVector3().ToCanvasPoint())); groupdc.DrawGeometry(null, sceneNodePen, new LineGeometry(node.BottomLeft.ToVector3().ToCanvasPoint(), node.BottomRight.ToVector3().ToCanvasPoint())); groupdc.DrawGeometry(null, sceneNodePen, new LineGeometry(node.TopRight.ToVector3().ToCanvasPoint(), node.BottomRight.ToVector3().ToCanvasPoint())); //var textPoint1 = node.Center.ToVector3().ToCanvasPoint(); //// var glyphRun1 = DrawingUtilities.CreateGlyphRun(string.Format("{2} {0} ({1:P0})", node.NavigableCellCount, node.FillPercentage, node.LevelAreaId), 8, textPoint1); //var glyphRun1 = DrawingUtilities.CreateGlyphRun(node.LevelAreaId.ToString(), 8, textPoint1); //groupdc.DrawGlyphRun(Brushes.Wheat, glyphRun1); } //foreach (var navPoint in node.Nodes.Where(n=>n.NodeFlags.HasFlag(NodeFlags.NearWall))) //{ // DrawNavNode(groupdc, canvas, navPoint); // //groupdc.DrawEllipse(Brushes.LightSlateGray, sceneNodePen, navPoint.Center.ToVector3().ToCanvasPoint(), (float)GridSize / 2, (float)GridSize / 2); //} } #endregion } // Have to use SceneHash as key because scenes can appear multiple times with the same name Drawings.Relative.TryAdd(adventurerScene.HashName, new RelativeDrawing { Drawing = drawing, Origin = CenterActor.Morph, Center = adventurerScene.Center.ToVector3(), WorldId = adventurerScene.DynamicWorldId, //Image = new DrawingImage(drawing), //ImageRect = drawing.Bounds }); } foreach (var pair in Drawings.Relative) { //if (pair.Value.WorldId != AdvDia.CurrentWorldDynamicId) // continue; if (!pair.Value.Drawing.Bounds.IntersectsWith(CanvasData.ClipRegion.Rect)) continue; dc.DrawDrawing(pair.Value.Drawing); //if (!pair.Value.ImageRect.IntersectsWith(CanvasData.ClipRegion.Rect)) // continue; //dc.DrawImage(pair.Value.Image, pair.Value.ImageRect); } } catch (Exception ex) { Logger.Debug("Exception in RadarUI.DrawScenes(). {0} {1} {2}", ex.Message, ex.InnerException, ex); } }
private void DrawGrid(DrawingContext dc, CanvasData canvas, int gridLineFrequency) { StaticDrawing sd; if (!Drawings.Static.TryGetValue("Grid", out sd)) { var drawing = new DrawingGroup(); using (var groupdc = drawing.Open()) { // vertical lines int pos = 0; do { groupdc.DrawLine(RadarBrushes.GridPen, new Point(pos, 0), new Point(pos, (int) canvas.CanvasSize.Height)); pos += (int) canvas.GridSquareSize.Height*gridLineFrequency; } while (pos < canvas.CanvasSize.Width); // horizontal lines pos = 0; do { groupdc.DrawLine(RadarBrushes.GridPen, new Point(0, pos), new Point((int) canvas.CanvasSize.Width, pos)); pos += (int) canvas.GridSquareSize.Width*gridLineFrequency; } while (pos < canvas.CanvasSize.Height); } drawing.Freeze(); Drawings.Static.TryAdd("Grid", new StaticDrawing { Drawing = drawing, WorldId = CacheManager.WorldDynamicId }); } else { dc.DrawDrawing(sd.Drawing); } }
/// <summary> /// Mind = Blown /// </summary> private void DrawScenes(DrawingContext dc, CanvasData canvas) { try { if (CenterActor.Point.X == 0 && CenterActor.Point.Y == 0) return; foreach (var pair in CacheManager.CachedScenes) { var scene = pair.Value; // Combine navcells into one drawing and store it; because they don't change relative to each other // And because translating geometry for every navcell on every frame is waaaaay too slow. if (!Drawings.Relative.ContainsKey(scene.SceneHash) && scene.WalkableNavCellBounds.Any() && scene.IsCurrentWorld) { var drawing = new DrawingGroup(); using (var groupdc = drawing.Open()) { var figures = new List<PathFigure>(); foreach (var navCellBounds in scene.WalkableNavCellBounds) { var cellSouthWest = new Vector3(navCellBounds.Max.X, navCellBounds.Min.Y, 0).ToCanvasPoint(); var cellSouthEast = new Vector3(navCellBounds.Max.X, navCellBounds.Max.Y, 0).ToCanvasPoint(); var cellNorthWest = new Vector3(navCellBounds.Min.X, navCellBounds.Min.Y, 0).ToCanvasPoint(); var cellNorthEast = new Vector3(navCellBounds.Min.X, navCellBounds.Max.Y, 0).ToCanvasPoint(); var segments = new[] { new LineSegment(cellNorthWest, true), new LineSegment(cellNorthEast, true), new LineSegment(cellSouthEast, true) }; figures.Add(new PathFigure(cellSouthWest, segments, true)); } var geo = new PathGeometry(figures, FillRule.Nonzero, null); geo.GetOutlinedPathGeometry(); groupdc.DrawGeometry(RadarBrushes.WalkableTerrain, null, geo); } // Have to use SceneHash as key because scenes can appear multiple times with the same name Drawings.Relative.TryAdd(scene.SceneHash, new RelativeDrawing { Drawing = drawing, Origin = CenterActor.Morph, Center = scene.Center, WorldId = scene.WorldDynamicId }); } } foreach (var pair in Drawings.Relative) { if (pair.Value.WorldId != CacheManager.WorldDynamicId) continue; if(!pair.Value.Drawing.Bounds.IntersectsWith(CanvasData.ClipRegion.Rect)) continue; dc.DrawDrawing(pair.Value.Drawing); } } catch (Exception ex) { Logger.Log("Exception in RadarUI.DrawScenes(). {0} {1}", ex.Message, ex.InnerException); } }
/// <summary> /// Applies the <see cref="ResizeFilter" /> to the specified <paramref name="source"/>. /// </summary> /// <param name="source">The source image.</param> /// <param name="destination">The destination image.</param> /// <param name="g">A <see cref="System.Drawing.Graphics" /> object, created from <paramref name="destination"/>.</param> protected override void ApplyFilter(FastBitmap source, DrawingContext dc, int destinationWidth, int destinationHeight) { ImageSource imageSource = source.InnerBitmap; if (_xOffset != 0 || _yOffset != 0) imageSource = new CroppedBitmap(source.InnerBitmap, new Int32Rect(_xOffset, _yOffset, _sourceWidth, _sourceHeight)); DrawingGroup dg = new DrawingGroup(); RenderOptions.SetBitmapScalingMode(dg, BitmapScalingMode); dg.Children.Add(new ImageDrawing(imageSource, new Rect(0, 0, destinationWidth, destinationHeight))); dc.DrawDrawing(dg); }
protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); var user = XIVInfoViewModel.Instance.CurrentUser; var origin = new Coordinate { X = (float) (ActualWidth / 2), Y = (float) (ActualHeight / 2) }; var scale = ((float) (ActualHeight / 2.0f) / 125.0f); var angle = Math.Abs(user.Heading * (180 / Math.PI) - 180); if (Settings.Default.RadarCompassMode) { var drawingGroup = new DrawingGroup { Transform = new RotateTransform { Angle = angle, CenterX = origin.X, CenterY = origin.Y } }; drawingGroup.Children.Add(new ImageDrawing(RadarIconHelper.RadarHeading, new Rect(origin.X - 64, origin.Y - 128, 128, 128))); drawingContext.DrawDrawing(drawingGroup); } else { drawingContext.DrawImage(RadarIconHelper.RadarHeading, new Rect(new Point(origin.X - 64, origin.Y - 128), new Size(128, 128))); } var sb = new StringBuilder(); var npcEntites = new List<ActorEntity>(XIVInfoViewModel.Instance.CurrentNPCs.ToList()); var monsterEntites = new List<ActorEntity>(XIVInfoViewModel.Instance.CurrentMonsters.ToList()); var pcEntites = new List<ActorEntity>(XIVInfoViewModel.Instance.CurrentPCs.ToList()); #region Resolve PCs if (Settings.Default.PCShow) { foreach (var actorEntity in pcEntites) { sb.Clear(); var opacityLevel = (actorEntity.Coordinate.Z / XIVInfoViewModel.Instance.CurrentUser.Coordinate.Z); var fsModifier = ResolveFontSize(opacityLevel); opacityLevel = opacityLevel < 0.5 ? 0.5 : opacityLevel > 1 ? 1 : opacityLevel; drawingContext.PushOpacity(opacityLevel); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale) .Add(origin); } screen = screen.Add(-8, -8, 0); if (Settings.Default.PCShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.PCShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.PCShowDistance) { sb.AppendFormat(" {0:N2}", XIVInfoViewModel.Instance.CurrentUser.GetDistanceTo(actorEntity)); } var useJob = Settings.Default.PCShowJob; if (Settings.Default.PCShowJob) { #region Get Job Icons switch (actorEntity.Job) { case Actor.Job.ACN: drawingContext.DrawImage(RadarIconHelper.Arcanist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.ALC: drawingContext.DrawImage(RadarIconHelper.Alchemist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.ARC: drawingContext.DrawImage(RadarIconHelper.Archer, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.ARM: drawingContext.DrawImage(RadarIconHelper.Armorer, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.BLM: drawingContext.DrawImage(RadarIconHelper.Blackmage, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.BRD: drawingContext.DrawImage(RadarIconHelper.Bard, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.BSM: drawingContext.DrawImage(RadarIconHelper.Blacksmith, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.BTN: drawingContext.DrawImage(RadarIconHelper.Botanist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.CNJ: drawingContext.DrawImage(RadarIconHelper.Conjurer, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.CPT: drawingContext.DrawImage(RadarIconHelper.Carpenter, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.CUL: drawingContext.DrawImage(RadarIconHelper.Culinarian, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.Chocobo: drawingContext.DrawImage(RadarIconHelper.Chocobo, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.DRG: drawingContext.DrawImage(RadarIconHelper.Dragoon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.FSH: drawingContext.DrawImage(RadarIconHelper.Fisher, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.GLD: drawingContext.DrawImage(RadarIconHelper.Gladiator, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.GSM: drawingContext.DrawImage(RadarIconHelper.Goldsmith, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.LNC: drawingContext.DrawImage(RadarIconHelper.Leatherworker, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.LTW: drawingContext.DrawImage(RadarIconHelper.Leatherworker, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.MIN: drawingContext.DrawImage(RadarIconHelper.Miner, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.MNK: drawingContext.DrawImage(RadarIconHelper.Monk, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.MRD: drawingContext.DrawImage(RadarIconHelper.Marauder, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.PGL: drawingContext.DrawImage(RadarIconHelper.Pugilist, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.PLD: drawingContext.DrawImage(RadarIconHelper.Paladin, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.Pet: drawingContext.DrawImage(RadarIconHelper.Sheep, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.SCH: drawingContext.DrawImage(RadarIconHelper.Scholar, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.Unknown: useJob = false; break; case Actor.Job.WAR: drawingContext.DrawImage(RadarIconHelper.Warrior, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.WHM: drawingContext.DrawImage(RadarIconHelper.Whitemage, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; case Actor.Job.WVR: drawingContext.DrawImage(RadarIconHelper.Weaver, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); break; } #endregion } if (!useJob) { var imageSource = actorEntity.HPCurrent > 0 ? RadarIconHelper.Player : RadarIconHelper.Skull; drawingContext.DrawImage(imageSource, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.PCShowName || Settings.Default.PCShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, 12 + fsModifier, Brushes.White); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } } #endregion #region Resolve Monsters if (Settings.Default.MonsterShow) { foreach (var actorEntity in monsterEntites) { sb.Clear(); var opacityLevel = (actorEntity.Coordinate.Z / XIVInfoViewModel.Instance.CurrentUser.Coordinate.Z); var fsModifier = ResolveFontSize(opacityLevel); opacityLevel = opacityLevel < 0.5 ? 0.5 : opacityLevel > 1 ? 1 : opacityLevel; drawingContext.PushOpacity(opacityLevel); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale) .Add(origin); } screen = screen.Add(-8, -8, 0); ImageSource actorIcon = null; var brush = Brushes.Red; switch (actorEntity.IsFate) { case true: actorIcon = RadarIconHelper.Fate; break; case false: actorIcon = actorEntity.IsClaimed ? RadarIconHelper.MonsterClaimed : RadarIconHelper.Monster; break; } if (actorEntity.HPCurrent > 0) { if (actorIcon != null) { drawingContext.DrawImage(actorIcon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } } else { drawingContext.DrawImage(RadarIconHelper.Skull, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.MonsterShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.MonsterShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.MonsterShowDistance) { sb.AppendFormat(" {0:N2}", XIVInfoViewModel.Instance.CurrentUser.GetDistanceTo(actorEntity)); } if (Settings.Default.MonsterShowName || Settings.Default.MonsterShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, 12 + fsModifier, brush); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } } #endregion #region Resolve NPCs, Gathering & Other foreach (var actorEntity in npcEntites) { switch (actorEntity.Type) { case Actor.Type.NPC: #region Resolve NPCs if (Settings.Default.NPCShow) { sb.Clear(); var opacityLevel = (actorEntity.Coordinate.Z / XIVInfoViewModel.Instance.CurrentUser.Coordinate.Z); var fsModifier = ResolveFontSize(opacityLevel); opacityLevel = opacityLevel < 0.5 ? 0.5 : opacityLevel > 1 ? 1 : opacityLevel; drawingContext.PushOpacity(opacityLevel); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale) .Add(origin); } screen = screen.Add(-8, -8, 0); var brush = Brushes.LimeGreen; if (Settings.Default.NPCShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.NPCShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.NPCShowDistance) { sb.AppendFormat(" {0:N2}", XIVInfoViewModel.Instance.CurrentUser.GetDistanceTo(actorEntity)); } var actorIcon = RadarIconHelper.NPC; if (actorEntity.HPCurrent > 0) { drawingContext.DrawImage(actorIcon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } else { drawingContext.DrawImage(RadarIconHelper.Skull, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.NPCShowName || Settings.Default.NPCShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, 12 + fsModifier, brush); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } #endregion break; case Actor.Type.Gathering: #region Resolve Gathering if (Settings.Default.GatheringShow) { sb.Clear(); var opacityLevel = (actorEntity.Coordinate.Z / XIVInfoViewModel.Instance.CurrentUser.Coordinate.Z); var fsModifier = ResolveFontSize(opacityLevel); opacityLevel = opacityLevel < 0.5 ? 0.5 : opacityLevel > 1 ? 1 : opacityLevel; drawingContext.PushOpacity(opacityLevel); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale) .Add(origin); } screen = screen.Add(-8, -8, 0); var brush = Brushes.Orange; if (Settings.Default.GatheringShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.GatheringShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.GatheringShowDistance) { sb.AppendFormat(" {0:N2}", XIVInfoViewModel.Instance.CurrentUser.GetDistanceTo(actorEntity)); } var actorIcon = RadarIconHelper.Wood; if (actorEntity.HPCurrent > 0) { drawingContext.DrawImage(actorIcon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } else { drawingContext.DrawImage(RadarIconHelper.Skull, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.GatheringShowName || Settings.Default.GatheringShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, 12 + fsModifier, brush); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } #endregion break; default: #region Resolve Other if (Settings.Default.OtherShow) { sb.Clear(); var opacityLevel = (actorEntity.Coordinate.Z / XIVInfoViewModel.Instance.CurrentUser.Coordinate.Z); var fsModifier = ResolveFontSize(opacityLevel); opacityLevel = opacityLevel < 0.5 ? 0.5 : opacityLevel > 1 ? 1 : opacityLevel; drawingContext.PushOpacity(opacityLevel); try { if (!actorEntity.IsValid || user == null) { continue; } if (actorEntity.ID == user.ID) { continue; } Coordinate screen; if (Settings.Default.RadarCompassMode) { var coord = user.Coordinate.Subtract(actorEntity.Coordinate) .Scale(scale); screen = new Coordinate(-coord.X, 0, -coord.Y).Add(origin); } else { screen = user.Coordinate.Subtract(actorEntity.Coordinate) .Rotate2D(user.Heading) .Scale(scale); } screen = screen.Add(-8, -8, 0); ImageSource actorIcon; var brush = Brushes.Yellow; switch (actorEntity.Type) { case Actor.Type.Aetheryte: actorIcon = RadarIconHelper.Crystal; break; case Actor.Type.Minion: actorIcon = RadarIconHelper.Sheep; break; default: actorIcon = RadarIconHelper.NPC; break; } if (actorEntity.HPCurrent > 0 || actorEntity.Type == Actor.Type.Aetheryte) { if (actorIcon != null) { drawingContext.DrawImage(actorIcon, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } } else { drawingContext.DrawImage(RadarIconHelper.Skull, new Rect(new Point(screen.X, screen.Y), new Size(16, 16))); } if (Settings.Default.OtherShowName) { sb.Append(actorEntity.Name); } if (Settings.Default.OtherShowHPPercent) { sb.AppendFormat(" {0:P0}", actorEntity.HPPercent); } if (Settings.Default.OtherShowDistance) { sb.AppendFormat(" {0:N2}", XIVInfoViewModel.Instance.CurrentUser.GetDistanceTo(actorEntity)); } if (Settings.Default.OtherShowName || Settings.Default.OtherShowHPPercent) { var label = new FormattedText(sb.ToString(), _cultureInfo, _flowDirection, _typeface, 12 + fsModifier, brush); drawingContext.DrawText(label, new Point(screen.X + 20, screen.Y)); } } catch (Exception ex) { Logging.Log(Logger, ex.Message); } drawingContext.Pop(); } #endregion break; } } #endregion }
//internal Drawing drawing2; protected override void OnRender(DrawingContext dc) { //base.OnRender(dc); dc.DrawLine(new Pen(Brushes.Green, 10), new Point(0, 0), new Point(10000, 10000)); dc.DrawEllipse(Brushes.Red, null, new Point(200, 200), 100, 100); dc.DrawDrawing(this.drawing); }
protected override void OnRender(DrawingContext dc) { if (_video != null) dc.DrawDrawing(_video); base.OnRender(dc); }
protected virtual void CreatePageVisual(Rect pageBounds, DrawingVisual source, bool isFooterPage, DrawingContext drawingContext) { drawingContext.DrawRectangle(null, FramePen, new Rect { X = FrameRect.X, Y = FrameRect.Y, Width = FrameRect.Width, Height = FrameRect.Height }); var offsetX = PageMargins.Left - pageBounds.X - 1; var offsetY = PageMargins.Top - pageBounds.Y; drawingContext.PushTransform(new TranslateTransform(offsetX, offsetY + HeaderHeight)); var pg = new Rect(new Point(pageBounds.X, pageBounds.Y), new Size(pageBounds.Width, pageBounds.Height)); drawingContext.PushClip(new RectangleGeometry(pg)); //drawingContext.PushOpacityMask(Brushes.White); drawingContext.DrawDrawing(source.Drawing); }
protected void RenderCompass(DrawingContext context) { if (baselinePen == null) { return; } compassClippingRectangle.Transform = invertedYawTransform; compass.Transform = yawTransform; compass.ClipGeometry = compassClippingRectangle; context.DrawDrawing(compass); }
protected sealed override void OnRender(DrawingContext drawingContext) { if (Viewport == null) return; Rect output = Viewport.Output; if (output.Width == 0 || output.Height == 0) return; if (output.IsEmpty) return; if (Visibility != Visibility.Visible) return; if (shouldReRender || manualTranslate || renderTarget == RenderTo.Image || beforeFirstUpdate || updateCalled) { if (graphContents == null) { graphContents = new DrawingGroup(); } if (beforeFirstUpdate) { Update(); } using (DrawingContext context = graphContents.Open()) { if (renderTarget == RenderTo.Screen) { RenderState state = CreateRenderState(Viewport.Visible, RenderTo.Screen); OnRenderCore(context, state); } else { // for future use } } updateCalled = false; } // thumbnail is not created, if // 1) CreateThumbnail is false // 2) this graph has IsLayer property, set to false if (ShouldCreateThumbnail) { RenderThumbnail(); } if (!manualClip) { drawingContext.PushClip(new RectangleGeometry(output)); } bool translate = !manualTranslate && IsTranslated; if (translate) { drawingContext.PushTransform(new TranslateTransform(offset.X, offset.Y)); } drawingContext.DrawDrawing(graphContents); if (translate) { drawingContext.Pop(); } if (!manualClip) { drawingContext.Pop(); } shouldReRender = true; }
protected override void OnRender(DrawingContext drawingContext) { var clock = GetAnimationClock(this); var step = (int)Math.Floor (clock * Spokes); var halfWidth = ActualWidth/2; var halfHeight = ActualHeight/2; var scale = Math.Min (halfWidth, halfHeight); var matrix = Matrix.Identity; matrix.Scale (scale, scale); var angle = -(step*360.0)/Spokes; matrix.Rotate (angle); matrix.Translate (halfWidth, halfHeight); drawingContext.PushTransform(new MatrixTransform (matrix)); drawingContext.DrawDrawing(s_drawing); drawingContext.Pop(); }
// Notice TemplateBinding BackGround must be removed from the Border in the default template (or remove Border from the template) // Border renders the background AFTER the child render has been called // http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/1575d2af-8e86-4085-81b8-a8bf24268e51/?prof=required protected override void OnRender(DrawingContext dc) { //base.OnRender(dc); if (this.Background != null) dc.DrawRectangle(this.Background, null, new Rect(0,0, this.ActualWidth, this.ActualHeight)); if (this.m_drawing == null) return; dc.PushTransform(this.m_offsetTransform); dc.PushTransform(this.m_scaleTransform); dc.DrawDrawing(this.m_drawing); dc.Pop(); dc.Pop(); }
protected override void OnRender(DrawingContext drawingContext) { drawingContext.DrawDrawing(Drawing); }
protected override void OnRender(DrawingContext dc) { if (!guidelinesFixed) { System.Windows.Media.Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice; halfDpiX = m.M11 * 0.5; halfDpiY = m.M22 * 0.5; guidelinesFixed = true; } // Create a guidelines set GuidelineSet guidelines = new GuidelineSet(); guidelines.GuidelinesX.Add(halfDpiX); guidelines.GuidelinesY.Add(halfDpiY); dc.PushGuidelineSet(guidelines); dc.DrawRectangle(backgroundBrush, null, new Rect(0, 0, ActualWidth, ActualHeight)); double range; double pos = 0; double orderOfMag; double stepSize = 0.1; switch (Orientation) { case RulerOrientation.Vertical: //// Thin horizontal lines //range = MaxY - MinY; //orderOfMag = Math.Pow(10, Math.Truncate(Math.Log10(range))); //stepSize = 0.1 * orderOfMag; pos = (Math.Truncate(MinY / stepSize) - 0) * stepSize; //DrawGridHorizonalLines(dc, pos, stepSize, gridLinePen); break; case RulerOrientation.Horizontal: // Thin vertical lines. //range = MaxX - MinX; //orderOfMag = Math.Pow(10, Math.Truncate(Math.Log10(range))); //stepSize = 0.1 * orderOfMag; pos = Math.Truncate(MinX / stepSize) * stepSize; //DrawGridVerticalLines(dc, pos, stepSize, gridLinePen); // Draw the seek needle var needlePos = new System.Windows.Point(NeedlePosition, 0); needlePos = CurveCoordsToScreen(ref needlePos); dc.PushTransform(new TranslateTransform(needlePos.X, needlePos.Y)); dc.DrawDrawing(SeekNeedle); dc.Pop(); break; } dc.Pop(); switch (Orientation) { case RulerOrientation.Vertical: DrawHorizontalLinesText(dc, pos, stepSize); break; case RulerOrientation.Horizontal: DrawVerticalLinesText(dc, pos, stepSize); break; } base.OnRender(dc); }
/* 複寫掉Canvas的繪圖處理,在此加入UML編輯區的繪圖主回圈 */ protected override void OnRender(DrawingContext dc) { /* 畫出基本Canvas */ base.OnRender(dc); /* 畫出Canvas邊界 */ CoreDraw.DrawBorder(dc, new CoreRectRange(new Point(0, 0), new Point(this.ActualWidth, this.ActualHeight)), 5, Brushes.Blue, CoreDraw.BorderStyle_MultipleSegment); /* 多型的應用,畫出BaseUMLShape的List,並透過多型來呼叫真正實體類別該呈現的繪圖效果 */ foreach (BaseUMLShape s in UMLShapes) { s.Draw(dc); } /* 繪出前景,前景覆蓋在所有圖層上,用來顯示特殊,或使用工具時的相關繪圖特效 */ dc.DrawDrawing(Foreground); }