/// <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(); }
/// <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); } }