/// <summary> /// Moves the all mechanical objects in embeded components to their new layers. /// </summary> /// <param name="EmbededResistors">List of components to be processed.</param> /// <param name="UsedLayers">List of used layers</param> /// <param name="LayerCounts"> /// List of layers used that has been updated by the user. /// Allows for the user to disable specific layers to be modified. /// </param> void MoveMechLayers(List <IPCB_Component> EmbededResistors, List <TV6_Layer> UsedLayers, SortedDictionary <string, int> LayerCounts) { DXP.Utils.PercentInit("Updating Embeded Components", EmbededResistors.Count); IPCB_GroupIterator CompIterator; IPCB_Primitive CompItem; IPCB_Component Component; //Step through each embeded component for (int i = 0; i <= EmbededResistors.Count - 1; i++) { Component = EmbededResistors[i]; //Iterate through all objects of the current component. CompIterator = Component.GroupIterator_Create(); CompIterator.AddFilter_LayerSet_2(PCBConstant.V7MechanicalLayersSet); CompItem = CompIterator.FirstPCBObject(); while (CompItem != null) { //Check if object is on mech layer. if (new V7_Layer(CompItem.GetState_V7Layer()).IsMechanicalLayer() && LayerCounts.ContainsKey(EDP.Utils.LayerToString(new V7_Layer(Component.GetState_Layer())))) { //Move object to its new respective mech layer. CompItem.BeginModify(); CompItem.SetState_V7Layer(V7_Layer.MechanicalLayer((ulong)UsedLayers.IndexOf(Component.GetState_Layer()) + 19)); CompItem.EndModify(); } CompItem = CompIterator.NextPCBObject(); } DXP.Utils.PercentUpdate(); } DXP.Utils.PercentFinish(); }
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); }
/// <summary> /// Gets a list of electrical layers for the provided board file. /// </summary> /// <param name="Board">Current board</param> /// <returns>List of layers.</returns> public static List <V7_Layer> GetV7ElectLayers(IPCB_Board Board) { List <V7_Layer> tempList = new List <V7_Layer>(); IPCB_LayerIterator LayerIterator = Board.LayerIterator(); LayerIterator.AddFilter_ElectricalLayers(); LayerIterator.First(); V7_Layer tmpLayer; //tmpLayer = new V7_Layer( LayerIterator.Layer().Data); do { tmpLayer = new V7_Layer(LayerIterator.Layer().Data); //if (EDP.Utils.LayerToString(tmpLayer).Contains("Mid")) tempList.Add(tmpLayer); } while (LayerIterator.Next()); return(tempList); }
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"); }
/// <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); } }