Пример #1
0
    /// <summary>
    /// Moves the all mechanical objects in embeded components to their new layers.
    /// </summary>
    /// <param name="EmbededResistors">List of components to be processed.</param>
    /// <param name="UsedLayers">List of used layers</param>
    /// <param name="LayerCounts">
    /// List of layers used that has been updated by the user.
    /// Allows for the user to disable specific layers to be modified.
    /// </param>
    void MoveMechLayers(List <IPCB_Component> EmbededResistors, List <TV6_Layer> UsedLayers, SortedDictionary <string, int> LayerCounts)
    {
        DXP.Utils.PercentInit("Updating Embeded Components", EmbededResistors.Count);

        IPCB_GroupIterator CompIterator;
        IPCB_Primitive     CompItem;
        IPCB_Component     Component;

        //Step through each embeded component
        for (int i = 0; i <= EmbededResistors.Count - 1; i++)
        {
            Component = EmbededResistors[i];
            //Iterate through all objects of the current component.
            CompIterator = Component.GroupIterator_Create();
            CompIterator.AddFilter_LayerSet_2(PCBConstant.V7MechanicalLayersSet);
            CompItem = CompIterator.FirstPCBObject();

            while (CompItem != null)
            {
                //Check if object is on mech layer.
                if (new V7_Layer(CompItem.GetState_V7Layer()).IsMechanicalLayer() && LayerCounts.ContainsKey(EDP.Utils.LayerToString(new V7_Layer(Component.GetState_Layer()))))
                {
                    //Move object to its new respective mech layer.
                    CompItem.BeginModify();
                    CompItem.SetState_V7Layer(V7_Layer.MechanicalLayer((ulong)UsedLayers.IndexOf(Component.GetState_Layer()) + 19));
                    CompItem.EndModify();
                }
                CompItem = CompIterator.NextPCBObject();
            }
            DXP.Utils.PercentUpdate();
        }
        DXP.Utils.PercentFinish();
    }
Пример #2
0
    private void AddCenterMark()
    {
        IPCB_ServerInterface PcbServer = PCB.GlobalVars.PCBServer;

        if (PcbServer == null)
        {
            return;
        }

        IPCB_Library PcbLib = PcbServer.GetCurrentPCBLibrary();

        if (PcbLib == null)
        {
            return;
        }

        IPCB_LibraryIterator LibIteartor = PcbLib.LibraryIterator_Create();

        LibIteartor.AddFilter_ObjectSet(new PCB.TObjectSet(PCB.TObjectId.eComponentObject));
        IPCB_LibComponent PcbCmp = LibIteartor.FirstPCBObject() as IPCB_LibComponent;

        while (PcbCmp != null)
        {
            IPCB_Board currentBoard = PcbServer.GetCurrentPCBBoard();

            int      Origin_X       = currentBoard.GetState_XOrigin();
            int      Origin_Y       = currentBoard.GetState_YOrigin();
            int      LineWidth      = EDP.Utils.MMsToCoord((double)0.1);
            int      HalfLineLegnth = EDP.Utils.MMsToCoord((double)0.5);
            V7_Layer MechLayer15    = new V7_Layer().Mechanical15();

            PcbServer.PreProcess();

            IPCB_Track vLine = PcbServer.PCBObjectFactory(PCB.TObjectId.eTrackObject, TDimensionKind.eNoDimension, PCB.TObjectCreationMode.eCreate_Default) as IPCB_Track;
            SetTrackLocaton(vLine, Origin_X - HalfLineLegnth, Origin_Y, Origin_X + HalfLineLegnth, Origin_Y);
            vLine.SetState_Layer((int)MechLayer15.ID);
            vLine.SetState_Width(LineWidth);

            IPCB_Track hLine = PcbServer.PCBObjectFactory(PCB.TObjectId.eTrackObject, TDimensionKind.eNoDimension, PCB.TObjectCreationMode.eCreate_Default) as IPCB_Track;
            SetTrackLocaton(hLine, Origin_X, Origin_Y + HalfLineLegnth, Origin_X, Origin_Y - HalfLineLegnth);
            hLine.SetState_Layer((int)MechLayer15.ID);
            hLine.SetState_Width(LineWidth);

            currentBoard.AddPCBObject(vLine);
            currentBoard.AddPCBObject(hLine);

            PcbServer.PostProcess();
            DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw");

            PcbCmp = LibIteartor.NextPCBObject() as IPCB_LibComponent;
        }

        PcbLib.LibraryIterator_Destroy(ref LibIteartor);
    }
Пример #3
0
    /// <summary>
    /// Gets a list of electrical layers for the provided board file.
    /// </summary>
    /// <param name="Board">Current board</param>
    /// <returns>List of layers.</returns>
    public static List <V7_Layer> GetV7ElectLayers(IPCB_Board Board)
    {
        List <V7_Layer>    tempList      = new List <V7_Layer>();
        IPCB_LayerIterator LayerIterator = Board.LayerIterator();

        LayerIterator.AddFilter_ElectricalLayers();
        LayerIterator.First();
        V7_Layer tmpLayer;

        //tmpLayer =  new V7_Layer( LayerIterator.Layer().Data);

        do
        {
            tmpLayer = new V7_Layer(LayerIterator.Layer().Data);
            //if (EDP.Utils.LayerToString(tmpLayer).Contains("Mid"))
            tempList.Add(tmpLayer);
        } while (LayerIterator.Next());
        return(tempList);
    }
Пример #4
0
    private void DrawAreaAsCourtyard(PrimitiveArea Area, IPCB_ServerInterface ArgPcbServer, IPCB_Board ArgPcbBoard)
    {
        int      CourtyardClearnce_IPC_L = EDP.Utils.MMsToCoord((double)0.1);
        int      lineWidth   = EDP.Utils.MMsToCoord((double)0.05);
        V7_Layer MechLayer15 = new V7_Layer().Mechanical15();

        ArgPcbServer.PreProcess();

        IPCB_Track trackLeft = ArgPcbServer.PCBObjectFactory(PCB.TObjectId.eTrackObject, TDimensionKind.eNoDimension, PCB.TObjectCreationMode.eCreate_GlobalCopy) as IPCB_Track;

        SetTrackLocaton(trackLeft, Area.BottomLeft.X - CourtyardClearnce_IPC_L, Area.BottomLeft.Y - CourtyardClearnce_IPC_L, Area.TopLeft.X - CourtyardClearnce_IPC_L, Area.TopLeft.Y + CourtyardClearnce_IPC_L);
        trackLeft.SetState_Width(lineWidth);
        trackLeft.SetState_Layer((int)MechLayer15.ID);

        IPCB_Track trackRight = ArgPcbServer.PCBObjectFactory(PCB.TObjectId.eTrackObject, TDimensionKind.eNoDimension, PCB.TObjectCreationMode.eCreate_GlobalCopy) as IPCB_Track;

        SetTrackLocaton(trackRight, Area.BottomRight.X + CourtyardClearnce_IPC_L, Area.BottomRight.Y - CourtyardClearnce_IPC_L, Area.TopRight.X + CourtyardClearnce_IPC_L, Area.TopRight.Y + CourtyardClearnce_IPC_L);
        trackRight.SetState_Width(lineWidth);
        trackRight.SetState_Layer((int)MechLayer15.ID);

        IPCB_Track trackTop = ArgPcbServer.PCBObjectFactory(PCB.TObjectId.eTrackObject, TDimensionKind.eNoDimension, PCB.TObjectCreationMode.eCreate_GlobalCopy) as IPCB_Track;

        SetTrackLocaton(trackTop, Area.TopLeft.X - CourtyardClearnce_IPC_L, Area.TopLeft.Y + CourtyardClearnce_IPC_L, Area.TopRight.X + CourtyardClearnce_IPC_L, Area.TopRight.Y + CourtyardClearnce_IPC_L);
        trackTop.SetState_Width(lineWidth);
        trackTop.SetState_Layer((int)MechLayer15.ID);

        IPCB_Track trackBottom = ArgPcbServer.PCBObjectFactory(PCB.TObjectId.eTrackObject, TDimensionKind.eNoDimension, PCB.TObjectCreationMode.eCreate_GlobalCopy) as IPCB_Track;

        SetTrackLocaton(trackBottom, Area.BottomLeft.X - CourtyardClearnce_IPC_L, Area.BottomLeft.Y - CourtyardClearnce_IPC_L, Area.BottomRight.X + CourtyardClearnce_IPC_L, Area.BottomRight.Y - CourtyardClearnce_IPC_L);
        trackBottom.SetState_Width(lineWidth);
        trackBottom.SetState_Layer((int)MechLayer15.ID);

        ArgPcbBoard.AddPCBObject(trackBottom);
        ArgPcbBoard.AddPCBObject(trackLeft);
        ArgPcbBoard.AddPCBObject(trackRight);
        ArgPcbBoard.AddPCBObject(trackTop);

        ArgPcbServer.PostProcess();
        DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw");
    }
Пример #5
0
    /// <summary>
    /// Checks mechanical layers 20 thru 24 for any objects. FixEmbededResistors Will move content to these layers which may interfere with current content or layer mapping.
    /// </summary>
    /// <returns>True: Layers are clear, False:Objects on one of the layers.</returns>
    public Boolean MechanicalClear()
    {
        try
        {
            //Checking Mechanical Layers

            //IPCB_Component Component; // component object
            IPCB_BoardIterator Iterator;
            IPCB_Primitive     Item;
            IPCB_Board         Board; // document board object

            Board = Util.GetCurrentPCB();
            if (Board == null)
            {
                return(false);
            }
            //Create board iterator
            Iterator = Board.BoardIterator_Create();
            //Create filter set for all availible primitives.
            PCB.TObjectSet FilterSet = new PCB.TObjectSet(new PCB.TObjectId[] { PCB.TObjectId.eArcObject, PCB.TObjectId.eViaObject, PCB.TObjectId.eTrackObject, PCB.TObjectId.eTextObject, PCB.TObjectId.eFillObject, PCB.TObjectId.ePadObject, PCB.TObjectId.eComponentObject, PCB.TObjectId.eNetObject, PCB.TObjectId.ePolyObject, PCB.TObjectId.eDimensionObject, PCB.TObjectId.eCoordinateObject, PCB.TObjectId.eEmbeddedObject, PCB.TObjectId.eEmbeddedBoardObject, PCB.TObjectId.eFromToObject, PCB.TObjectId.eConnectionObject, PCB.TObjectId.eComponentBodyObject });
            Iterator.AddFilter_ObjectSet(FilterSet);
            //Filter for mechanical layers only.
            Iterator.AddFilter_LayerSet_2(PCBConstant.V7MechanicalLayersSet); //BoardIterator.AddFilter_LayerSet(PCBConstant.MechanicalLayersSet);
            Iterator.AddFilter_Method(TIterationMethod.eProcessAll);

            int x = 0;
            Item = Iterator.FirstPCBObject();
            while (Item != null)
            {
                x++; Item = Iterator.NextPCBObject();
            }
            DXP.Utils.PercentInit("Checking Mechanical Layers", x);

            ///Step through all objects on mechanical layers
            ///to see if they are on layer 20 through 24.
            Item = Iterator.FirstPCBObject();
            while (Item != null)
            {
                for (ulong i = (ulong)ToolsPreferences.FirstResistorLayer + 1; i <= (ulong)(ToolsPreferences.FirstResistorLayer + ToolsPreferences.LayerCount); i++)
                {
                    if (Item.GetState_V7Layer().ID == V7_Layer.MechanicalLayer(i).ID) //Compare item layer to MechanicalLayer i.
                    {
                        return(false);
                    }
                }
                Item = Iterator.NextPCBObject();
                DXP.Utils.PercentUpdate();
            }

            DXP.Utils.PercentFinish();
            //Iterator clean-up
            Board.BoardIterator_Destroy(ref Iterator);
            return(true);
        }
        catch (Exception ex)
        {
            ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex);
            error = true;
            return(false);
        }
    }