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 BoundingBoxTest() { IPCB_BoardIterator BoardIterator; IPCB_Component Component; string RefDes;//, Varriant, Footprint, CompID; IPCB_Board Board = Util.GetCurrentPCB(); if (Board == null) { return; } double OriginX = EDP.Utils.CoordToMils(Board.GetState_XOrigin()); double OriginY = EDP.Utils.CoordToMils(Board.GetState_YOrigin()); //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.eComponentObject); BoardIterator.AddFilter_ObjectSet(FilterSet); BoardIterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); //Filter all layers. BoardIterator.AddFilter_Method(TIterationMethod.eProcessAll); Component = (IPCB_Component)BoardIterator.FirstPCBObject(); while (Component != null) { RefDes = Component.GetState_Name().GetState_Text(); //Determines if component is a variant. if (RefDes == "U7") { while (true) { MessageBox.Show("X: " + Math.Abs((EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Right) - OriginX) - (EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Left) - OriginX)) + " Y: " + Math.Abs((EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Top) - OriginX) - (EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Bottom) - OriginX))); //MessageBox.Show("X: " + (EDP.Utils.CoordToMils(Component.BoundingRectangle().Lx) - OriginX) + " Y: " + (EDP.Utils.CoordToMils(Component.BoundingRectangle().Ly) - OriginY)); //MessageBox.Show("X: " + (EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Lx) - OriginX) + " Y: " + (EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Ly) - OriginY)); } } Component = (IPCB_Component)BoardIterator.NextPCBObject(); } //Iterator clean-up Board.BoardIterator_Destroy(ref BoardIterator); }
public void PrimPrimTest() { IPCB_BoardIterator BoardIterator; IPCB_Pad Pad, Selected1 = null, Selected2 = null; IPCB_Board Board = Util.GetCurrentPCB(); if (Board == null) { return; } double OriginX = EDP.Utils.CoordToMils(Board.GetState_XOrigin()); double OriginY = EDP.Utils.CoordToMils(Board.GetState_YOrigin()); //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.ePadObject); BoardIterator.AddFilter_ObjectSet(FilterSet); BoardIterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); //Filter all layers. BoardIterator.AddFilter_Method(TIterationMethod.eProcessAll); Pad = (IPCB_Pad)BoardIterator.FirstPCBObject(); while (Pad != null) { //RefDes = Component.GetState_Name().GetState_Text(); //Determines if component is a variant. if (Selected1 == null && Pad.GetState_Selected() == true) { Selected1 = Pad; } else if (Pad.GetState_Selected() == true) { Selected2 = Pad; } if (Selected1 != null && Selected2 != null) { break; } Pad = (IPCB_Pad)BoardIterator.NextPCBObject(); } if (Selected1 == null || Selected2 == null) { return; } bool bot = false, top = false; if (Selected1.GetState_Layer() == TV6_Layer.eV6_BottomLayer) { Selected1.SetState_Layer(TV6_Layer.eV6_TopLayer); top = true; } if (Selected2.GetState_Layer() == TV6_Layer.eV6_BottomLayer) { Selected2.SetState_Layer(TV6_Layer.eV6_TopLayer); bot = true; } MessageBox.Show(EDP.Utils.CoordToMMs(Board.PrimPrimDistance(Selected1, Selected2)).ToString()); if (top) { Selected1.SetState_Layer(TV6_Layer.eV6_BottomLayer); } if (bot) { Selected2.SetState_Layer(TV6_Layer.eV6_BottomLayer); } //Iterator clean-up Board.BoardIterator_Destroy(ref BoardIterator); }
/// <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"); }