public void Invalidate(double scale = 1) { if (BoundaryCurveIsDirty) { BoundaryPath.Data = CreatePathFromNodeBoundary(); BoundaryCurveIsDirty = false; } double node_scale = Scale(); Rectangle bounds = LgNodeInfo.OriginalCurveOfGeomNode.BoundingBox; Size real_size = new Size(bounds.Width * node_scale * scale, bounds.Height * node_scale * scale); if (node_scale < 0.5 && (real_size.Width < _fontSize || real_size.Height < _fontSize)) { _visualObject.LevelOfDetail = 0; } else { if (_visualObject.MaxLevelOfDetail == 0) { // First time becoming visible: generate visuals InitiateContainer(); Visual visual; Rectangle rect; rect = CreateIcon(new Point(), out visual); _visualObject.AddDetail(visual, rect); rect = CreateTitle(rect.RightBottom, out visual); _visualObject.AddDetail(visual, rect); rect = CreateDescription(new Point(rect.Center.X, rect.Top), out visual); _visualObject.AddDetail(visual, rect); } _visualObject.LevelOfDetail = _visualObject.MeasureLevelOfDetail(real_size); CommonX.PositionElement(_visualObject, _visualObject.BoundingBox, Node.BoundingBox, 1 / scale); } }
public XLabel(Edge edge) { if (false) { TextBlock tb = null; if (edge.Label != null) { tb = new TextBlock { Text = edge.Label.Text }; System.Windows.Size size = CommonX.Measure(tb); tb.Width = size.Width; tb.Height = size.Height; CommonX.PositionElement(tb, edge.Label.Center, 1); } _visualObject = tb; } DrawingObject = edge; }
public void Invalidate(double scale = 1) { if (BoundaryCurveIsDirty) { BoundaryPath.Data = CreatePathFromNodeBoundary(); BoundaryCurveIsDirty = false; } PositionPath(Node.BoundingBox); var node_scale = Scale(); if (_visualObject != null) { if (node_scale < 0.5) { if (_visualObject.Visibility != Visibility.Hidden) { _visualObject.Visibility = Visibility.Hidden; BoundaryPath.Fill = BoundaryPath.Stroke; } } else { if (_visualObject.Visibility != Visibility.Visible) { _visualObject.Visibility = Visibility.Visible; BoundaryPath.Fill = CommonX.BrushFromMsaglColor(Node.Attr.FillColor); } if (_vTitle == null) { Grid g = new Grid(); ((Border)_visualObject).Child = g; g.Margin = new Thickness(4); g.VerticalAlignment = VerticalAlignment.Center; g.HorizontalAlignment = HorizontalAlignment.Center; g.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Auto) }); g.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); _vTitle = new TextBlock { Text = Node.Label.Text, Name = "Title" }; _vTitle.VerticalAlignment = VerticalAlignment.Center; g.Children.Add(_vTitle); Grid.SetColumn(_vTitle, 1); if (_category != null) { ImageSource src = Categories.GetIcon(_category); if (src != null) { _vIcon = new Image { Source = src }; _vIcon.VerticalAlignment = VerticalAlignment.Center; RenderOptions.SetBitmapScalingMode(_vIcon, BitmapScalingMode.HighQuality); g.Children.Add(_vIcon); } } } double fontSize = Math.Min(12 / (node_scale * scale), 12); _vTitle.FontSize = fontSize; if (_vIcon != null) { _vIcon.Width = fontSize * 2; } CommonX.PositionElement(_visualObject, Node.BoundingBox.Center, node_scale); } } }