Beispiel #1
0
        //
        // Draw region between selected viases
        //

        public void DrawRegionBetweenSelectedViases()
        {
            //
            // Grab selected viases (minimum 3)
            //

            List <Entity> selected = GetSelectedVias();

            if (selected.Count < 3)
            {
                return;
            }

            //
            // Fill path
            //

            List <PointF> path = new List <PointF>();

            foreach (Entity entity in selected)
            {
                PointF point = new PointF();

                point.X = entity.LambdaX;
                point.Y = entity.LambdaY;

                path.Add(point);
            }

            //
            // Add new region entity
            //

            Entity item = new Entity();

            item.Type           = EntityType.Region;
            item.Label          = "";
            item.LabelAlignment = TextAlignment.GlobalSettings;
            item.Priority       = RegionPriority;
            item.Selected       = false;
            item.PathPoints     = path;
            item.LambdaX        = path[0].X;
            item.LambdaY        = path[0].Y;
            item.ColorOverride  = RegionOverrideColor;
            item.FontOverride   = null;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);
            SortEntities();
            Invalidate();

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);
        }
Beispiel #2
0
        public Entity AddVias(EntityType Type, int ScreenX, int ScreenY, Color debugColor, bool update = true)
        {
            Entity item = new Entity();

            PointF point = ScreenToLambda(ScreenX, ScreenY);

            //
            // Get rid of clutching viases
            //

            List <Entity> _entities = GetEntities();

            if (debugColor == Color.Black)
            {
                foreach (Entity entity in _entities)
                {
                    if (entity.IsVias())
                    {
                        float dist = (float)Math.Sqrt(Math.Pow(entity.LambdaX - point.X, 2) +
                                                      Math.Pow(entity.LambdaY - point.Y, 2));

                        if (dist <= 1.5F)
                        {
                            return(null);
                        }
                    }
                }
            }

            item.Label         = "";
            item.LambdaX       = point.X;
            item.LambdaY       = point.Y;
            item.LambdaWidth   = 1;
            item.LambdaHeight  = 1;
            item.Type          = Type;
            item.ColorOverride = debugColor == Color.Black ? ViasOverrideColor : debugColor;
            item.Priority      = ViasPriority;
            item.FontOverride  = null;
            item.WidthOverride = 0;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }
Beispiel #3
0
        public void DeleteSelected()
        {
            bool          UpdateRequired = false;
            List <Entity> pendingDelete  = new List <Entity>();

            foreach (Entity entity in GetEntities())
            {
                if (entity.Selected == true)
                {
                    pendingDelete.Add(entity);
                    UpdateRequired = true;
                }
            }

            foreach (Entity entity in pendingDelete)
            {
                OnEntityRemove?.Invoke(this, entity, EventArgs.Empty);

                entity.parent.Children.Remove(entity);
            }

            if (UpdateRequired == true)
            {
                Invalidate();

                OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            }

            if (entityGrid != null)
            {
                entityGrid.SelectedObject = null;
            }

            SetDestinationNode(root);
        }
Beispiel #4
0
        public void RemoveEntity(Entity entity)
        {
            entity.parent.Children.Remove(entity);

            OnEntityRemove?.Invoke(this, entity, EventArgs.Empty);

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
        }
Beispiel #5
0
        //
        // Add region
        //

        public Entity AddRegion(List <Point> points, Color color, bool update = true)
        {
            //
            // Fill path (minimum 3 points)
            //

            if (points.Count < 3)
            {
                Invalidate();
                return(null);
            }

            List <PointF> path = new List <PointF>();

            foreach (Point point in points)
            {
                PointF p = ScreenToLambda(point.X, point.Y);

                path.Add(p);
            }

            //
            // Add new region entity
            //

            Entity item = new Entity();

            item.Type           = EntityType.Region;
            item.Label          = "";
            item.LabelAlignment = TextAlignment.GlobalSettings;
            item.Priority       = RegionPriority;
            item.Selected       = false;
            item.PathPoints     = path;
            item.LambdaX        = path[0].X;
            item.LambdaY        = path[0].Y;
            item.ColorOverride  = color;
            item.FontOverride   = null;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }
Beispiel #6
0
        public void DeleteAllEntites()
        {
            foreach (Entity entity in GetEntities())
            {
                OnEntityRemove?.Invoke(this, entity, EventArgs.Empty);
            }

            root.Children.Clear();
            Invalidate();

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);

            SetDestinationNode(root);
        }
Beispiel #7
0
        public Entity AddWireOnImage(EntityType Type, int StartX, int StartY, int EndX, int EndY, bool update = true)
        {
            Entity item = new Entity();

            PointF point1 = ImageToLambda(StartX, StartY);
            PointF point2 = ImageToLambda(EndX, EndY);

            float len = (float)Math.Sqrt(Math.Pow(point2.X - point1.X, 2) +
                                         Math.Pow(point2.Y - point1.Y, 2));

            if (len < 1.0F)
            {
                Invalidate();
                return(null);
            }

            item.Label         = "";
            item.LambdaX       = point1.X;
            item.LambdaY       = point1.Y;
            item.LambdaEndX    = point2.X;
            item.LambdaEndY    = point2.Y;
            item.LambdaWidth   = 1;
            item.LambdaHeight  = 1;
            item.Type          = Type;
            item.ColorOverride = WireOverrideColor;
            item.Priority      = WirePriority;
            item.FontOverride  = null;
            item.WidthOverride = 0;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }
Beispiel #8
0
        private Entity AddBeacon(int ScreenX, int ScreenY, bool update = true)
        {
            Entity item = new Entity();

            PointF point = ScreenToLambda(ScreenX, ScreenY);

            item.Label         = GenBeaconName();
            item.LambdaX       = point.X;
            item.LambdaY       = point.Y;
            item.LambdaWidth   = 1;
            item.LambdaHeight  = 1;
            item.Type          = EntityType.Beacon;
            item.ColorOverride = Color.Black;
            item.Priority      = BeaconPriority;
            item.FontOverride  = null;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }
Beispiel #9
0
        public Entity AddCell(EntityType Type, int StartX, int StartY, int EndX, int EndY, bool update = true)
        {
            Entity item = new Entity();

            PointF point1 = ScreenToLambda(StartX, StartY);
            PointF point2 = ScreenToLambda(EndX, EndY);

            PointF originPos = new PointF();
            PointF size      = new PointF();

            size.X = Math.Abs(point2.X - point1.X);
            size.Y = Math.Abs(point2.Y - point1.Y);

            float square = size.X * size.Y;

            if (square < 4.0F)
            {
                Invalidate();
                return(null);
            }

            if (point2.X > point1.X)
            {
                if (point2.Y > point1.Y)
                {
                    originPos.X = point1.X;
                    originPos.Y = point1.Y;
                }
                else
                {
                    originPos.X = point1.X;
                    originPos.Y = point2.Y;
                }
            }
            else
            {
                if (point2.Y > point1.Y)
                {
                    originPos.X = point2.X;
                    originPos.Y = point1.Y;
                }
                else
                {
                    originPos.X = point2.X;
                    originPos.Y = point2.Y;
                }
            }

            item.Label         = "";
            item.LambdaX       = originPos.X;
            item.LambdaY       = originPos.Y;
            item.LambdaEndX    = 1F;
            item.LambdaEndY    = 1F;
            item.LambdaWidth   = size.X;
            item.LambdaHeight  = size.Y;
            item.Type          = Type;
            item.ColorOverride = CellOverrideColor;
            item.Priority      = CellPriority;
            item.FontOverride  = null;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }