private PrimitiveArea CalPadArea(IPCB_Pad PcbPad) { int Pad_X_Size, Pad_Y_Size; SPoint location = new SPoint(); location.X = PcbPad.GetState_XLocation(); location.Y = PcbPad.GetState_YLocation(); if ((PcbPad.GetState_Rotation() == (double)90) || (PcbPad.GetState_Rotation() == (double)270)) { Pad_X_Size = PcbPad.GetState_TopYSize(); Pad_Y_Size = PcbPad.GetState_TopXSize(); } else { Pad_X_Size = PcbPad.GetState_TopXSize(); Pad_Y_Size = PcbPad.GetState_TopYSize(); } PrimitiveArea PadArea = new PrimitiveArea(); PadArea.BottomLeft.X = location.X - (Pad_X_Size / 2); PadArea.BottomLeft.Y = location.Y - (Pad_Y_Size / 2); PadArea.BottomRight.X = location.X + (Pad_X_Size / 2); PadArea.BottomRight.Y = PadArea.BottomLeft.Y; PadArea.TopLeft.X = PadArea.BottomLeft.X; PadArea.TopLeft.Y = location.Y + (Pad_Y_Size / 2); PadArea.TopRight.X = PadArea.BottomRight.X; PadArea.TopRight.Y = PadArea.TopLeft.Y; return(PadArea); }
private PrimitiveArea CalArcArea(IPCB_Arc PcbArc) { PrimitiveArea ArcArea = new PrimitiveArea(); return(ArcArea); }
private PrimitiveArea CalTrackArea(IPCB_Track PcbTrack) { PrimitiveArea TrackArea = new PrimitiveArea(); int x1 = Math.Min(PcbTrack.GetState_X1(), PcbTrack.GetState_X2()); int x2 = Math.Max(PcbTrack.GetState_X1(), PcbTrack.GetState_X2()); int y1 = Math.Min(PcbTrack.GetState_Y1(), PcbTrack.GetState_Y2()); int y2 = Math.Max(PcbTrack.GetState_Y1(), PcbTrack.GetState_Y2()); TrackArea.BottomLeft.X = x1; TrackArea.BottomLeft.Y = y1; TrackArea.BottomRight.X = x2; TrackArea.BottomRight.Y = y1; TrackArea.TopLeft.X = x1; TrackArea.TopLeft.Y = y2; TrackArea.TopRight.X = x2; TrackArea.TopRight.Y = y2; return(TrackArea); }
private PrimitiveArea CalComponentArea(List <PrimitiveArea> PcbPrimitiveAreas) { PrimitiveArea CmpArea = new PrimitiveArea(); CmpArea.TopLeft.X = PcbPrimitiveAreas[0].TopLeft.X; CmpArea.TopLeft.Y = PcbPrimitiveAreas[0].TopLeft.Y; CmpArea.TopRight.X = PcbPrimitiveAreas[0].TopRight.X; CmpArea.TopRight.Y = PcbPrimitiveAreas[0].TopRight.Y; CmpArea.BottomLeft.X = PcbPrimitiveAreas[0].BottomLeft.X; CmpArea.BottomLeft.Y = PcbPrimitiveAreas[0].BottomLeft.Y; CmpArea.BottomRight.X = PcbPrimitiveAreas[0].BottomRight.X; CmpArea.BottomRight.Y = PcbPrimitiveAreas[0].BottomRight.Y; foreach (PrimitiveArea ObjArea in PcbPrimitiveAreas) { if (ObjArea.BottomLeft.X < CmpArea.BottomLeft.X) { CmpArea.BottomLeft.X = ObjArea.BottomLeft.X; CmpArea.TopLeft.X = CmpArea.BottomLeft.X; } if (ObjArea.BottomLeft.Y < CmpArea.BottomLeft.Y) { CmpArea.BottomLeft.Y = ObjArea.BottomLeft.Y; CmpArea.BottomRight.Y = CmpArea.BottomLeft.Y; } if (ObjArea.TopRight.X > CmpArea.TopRight.X) { CmpArea.TopRight.X = ObjArea.TopRight.X; CmpArea.BottomRight.X = CmpArea.TopRight.X; } if (ObjArea.TopRight.Y > CmpArea.TopRight.Y) { CmpArea.TopRight.Y = ObjArea.TopRight.Y; CmpArea.TopLeft.Y = ObjArea.TopRight.Y; } } return(CmpArea); }
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 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); }