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(); } }
public void Command_GetxSignalInfo()//Const View : IServerDocumentView; Var Parameters : WideString) { IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer; IPCB_Board Board; IPCB_BoardIterator Iterator; IPCB_ObjectClass2 ObjectClass; IPCB_PinPairsManager PinPairsManager; IPCB_PinPair PinPair; //int I; ArrayList Report = new ArrayList(); IClient Client = DXP.GlobalVars.Client; IPCB_Primitive Prim; IPCB_Pad Pad; if (PCBServer == null) { return; } Board = PCBServer.GetCurrentPCBBoard(); if (Board == null) { return; } PinPairsManager = Board.GetState_PinPairsManager(); if (PinPairsManager == null) { return; } PinPairsManager.InvalidateAll(); Iterator = Board.BoardIterator_Create(); try { Iterator.AddFilter_ObjectSet(Util.MKset(PCB.TObjectId.eClassObject)); Iterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); ObjectClass = (IPCB_ObjectClass2)Iterator.FirstPCBObject(); while (ObjectClass != null) { if (ObjectClass.GetState_MemberKind() == TClassMemberKind.eClassMemberKind_Signal) { Report.Add("xSignal Class : " + ObjectClass.GetState_DisplayName()); for (int I = 0; I <= PinPairsManager.GetState_PinPairsCount() - 1; I++) { PinPair = PinPairsManager.GetState_PinPairs(I); if (ObjectClass.IsMember(PinPair.GetState_Name())) { //need primitive info //refdes and pin number Report.Add(String.Format(" xSignal : {0}, Node Count : {1}, Signal Length : {2}mils, Routed Length : {3}mils, Unrouted Length : {4}mils, Primitive Count : {5}", PinPair.GetState_Name(), PinPair.GetState_NodeCount(), EDP.Utils.CoordToMils((int)PinPair.GetState_Length()), EDP.Utils.CoordToMils((int)PinPair.GetState_RoutedLength()), EDP.Utils.CoordToMils((int)PinPair.GetState_UnroutedLength()), PinPair.GetState_PrimitivesCount())); for (int j = 0; j <= PinPair.GetState_PrimitivesCount() - 1; j++) { Prim = PinPair.GetPrimitives(j); if (Prim.GetState_DescriptorString().StartsWith("Pad")) //need refdes, pin number, net name { Pad = (IPCB_Pad)Prim; //Pad.GetState_PinDescriptorString() = "U6-C17" Report.Add(" Pin: " + Pad.GetState_PinDescriptorString() + ", Net: " + Prim.GetState_Net().GetState_Name()); //Report.Add(" Primative Desc: " + Prim.GetState_DescriptorString() + ", Net : " + Prim.GetState_Net().GetState_Name()); } } } } } ObjectClass = (IPCB_ObjectClass2)Iterator.NextPCBObject(); } File.WriteAllLines("C:\\xSignals.txt", (string[])Report.ToArray(typeof(string))); //Client.OpenDocument("Text", "C:\\xSignals.txt"); } finally { Board.BoardIterator_Destroy(ref Iterator); //FreeAndnull(Report); } }
/// <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); } }