private void LoadLists() { PCBServer = PCB.GlobalVars.PCBServer; if (PCBServer == null) { MessageBox.Show("Error opening PCB."); return; } Board = Util.GetCurrentPCB(); if (Board == null) { MessageBox.Show("Invalid Board"); } IPCB_DrillLayerPair DrillPair = null; lstBefore.Items.Clear(); lstAfter.Items.Clear(); for (int i = 0; i < Board.GetState_DrillLayerPairsCount(); i++) { DrillPair = Board.GetState_LayerPair(i); lstBefore.Items.Add(DrillPair.GetState_Description()); lstAfter.Items.Add(DrillPair.GetState_Description()); } }
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); }
public void GetCompData() { try { IPCB_Board Board; IPCB_BoardIterator BoardIterator; IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer; IPCB_Net Net; Board = Util.GetCurrentPCB(); if (Board == null) { return; } //Iterate theough all components on the board. BoardIterator = Board.BoardIterator_Create(); PCB.TObjectSet FilterSet = new PCB.TObjectSet(); //Filter for components only. FilterSet.Add(PCB.TObjectId.eNetObject); BoardIterator.AddFilter_ObjectSet(FilterSet); BoardIterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); //Filter all layers. BoardIterator.AddFilter_Method(TIterationMethod.eProcessAll); //Component.GetState_ObjectID().ToString() //Component.GetState_ObjectIDString() int l = 0; Net = (IPCB_Net)BoardIterator.FirstPCBObject(); //Component = (IPCB_Component)BoardIterator.FirstPCBObject(); while (Net != null) { LogFile[l] = Net.GetState_ObjectIDString() + " " + Net.GetState_ObjectID().ToString(); l++; //Component.BeginModify(); //Component.SetState_NameOn(NameOn); //Show or hide refdes. //Component.EndModify(); Net = (IPCB_Net)BoardIterator.NextPCBObject(); //Component = (IPCB_Component)BoardIterator.NextPCBObject(); } //Iterator clean-up Board.BoardIterator_Destroy(ref BoardIterator); //Board.GraphicalView_ZoomRedraw(); log(LogFile); } catch (Exception ex) { ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex); } }
public void ModelTest() { IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer; IPCB_ComponentBody STEPmodel = (IPCB_ComponentBody)PCBServer.PCBObjectFactory(PCB.TObjectId.eComponentBodyObject, TDimensionKind.eNoDimension, PCB.TObjectCreationMode.eCreate_Default); IPCB_Model Model = STEPmodel.ModelFactory_FromFilename("C:\\test.step", false); STEPmodel.SetState_FromModel(); Model.SetState(90, 100, 110, 12000); double RotX; double RotY; double RotZ; int StandOff; Model.GetState(out RotX, out RotY, out RotZ, out StandOff); //here occurs the error!!! STEPmodel.SetModel(Model); IPCB_Component Component = null; Component.AddPCBObject(STEPmodel); ////This code produces the same error: //CIter:= Component.GroupIterator_Create; // CIter.AddFilter_ObjectSet(MkSet(eComponentBodyObject)); //STEPmodel:= CIter.FirstPCBObject; // While(STEPmodel <> nil) do // begin // StepModel.GetModel.GetState(RotX, RotY, RotZ, StandOff); //here occurs the error!!! //STEPmodel:= CIter.NextPCBObject; // end; }
//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"); }
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"); }
private void ReplaceVia(IPCB_Via OldVia, List <IPCB_DrillLayerPair> NewPairs, bool RemoveOld = true) { IPCB_Via NewVia; PCBServer = PCB.GlobalVars.PCBServer; if (PCBServer == null) { return; } foreach (IPCB_DrillLayerPair Pair in NewPairs) { NewVia = PCBServer.PCBObjectFactory(TObjectId.eViaObject, TDimensionKind.eCenterDimension, TObjectCreationMode.eCreate_Default) as IPCB_Via; NewVia.SetState_Net(OldVia.GetState_Net()); NewVia.SetState_XLocation(OldVia.GetState_XLocation()); NewVia.SetState_YLocation(OldVia.GetState_YLocation()); //NewVia.SetState_Layer(Via.GetState_Layer()); NewVia.SetState_HighLayer(Pair.GetState_StartLayer().V7_LayerID()); NewVia.SetState_LowLayer(Pair.GetState_StopLayer().V7_LayerID()); if (radMetric.Checked) { NewVia.SetState_HoleSize(EDP.Utils.MMsToCoord((double)numDrill.Value)); NewVia.SetState_Size(EDP.Utils.MMsToCoord((double)numPad.Value)); } else { NewVia.SetState_HoleSize(EDP.Utils.MilsToCoord((double)numDrill.Value)); NewVia.SetState_Size(EDP.Utils.MilsToCoord((double)numPad.Value)); } Board.AddPCBObject(NewVia as IPCB_Primitive); } if (RemoveOld) { Board.RemovePCBObject(OldVia); } }
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> /// Adds a new track to the PCB /// </summary> /// <param name="Offset"></param> /// <param name="argWidth"></param> private void AddTrack(structPos Offset, int argWidth)//, V7_Layer argLayer) { PCBServer = PCB.GlobalVars.PCBServer; if (Offset.x == null) { Offset.x = 0; } if (Offset.y == null) { Offset.y = 0; } int xL, yL, xO, yO; IPCB_Board pcbBoard = Util.GetCurrentPCB(); if (pcbBoard == null) { return; } System.Diagnostics.Debug.WriteLine(pcbBoard.GetState_DisplayUnit().ToString()); TV6_Layer ActiveLayer = pcbBoard.GetState_CurrentLayer(); int OriginX = pcbBoard.GetState_XOrigin(); int OriginY = pcbBoard.GetState_YOrigin(); PCBServer.PreProcess(); // Set the value of J to point to the "next" vertex; this is normally // I + 1, but needs to be set to 0 instead for the very last vertex // that is processed by this loop. IPCB_Primitive primitive = PCBServer.PCBObjectFactory(TObjectId.eTrackObject, TDimensionKind.eNoDimension, TObjectCreationMode.eCreate_Default); if (primitive == null) { return; } IPCB_Track track = primitive as IPCB_Track; if (pcbBoard.GetState_DisplayUnit() == TUnit.eImperial) { xL = EDP.Utils.MilsToCoord((double)LastPos.x); yL = EDP.Utils.MilsToCoord((double)LastPos.y); xO = EDP.Utils.MilsToCoord((double)Offset.x); yO = EDP.Utils.MilsToCoord((double)Offset.y); argWidth = EDP.Utils.MilsToCoord((double)argWidth); } else { xL = EDP.Utils.MMsToCoord((double)LastPos.x); yL = EDP.Utils.MMsToCoord((double)LastPos.y); xO = EDP.Utils.MMsToCoord((double)Offset.x); yO = EDP.Utils.MMsToCoord((double)Offset.y); argWidth = EDP.Utils.MMsToCoord((double)argWidth); } if (Offset.absolute) { track.SetState_X1(OriginX + xL); track.SetState_Y1(OriginY + yL); track.SetState_X2(OriginX + xO); track.SetState_Y2(OriginY + yO); LastPos = Offset; } else { track.SetState_X1(OriginX + xL); track.SetState_Y1(OriginY + yL); track.SetState_X2(OriginX + (xL + xO)); track.SetState_Y2(OriginY + (yL + yO)); LastPos.x = LastPos.x + Offset.x; LastPos.y = LastPos.y + Offset.y; } track.SetState_Layer(ActiveLayer); track.SetState_Width(argWidth); pcbBoard.AddPCBObject(primitive); PCBServer.PostProcess(); // Refresh PCB workspace. //DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw"); }
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); }
private void btnPlace_Click(object sender, EventArgs e) { try { clsSelectedObjects NewPlacement = new clsSelectedObjects(); Dictionary <string, string> NetCompare = GetNetDiff(); IPCB_Board brd = Util.GetCurrentPCB(); brd.SelectedObjects_Clear(); IPCB_Primitive temp; IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer; PCBServer.PreProcess(); int OffsetX = 0, OffsetY = 0; if (!brd.ChooseLocation(ref OffsetX, ref OffsetY, "Select placement location")) { return; } try { OffsetX = OffsetX - PR.selectedSourceObjects.componentObjects[0].GetState_XLocation(); OffsetY = OffsetY - PR.selectedSourceObjects.componentObjects[0].GetState_YLocation(); } catch (Exception ex) { if (ex.HResult == -2147467259) { MessageBox.Show("Source and destination data is corrupted due to board file being closed. Please restart the process."); lstDest.Items.Clear(); lstSource.Items.Clear(); lstMatched.Items.Clear(); return; } throw; } PR.GetNets(); brd.BeginModify(); foreach (IPCB_Primitive item in PR.selectedSourceObjects.arcObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } } else { //temp.SetState_Net(PCBServer.PCBObjectFactory(TObjectId.eNetObject, TDimensionKind.eNoDimension, TObjectCreationMode.eCreate_Default) as IPCB_Net); temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.arcObjects.Add(temp as IPCB_Arc); } foreach (IPCB_Primitive item in PR.selectedSourceObjects.padObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } else { temp.SetState_Net(null); } } else { temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.padObjects.Add(temp as IPCB_Pad); } foreach (IPCB_Primitive item in PR.selectedSourceObjects.ViaObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } else { temp.SetState_Net(null); } } else { temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.ViaObjects.Add(temp as IPCB_Via); } foreach (IPCB_Primitive item in PR.selectedSourceObjects.trackObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } else { temp.SetState_Net(null); } } else { temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.trackObjects.Add(temp as IPCB_Track); } foreach (IPCB_Primitive item in PR.selectedSourceObjects.textObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } else { temp.SetState_Net(null); } } else { temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.textObjects.Add(temp as IPCB_Text); } foreach (IPCB_Primitive item in PR.selectedSourceObjects.fillObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } else { temp.SetState_Net(null); } } else { temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.fillObjects.Add(temp as IPCB_Fill); } foreach (IPCB_Primitive item in PR.selectedSourceObjects.polygonObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } else { temp.SetState_Net(null); } } else { temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.polygonObjects.Add(temp as IPCB_Polygon); } foreach (IPCB_Primitive item in PR.selectedSourceObjects.primitiveObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } else { temp.SetState_Net(null); } } else { temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.primitiveObjects.Add(temp); } foreach (IPCB_Primitive item in PR.selectedSourceObjects.regionObjects) { temp = item.Replicate(); brd.AddPCBObject(temp); temp.BeginModify(); temp.MoveByXY(OffsetX, OffsetY); if (temp.GetState_Net() != null) { if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name())) { if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()])) { temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]); } else { temp.SetState_Net(null); } } else { temp.SetState_Net(null); } } temp.EndModify(); NewPlacement.regionObjects.Add(temp as IPCB_Region); } string srcRef, dstRef; IPCB_Component srcComp, dstComp; foreach (string item in lstMatched.Items) { srcRef = item.Split('>')[0]; dstRef = item.Split('>')[1]; srcComp = PR.selectedSourceObjects.GetComponent(srcRef); dstComp = PR.selectedDestinationObjects.GetComponent(dstRef); dstComp.BeginModify(); if (srcComp.GetState_Layer() != dstComp.GetState_Layer()) { dstComp.FlipComponent(); } dstComp.SetState_Rotation(srcComp.GetState_Rotation()); dstComp.MoveToXY(OffsetX + srcComp.GetState_XLocation(), OffsetY + srcComp.GetState_YLocation()); //dstComp.Rebuild(); dstComp.EndModify(); } brd.EndModify(); PCBServer.PostProcess(); brd.GraphicallyInvalidate(); //brd.Update_PCBGraphicalView(true, true); //DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw"); //string process = "PCB:MoveObject"; //string parameters = "Object= Selection"; //DXP.Utils.RunCommand(process, parameters); RemoveMatched("Placed"); } catch (Exception ex) { ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex); return; } }
public void PlaceLayerStackTable() { PCBServer = PCB.GlobalVars.PCBServer; List <IPCB_Primitive> lstLayerStackPrims = new List <IPCB_Primitive>(); //DXP.Utils.RunCommand("PCB:ManageLayerSets", "SetIndex=0"); IPCB_Board pcbBoard = Util.GetCurrentPCB(); if (pcbBoard == null) { return; } if (!pcbBoard.ChooseLocation(ref OffsetX, ref OffsetY, "Select placement location")) { return; } IPCB_MasterLayerStack LStack = pcbBoard.GetState_MasterStack(); //IPCB_Text test = pcbBoard.SelectedObjectsCount ActiveLayer = TV6_Layer.eV6_DrillDrawing; IPCB_LayerObject tmp; tmp = LStack.First(TLayerClassID.eLayerClass_Electrical); do { Layers.Add(tmp as IPCB_ElectricalLayer); //GetState_CopperThickness //GetState_LayerName tmp = LStack.Next(TLayerClassID.eLayerClass_Electrical, tmp); } while (tmp != null); // [Page Number, Layer Num, Ext, Name, POS/NEG, Weight] List <TableData> TableText = new List <TableData>(); string CopperWeight; TableText.Add(new TableData(new string[6] { "1", null, "GD1", "FABRICATION DRAWING", "POS", null }, TV6_Layer.eV6_DrillDrawing)); TableText.Add(new TableData(new string[6] { "2", null, "GTO", "Top Overlay", "POS", null }, TV6_Layer.eV6_TopOverlay)); TableText.Add(new TableData(new string[6] { "3", null, "GTS", "Top Solder", "NEG", null }, TV6_Layer.eV6_TopSolder)); int i = 4; int Sig = 1, Plane = 1; string Ext; foreach (IPCB_ElectricalLayer item in Layers) { System.Diagnostics.Debug.WriteLine(item.GetState_CopperThickness()); System.Diagnostics.Debug.WriteLine(item.GetState_LayerDisplayName(0)); System.Diagnostics.Debug.WriteLine(item.GetState_LayerDisplayName(1)); System.Diagnostics.Debug.WriteLine(item.GetState_LayerDisplayName(2)); //14000 //7000 switch (item.GetState_CopperThickness()) { case 7090: CopperWeight = ".5 oz"; break; case 7000: CopperWeight = ".5 oz"; break; case 7087: CopperWeight = ".5 oz"; break; case 13780: CopperWeight = "1 oz"; break; case 14000: CopperWeight = "1 oz"; break; case 13779: CopperWeight = "1 oz"; break; case 28000: CopperWeight = "2 oz"; break; case 27560: CopperWeight = "2 oz"; break; default: CopperWeight = EDP.Utils.CoordToMils(item.GetState_CopperThickness()).ToString() + "mils"; break; } if (item.GetState_LayerDisplayName(0).Contains("P")) { Ext = "GP" + Plane.ToString(); Plane++; } else if (item.GetState_LayerDisplayName(0).Contains("T")) { Ext = "G" + item.GetState_LayerDisplayName(0); } else if (item.GetState_LayerDisplayName(0).Contains("B")) { Ext = "G" + item.GetState_LayerDisplayName(0); } else { Ext = "G" + Sig.ToString(); Sig++; } //TV6_Layer tempLayer = (TV6_Layer)item; TableText.Add(new TableData(new string[6] { i.ToString(), (i - 3).ToString(), Ext, item.GetState_LayerName(), item.GetState_LayerDisplayName(0).Contains("P") ?"NEG":"POS", CopperWeight }, item.V6_LayerID())); i++; } TableText.Add(new TableData(new string[6] { (LStack.Count_1(3) + 4).ToString(), null, "GBS", "Bottom Solder", "NEG", null }, TV6_Layer.eV6_BottomSolder)); TableText.Add(new TableData(new string[6] { (LStack.Count_1(3) + 5).ToString(), null, "GBO", "Bottom Overlay", "POS", null }, TV6_Layer.eV6_BottomOverlay)); TableText.Add(new TableData(new string[6] { "", null, "TXT", "NC DRILL FILE", null, null }, TV6_Layer.eV6_DrillDrawing)); double pos = -815; foreach (TableData item in TableText) {// [Page Number, Layer Num, Ext, Name, POS/NEG, Weight] if (item.Text[0] != "") { lstLayerStackPrims.Add(CreateString(161, pos, item.Text[0], ActiveLayer)); //Page Number } if (item.Text[1] != "") { lstLayerStackPrims.Add(CreateString(661, pos, item.Text[1], ActiveLayer)); //Layer Num } if (item.Text[2] != "") { lstLayerStackPrims.Add(CreateString(1061, pos, item.Text[2], ActiveLayer)); //Ext } if (item.Text[3] != "") { lstLayerStackPrims.Add(CreateString(1516, pos, item.Text[3], ActiveLayer)); //Name } if (item.Text[4] != "") { lstLayerStackPrims.Add(CreateString(3361, pos, item.Text[4], ActiveLayer)); //POS/NEG } if (item.Text[5] != "") { lstLayerStackPrims.Add(CreateString(3861, pos, item.Text[5], ActiveLayer)); //Weight } if (item.Text[0] != "1") { if (item.Text[0] != "") { lstLayerStackPrims.Add(CreateString(4485, pos, ".Layer_Name", item.CurrentLayer)); //Layer name } if (item.Text[0] != "") { lstLayerStackPrims.Add(CreateString(5985, pos, item.Text[0], item.CurrentLayer)); //Page Number } } pos -= 200; } tmp = LStack.First(TLayerClassID.eLayerClass_Dielectric); double thickness; pos = -1515; do { System.Diagnostics.Debug.WriteLine((tmp as IPCB_DielectricLayer).GetState_DielectricType()); if ((tmp as IPCB_DielectricLayer).GetState_DielectricType() != TDielectricType.eSurfaceMaterial) { thickness = EDP.Utils.CoordToMils((tmp as IPCB_DielectricLayer).GetState_DielectricHeight()) / 1000; thickness = Math.Round(thickness, 4); lstLayerStackPrims.Add(CreateString(-737, pos, thickness.ToString() + "\"", ActiveLayer)); lstLayerStackPrims.Add(CreateTrack(-238, pos + 50, -50, pos + 50, ActiveLayer)); pos -= 200; } tmp = LStack.Next(TLayerClassID.eLayerClass_Dielectric, tmp); } while (tmp != null); PCBServer.PreProcess(); lstLayerStackPrims.AddRange(CreateTemplate(LStack.Count_1(3))); //tmpPrim = PCBServer.PCBObjectFactory(TObjectId.eTrackObject, TDimensionKind.eNoDimension, TObjectCreationMode.eCreate_Default); //if (tmpPrim == null) // return; //IPCB_Track track = tmpPrim as IPCB_Track; foreach (IPCB_Primitive prim in lstLayerStackPrims) { if (prim != null) { pcbBoard.AddPCBObject(prim); } } PCBServer.PostProcess(); }
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); //} }
/// <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); } }