예제 #1
0
    public void SwapResistors()
    {
        //IPCB_Component Component; // component object
        IPCB_BoardIterator Iterator;
        IPCB_Primitive     Item;
        IPCB_Board         Board; // document board object
        IPCB_Net           Net;

        Board = Util.GetCurrentPCB();
        if (Board == null)
        {
            return;
        }
        //Create board iterator
        Iterator = Board.BoardIterator_Create();
        PCB.TObjectSet FilterSet = new PCB.TObjectSet();
        //Filter for components only.
        FilterSet.Add(PCB.TObjectId.eConnectionObject);
        Iterator.AddFilter_ObjectSet(FilterSet);
        Iterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); //Filter all layers.
        Iterator.AddFilter_Method(TIterationMethod.eProcessAll);


        Item = Iterator.FirstPCBObject();
        while (Item != null)
        {
            if (Item.GetState_Selected())
            {
                Net = Item.GetState_Net();
            }
            //Net.GetPrimitiveCount(new PCB.TObjectSet(new PCB.TObjectId[] { PCB.TObjectId.ePadObject }))
            //?Net.GetPrimitiveAt(1, TObjectId.ePadObject).GetState_DescriptorString()
            //"Pad U11-40(1557.72mil,2321.85mil) on Top Layer"
            //? Net.GetPrimitiveAt(2, TObjectId.ePadObject).GetState_DescriptorString()
            //"Pad R161-2(3000.004mil,2675mil) on Bottom Layer"
            Item = Iterator.NextPCBObject();
        }
    }
예제 #2
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);
        }
    }