Пример #1
0
        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;
        }
Пример #3
0
        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);
                }
            }
        }