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(); } }
/// <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); } }