public void CollectNetClasses() { int i; IPCB_Board Board; IPCB_BoardIterator ClassIterator; IPCB_ObjectClass NetClass; IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer; ArrayList Report = new ArrayList(); IClient Client = DXP.GlobalVars.Client; Board = PCBServer.GetCurrentPCBBoard(); ClassIterator = Board.BoardIterator_Create(); ClassIterator.SetState_FilterAll(); ClassIterator.AddFilter_ObjectSet(Util.MKset(PCB.TObjectId.eClassObject)); NetClass = (IPCB_ObjectClass)ClassIterator.FirstPCBObject(); while (NetClass != null) { i = 0; if (NetClass.GetState_MemberKind() == TClassMemberKind.eClassMemberKind_Net) { Report.Add("NetClass Name: " + NetClass.GetState_Name()); while (NetClass.GetState_MemberName(i) != null) { Report.Add(" Member: " + NetClass.GetState_MemberName(i)); i++; } } NetClass = (IPCB_ObjectClass)ClassIterator.NextPCBObject(); } Board.BoardIterator_Destroy(ref ClassIterator); File.WriteAllLines("C:\\NetClass.txt", (string[])Report.ToArray(typeof(string))); //Client.OpenDocument("Text", "C:\\NetClass.txt"); }
private void CountPrimitivesOfFootprint() { OpenFileDialog openDialog = InitFileOpenDialog("PCBLIB"); if (openDialog == null) { return; } string[] FootprintFiles = openDialog.FileNames; foreach (string FootprintFile in FootprintFiles) { System.Threading.Thread.Sleep(5000); IServerDocument PcbDocuemnt = OpenDocuemnt(FootprintFile, "PCBLIB"); if (PcbDocuemnt == null) { DXP.Utils.ShowMessage("Failed to open " + FootprintFile); return; } IPCB_ServerInterface PcbServer = PCB.GlobalVars.PCBServer; IPCB_Library PcbLib = PcbServer.GetCurrentPCBLibrary(); IPCB_Board currentBoard = PcbServer.GetCurrentPCBBoard(); currentBoard.GraphicalView_ZoomRedraw(); 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) { string FootprintDescription = PcbCmp.GetState_Description(); string FootprintName = PcbCmp.GetState_Pattern(); IPCB_GroupIterator PcbObjItera = PcbCmp.GroupIterator_Create(); int count = 0; IPCB_Primitive PcbObj = PcbObjItera.FirstPCBObject(); while (PcbObj != null) { count++; PcbObj = PcbObjItera.NextPCBObject(); } PcbCmp.GroupIterator_Destroy(ref PcbObjItera); System.IO.File.AppendAllText(@"G:\report.txt", FootprintName + "|" + FootprintDescription + "|" + count.ToString() + "\r\n"); PcbCmp = LibIteartor.NextPCBObject() as IPCB_LibComponent; } PcbLib.LibraryIterator_Destroy(ref LibIteartor); CloseDocument(PcbDocuemnt); } }
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); }
//Autogenerated code. End of implementation [GetState_Viagrid] //Autogenerated code. Begin of implementation [Command_Viagrid] public void Command_Viagrid(IServerDocumentView view, ref string parameters) { IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer; if (pcbServer == null) { return; } IPCB_Board pcbBoard = pcbServer.GetCurrentPCBBoard(); if (pcbBoard == null) { return; } DXP.Utils.RunCommand("PCB:DeSelect", "Scope=All"); var boundingRect = pcbBoard.GetState_BoardOutline().BoundingRectangle(); var gridSize = (int)pcbBoard.GetState_ComponentGridSize(); var delta = EDP.Utils.MMsToCoord(0.001); IPCB_BoardIterator iterator = pcbBoard.BoardIterator_Create(); iterator.AddFilter_ObjectSet(new PCB.TObjectSet(PCB.TObjectId.eViaObject)); iterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); iterator.AddFilter_Area(boundingRect.Left, boundingRect.Bottom, boundingRect.Right, boundingRect.Top); IPCB_Primitive pcbObject = iterator.FirstPCBObject(); while (pcbObject != null) { if (pcbObject is IPCB_Via via && (via.GetState_XLocation() % gridSize > delta || via.GetState_XLocation() % gridSize > delta)) { via.SetState_Selected(true); } pcbObject = iterator.NextPCBObject(); } pcbBoard.BoardIterator_Destroy(ref iterator); DXP.Utils.RunCommand("PCB:RunQuery", "Apply=True|Expr=IsSelected|Mask=True|Select=True"); }
void xSignalReport() { IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer; IPCB_Board Board; IPCB_PinPairsManager PinPairsManager; IPCB_PinPair PinPair; ArrayList Report = new ArrayList(); IClient Client = DXP.GlobalVars.Client; if (PCBServer == null) { return; } //Get current board. Board = PCBServer.GetCurrentPCBBoard(); if (Board == null) { return; } //Get board pinpair manager used for xSignals. PinPairsManager = Board.GetState_PinPairsManager(); if (PinPairsManager == null) { return; } List <IPCB_PinPair> test = new List <IPCB_PinPair>(); PinPair = PinPairsManager.CreateFromPinsDescriptors("U66|U7"); //PinPair.GetState_Length() if = -1 then broken. //PinPair.SetState_Name("Test2"); test.Add(PinPair); //PinPairsManager.AssignPinPairClass(PinPair, "Temp"); PinPairsManager.InvalidateAll(); //Iterator = Board.BoardIterator_Create(); //try //{ // //Filter for class objects // 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()); // //Loop through all xSignals of the board. // for (int I = 0; I <= PinPairsManager.GetState_PinPairsCount() - 1; I++) // { // PinPair = PinPairsManager.GetState_PinPairs(I); // if (ObjectClass.IsMember(PinPair.GetState_Name())) // { // 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())); // //Loop through all the pins of the xSignal. // 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()); // } // } // } // } // } // ObjectClass = (IPCB_ObjectClass2)Iterator.NextPCBObject(); // } // //Write report file. // File.WriteAllLines(Util.ProjPath() + "\\xSignals.txt", (string[])Report.ToArray(typeof(string))); // //Open file. // Client.ShowDocument(Client.OpenDocument("Text", Util.ProjPath() + "\\xSignals.txt")); //} ////Error catch if the file is open. //catch (IOException) //{ // Utils.ShowMessage("File in use. Please close the file and try again."); //} //catch (Exception ex) //{ // ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex); //} //finally //{ // Board.BoardIterator_Destroy(ref Iterator); //} }
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); } }
private void CleanUpSamtecFootprints() { 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; PcbServer.PreProcess(); while (PcbCmp != null) { IPCB_Board currentBoard = PcbServer.GetCurrentPCBBoard(); // heads up, PCB Ojbect can be added only by IPCB_Board, not IPCB_Component IPCB_GroupIterator PcbObjItera = PcbCmp.GroupIterator_Create(); IPCB_Primitive PcbObj = PcbObjItera.FirstPCBObject(); while (PcbObj != null) { switch (PcbObj.GetState_ObjectID()) { case PCB.TObjectId.eTrackObject: if ((int)PcbObj.GetState_V7Layer().ID != (int)new V7_Layer().Mechanical1().ID) { PcbObj = PcbObjItera.NextPCBObject(); continue; } IPCB_Track TrackObj = PcbObj as IPCB_Track; TrackObj.SetState_Width(EDP.Utils.MMsToCoord((double)0.1)); TrackObj.SetState_Layer((int)new V7_Layer().Mechanical13().ID); break; case PCB.TObjectId.eArcObject: if ((int)PcbObj.GetState_V7Layer().ID != (int)new V7_Layer().Mechanical1().ID) { PcbObj = PcbObjItera.NextPCBObject(); continue; } IPCB_Arc ArcObj = PcbObj as IPCB_Arc; ArcObj.SetState_LineWidth(EDP.Utils.MMsToCoord((double)0.1)); ArcObj.SetState_Layer((int)new V7_Layer().Mechanical13().ID); break; case PCB.TObjectId.eComponentBodyObject: IPCB_ComponentBody BodyObj = PcbObj as IPCB_ComponentBody; BodyObj.SetState_Layer((int)new V7_Layer().Mechanical13().ID); break; case PCB.TObjectId.eTextObject: PcbCmp.RemovePCBObject(PcbObj); break; } PcbObj = PcbObjItera.NextPCBObject(); } PcbServer.PostProcess(); DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw"); PcbCmp.GroupIterator_Destroy(ref PcbObjItera); PcbCmp = LibIteartor.NextPCBObject() as IPCB_LibComponent; } PcbLib.LibraryIterator_Destroy(ref LibIteartor); }
private void AddCourtyard() { 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_Component PcbCmp = LibIteartor.FirstPCBObject() as IPCB_Component; while (PcbCmp != null) { IPCB_Board currentBoard = PcbServer.GetCurrentPCBBoard(); IPCB_GroupIterator PcbObjItera = PcbCmp.GroupIterator_Create(); TV6_LayerSet layers = new TV6_LayerSet(TV6_Layer.eV6_BottomLayer, TV6_Layer.eV6_BottomOverlay, TV6_Layer.eV6_Mechanical13, TV6_Layer.eV6_TopLayer, TV6_Layer.eV6_TopOverlay); PcbObjItera.AddFilter_LayerSet(layers); IPCB_Primitive PcbObj = PcbObjItera.FirstPCBObject(); List <PrimitiveArea> Areas = new List <PrimitiveArea>(); while (PcbObj != null) { PrimitiveArea ObjArea = new PrimitiveArea(); switch (PcbObj.GetState_ObjectID()) { case PCB.TObjectId.ePadObject: ObjArea = CalPadArea(PcbObj as IPCB_Pad); Areas.Add(ObjArea); break; case PCB.TObjectId.eTrackObject: ObjArea = CalTrackArea(PcbObj as IPCB_Track); Areas.Add(ObjArea); break; case PCB.TObjectId.eArcObject: break; } PcbObj = PcbObjItera.NextPCBObject(); } PrimitiveArea ComponentArea = CalComponentArea(Areas); DrawAreaAsCourtyard(ComponentArea, PcbServer, currentBoard); PcbCmp.GroupIterator_Destroy(ref PcbObjItera); PcbCmp = LibIteartor.NextPCBObject() as IPCB_Component; } PcbLib.LibraryIterator_Destroy(ref LibIteartor); }
/// <summary> /// Retrieve the current open PCB. /// </summary> /// <returns>Returns IPCB_Board if PCB file is active. Returns null if no PCB file is active.</returns> public static IPCB_Board GetCurrentPCB(bool OpenPCB = false) { try { PCBServer = PCB.GlobalVars.PCBServer; if (OpenPCB) { IDXPWorkSpace CurrentWorkspace = DXP.GlobalVars.DXPWorkSpace; //Get workspace IDXPProject CurrentProject; int LogicalDocumentCount; int LoopIterator; IDXPDocument CurrentSheet; CurrentProject = CurrentWorkspace.DM_FocusedProject(); //Get current project. LogicalDocumentCount = CurrentProject.DM_LogicalDocumentCount(); //Get count of documents in the selected project. IClient Client = DXP.GlobalVars.Client; IServerDocument ServerDoc; IDXPDocument ActiveDoc = DXP.GlobalVars.DXPWorkSpace.DM_FocusedDocument(); //Save current open document so it can be reopened after process is done. //Loop through all project documents. for (LoopIterator = 1; LoopIterator <= LogicalDocumentCount; LoopIterator++) { CurrentSheet = CurrentProject.DM_LogicalDocuments(LoopIterator - 1); //Find the first PCB in the project. if (CurrentSheet.DM_DocumentKind() == "PCB") { IPCB_Board PCBDoc = CurrentSheet as IPCB_Board; //Open PCB file if not already open. if (Client.IsDocumentOpen(CurrentSheet.DM_FullPath())) { ServerDoc = Client.GetDocumentByPath(CurrentSheet.DM_FullPath()); } else { ServerDoc = Client.OpenDocument("PCB", CurrentSheet.DM_FullPath()); } Client.ShowDocument(ServerDoc); break; } } } IPCB_Board Board; if (PCBServer == null) { return(null); } Board = PCBServer.GetCurrentPCBBoard(); //Get current board if (Board == null) { return(null); } return(Board); } catch (Exception ex) { ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex); return(null); } }