Exemple #1
0
    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();
    }