public GraphEntity([NotNull] IEntityShape shape, DpiState dpiState) : base() { _shape = shape; _dpiState = dpiState; var identity = shape.Identity; if (identity is IEntity entity) { Initialize(Icons.Resources.ResourceManager, GetIconName(entity), entity.Name); if (_imageSize == ImageSize.Big) { if (entity.BigImage != null && Icon is GoImage icon) { icon.Image = entity.BigImage; } Icon.Size = new SizeF(64.0f, 64.0f); } else { if (entity.Image != null && Icon is GoImage icon) { icon.Image = entity.Image; } Icon.Size = new SizeF(32.0f, 32.0f); } entity.ImageChanged += OnEntityImageChanged; //InPort.ToSpot = GoObject.NoSpot; //InPort.IsValidSelfNode = false; //InPort.IsValidDuplicateLinks = false; //OutPort.FromSpot = GoObject.NoSpot; //OutPort.IsValidSelfNode = false; //OutPort.IsValidDuplicateLinks = false; Port.Size = new SizeF(15f, 15f); Icon.Resizable = false; Reshapable = false; _threatsMarker = new AssociatedThreatsMarker(entity) { Position = new PointF(Icon.Size.Width / 2.0f, Icon.Size.Height / 2.0f), }; _threatsMarker.ThreatEventClicked += OnThreatEventClicked; Add(_threatsMarker); _diagramMarker = new AssociatedDiagramMarker(entity) { Position = new PointF(16.0f * Dpi.Factor.Width, 0), }; _diagramMarker.DiagramClicked += OnDiagramClicked; Add(_diagramMarker); _warningMarker = new WarningMarker() { Position = new PointF(0.0f, 16.0f * Dpi.Factor.Height), }; Add(_warningMarker); switch (_dpiState) { case DpiState.TooSmall: Location = new PointF(_shape.Position.X * 2, _shape.Position.Y * 2); break; case DpiState.TooBig: Location = new PointF(_shape.Position.X / 2, _shape.Position.Y / 2); break; default: Location = _shape.Position; break; } Copyable = false; AddObserver(this); // ReSharper disable once SuspiciousTypeConversion.Global ((INotifyPropertyChanged)identity).PropertyChanged += OnPropertyChanged; } else { throw new ArgumentException(Properties.Resources.ShapeNotEntityError); } }