Beispiel #1
0
    public void CollectNetClasses()
    {
        int                  i;
        IPCB_Board           Board;
        IPCB_BoardIterator   ClassIterator;
        IPCB_ObjectClass     NetClass;
        IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer;
        ArrayList            Report    = new ArrayList();
        IClient              Client    = DXP.GlobalVars.Client;

        Board         = PCBServer.GetCurrentPCBBoard();
        ClassIterator = Board.BoardIterator_Create();
        ClassIterator.SetState_FilterAll();
        ClassIterator.AddFilter_ObjectSet(Util.MKset(PCB.TObjectId.eClassObject));
        NetClass = (IPCB_ObjectClass)ClassIterator.FirstPCBObject();
        while (NetClass != null)
        {
            i = 0;
            if (NetClass.GetState_MemberKind() == TClassMemberKind.eClassMemberKind_Net)
            {
                Report.Add("NetClass Name: " + NetClass.GetState_Name());
                while (NetClass.GetState_MemberName(i) != null)
                {
                    Report.Add("    Member: " + NetClass.GetState_MemberName(i));
                    i++;
                }
            }
            NetClass = (IPCB_ObjectClass)ClassIterator.NextPCBObject();
        }
        Board.BoardIterator_Destroy(ref ClassIterator);
        File.WriteAllLines("C:\\NetClass.txt", (string[])Report.ToArray(typeof(string)));
        //Client.OpenDocument("Text", "C:\\NetClass.txt");
    }
Beispiel #2
0
    private void CountPrimitivesOfFootprint()
    {
        OpenFileDialog openDialog = InitFileOpenDialog("PCBLIB");

        if (openDialog == null)
        {
            return;
        }

        string[] FootprintFiles = openDialog.FileNames;
        foreach (string FootprintFile in FootprintFiles)
        {
            System.Threading.Thread.Sleep(5000);

            IServerDocument PcbDocuemnt = OpenDocuemnt(FootprintFile, "PCBLIB");
            if (PcbDocuemnt == null)
            {
                DXP.Utils.ShowMessage("Failed to open " + FootprintFile);
                return;
            }

            IPCB_ServerInterface PcbServer = PCB.GlobalVars.PCBServer;
            IPCB_Library         PcbLib    = PcbServer.GetCurrentPCBLibrary();

            IPCB_Board currentBoard = PcbServer.GetCurrentPCBBoard();
            currentBoard.GraphicalView_ZoomRedraw();

            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)
            {
                string FootprintDescription = PcbCmp.GetState_Description();
                string FootprintName        = PcbCmp.GetState_Pattern();

                IPCB_GroupIterator PcbObjItera = PcbCmp.GroupIterator_Create();
                int            count           = 0;
                IPCB_Primitive PcbObj          = PcbObjItera.FirstPCBObject();

                while (PcbObj != null)
                {
                    count++;
                    PcbObj = PcbObjItera.NextPCBObject();
                }

                PcbCmp.GroupIterator_Destroy(ref PcbObjItera);

                System.IO.File.AppendAllText(@"G:\report.txt", FootprintName + "|" + FootprintDescription + "|" + count.ToString() + "\r\n");

                PcbCmp = LibIteartor.NextPCBObject() as IPCB_LibComponent;
            }

            PcbLib.LibraryIterator_Destroy(ref LibIteartor);

            CloseDocument(PcbDocuemnt);
        }
    }
Beispiel #3
0
    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);
    }
Beispiel #4
0
    //Autogenerated code. End of implementation [GetState_Viagrid]

    //Autogenerated code. Begin of implementation [Command_Viagrid]
    public void Command_Viagrid(IServerDocumentView view, ref string parameters)
    {
        IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer;

        if (pcbServer == null)
        {
            return;
        }

        IPCB_Board pcbBoard = pcbServer.GetCurrentPCBBoard();

        if (pcbBoard == null)
        {
            return;
        }

        DXP.Utils.RunCommand("PCB:DeSelect", "Scope=All");

        var boundingRect = pcbBoard.GetState_BoardOutline().BoundingRectangle();
        var gridSize     = (int)pcbBoard.GetState_ComponentGridSize();
        var delta        = EDP.Utils.MMsToCoord(0.001);

        IPCB_BoardIterator iterator = pcbBoard.BoardIterator_Create();

        iterator.AddFilter_ObjectSet(new PCB.TObjectSet(PCB.TObjectId.eViaObject));
        iterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet);
        iterator.AddFilter_Area(boundingRect.Left, boundingRect.Bottom, boundingRect.Right, boundingRect.Top);

        IPCB_Primitive pcbObject = iterator.FirstPCBObject();

        while (pcbObject != null)
        {
            if (pcbObject is IPCB_Via via &&
                (via.GetState_XLocation() % gridSize > delta ||
                 via.GetState_XLocation() % gridSize > delta))
            {
                via.SetState_Selected(true);
            }
            pcbObject = iterator.NextPCBObject();
        }

        pcbBoard.BoardIterator_Destroy(ref iterator);

        DXP.Utils.RunCommand("PCB:RunQuery", "Apply=True|Expr=IsSelected|Mask=True|Select=True");
    }
Beispiel #5
0
    void xSignalReport()
    {
        IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer;
        IPCB_Board           Board;

        IPCB_PinPairsManager PinPairsManager;
        IPCB_PinPair         PinPair;
        ArrayList            Report = new ArrayList();
        IClient Client = DXP.GlobalVars.Client;

        if (PCBServer == null)
        {
            return;
        }
        //Get current board.
        Board = PCBServer.GetCurrentPCBBoard();
        if (Board == null)
        {
            return;
        }

        //Get board pinpair manager used for xSignals.
        PinPairsManager = Board.GetState_PinPairsManager();
        if (PinPairsManager == null)
        {
            return;
        }
        List <IPCB_PinPair> test = new List <IPCB_PinPair>();

        PinPair = PinPairsManager.CreateFromPinsDescriptors("U66|U7");
        //PinPair.GetState_Length() if = -1 then broken.

        //PinPair.SetState_Name("Test2");
        test.Add(PinPair);
        //PinPairsManager.AssignPinPairClass(PinPair, "Temp");
        PinPairsManager.InvalidateAll();

        //Iterator = Board.BoardIterator_Create();
        //try
        //{
        //    //Filter for class objects
        //    Iterator.AddFilter_ObjectSet(Util.MKset(PCB.TObjectId.eClassObject));
        //    Iterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet);

        //    ObjectClass = (IPCB_ObjectClass2)Iterator.FirstPCBObject();
        //    while (ObjectClass != null)
        //    {
        //        if (ObjectClass.GetState_MemberKind() == TClassMemberKind.eClassMemberKind_Signal)
        //        {
        //            Report.Add("xSignal Class : " + ObjectClass.GetState_DisplayName());

        //            //Loop through all xSignals of the board.
        //            for (int I = 0; I <= PinPairsManager.GetState_PinPairsCount() - 1; I++)
        //            {
        //                PinPair = PinPairsManager.GetState_PinPairs(I);

        //                if (ObjectClass.IsMember(PinPair.GetState_Name()))
        //                {
        //                    Report.Add(String.Format("    xSignal : {0}, Node Count : {1}, Signal Length : {2}mils, Routed Length : {3}mils, Unrouted Length : {4}mils, Primitive Count : {5}",
        //                                PinPair.GetState_Name(),
        //                                PinPair.GetState_NodeCount(),
        //                                EDP.Utils.CoordToMils((int)PinPair.GetState_Length()),
        //                                EDP.Utils.CoordToMils((int)PinPair.GetState_RoutedLength()),
        //                                EDP.Utils.CoordToMils((int)PinPair.GetState_UnroutedLength()),
        //                                PinPair.GetState_PrimitivesCount()));

        //                    //Loop through all the pins of the xSignal.
        //                    for (int j = 0; j <= PinPair.GetState_PrimitivesCount() - 1; j++)
        //                    {
        //                        Prim = PinPair.GetPrimitives(j);
        //                        if (Prim.GetState_DescriptorString().StartsWith("Pad")) //need refdes, pin number, net name
        //                        {
        //                            Pad = (IPCB_Pad)Prim; //Pad.GetState_PinDescriptorString() = "U6-C17"
        //                            Report.Add("        Pin: " + Pad.GetState_PinDescriptorString() + ", Net: " + Prim.GetState_Net().GetState_Name());
        //                        }
        //                    }
        //                }
        //            }
        //        }

        //        ObjectClass = (IPCB_ObjectClass2)Iterator.NextPCBObject();
        //    }

        //    //Write report file.
        //    File.WriteAllLines(Util.ProjPath() + "\\xSignals.txt", (string[])Report.ToArray(typeof(string)));
        //    //Open file.
        //    Client.ShowDocument(Client.OpenDocument("Text", Util.ProjPath() + "\\xSignals.txt"));
        //}
        ////Error catch if the file is open.
        //catch (IOException)
        //{
        //    Utils.ShowMessage("File in use. Please close the file and try again.");
        //}
        //catch (Exception ex)
        //{
        //    ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex);
        //}
        //finally
        //{
        //    Board.BoardIterator_Destroy(ref Iterator);
        //}
    }
Beispiel #6
0
    public void Command_GetxSignalInfo()//Const View : IServerDocumentView; Var Parameters : WideString)
    {
        IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer;
        IPCB_Board           Board;
        IPCB_BoardIterator   Iterator;
        IPCB_ObjectClass2    ObjectClass;
        IPCB_PinPairsManager PinPairsManager;
        IPCB_PinPair         PinPair;
        //int I;
        ArrayList      Report = new ArrayList();
        IClient        Client = DXP.GlobalVars.Client;
        IPCB_Primitive Prim;
        IPCB_Pad       Pad;

        if (PCBServer == null)
        {
            return;
        }

        Board = PCBServer.GetCurrentPCBBoard();
        if (Board == null)
        {
            return;
        }

        PinPairsManager = Board.GetState_PinPairsManager();
        if (PinPairsManager == null)
        {
            return;
        }

        PinPairsManager.InvalidateAll();

        Iterator = Board.BoardIterator_Create();
        try
        {
            Iterator.AddFilter_ObjectSet(Util.MKset(PCB.TObjectId.eClassObject));
            Iterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet);

            ObjectClass = (IPCB_ObjectClass2)Iterator.FirstPCBObject();
            while (ObjectClass != null)
            {
                if (ObjectClass.GetState_MemberKind() == TClassMemberKind.eClassMemberKind_Signal)
                {
                    Report.Add("xSignal Class : " + ObjectClass.GetState_DisplayName());

                    for (int I = 0; I <= PinPairsManager.GetState_PinPairsCount() - 1; I++)
                    {
                        PinPair = PinPairsManager.GetState_PinPairs(I);

                        if (ObjectClass.IsMember(PinPair.GetState_Name()))
                        {
                            //need primitive info
                            //refdes and pin number

                            Report.Add(String.Format("    xSignal : {0}, Node Count : {1}, Signal Length : {2}mils, Routed Length : {3}mils, Unrouted Length : {4}mils, Primitive Count : {5}",

                                                     PinPair.GetState_Name(),
                                                     PinPair.GetState_NodeCount(),
                                                     EDP.Utils.CoordToMils((int)PinPair.GetState_Length()),
                                                     EDP.Utils.CoordToMils((int)PinPair.GetState_RoutedLength()),
                                                     EDP.Utils.CoordToMils((int)PinPair.GetState_UnroutedLength()),
                                                     PinPair.GetState_PrimitivesCount()));

                            for (int j = 0; j <= PinPair.GetState_PrimitivesCount() - 1; j++)
                            {
                                Prim = PinPair.GetPrimitives(j);
                                if (Prim.GetState_DescriptorString().StartsWith("Pad")) //need refdes, pin number, net name
                                {
                                    Pad = (IPCB_Pad)Prim;                               //Pad.GetState_PinDescriptorString() = "U6-C17"
                                    Report.Add("        Pin: " + Pad.GetState_PinDescriptorString() + ", Net: " + Prim.GetState_Net().GetState_Name());
                                    //Report.Add("        Primative Desc: " + Prim.GetState_DescriptorString() + ", Net : " + Prim.GetState_Net().GetState_Name());
                                }
                            }
                        }
                    }
                }

                ObjectClass = (IPCB_ObjectClass2)Iterator.NextPCBObject();
            }

            File.WriteAllLines("C:\\xSignals.txt", (string[])Report.ToArray(typeof(string)));

            //Client.OpenDocument("Text", "C:\\xSignals.txt");
        }
        finally
        {
            Board.BoardIterator_Destroy(ref Iterator);
            //FreeAndnull(Report);
        }
    }
Beispiel #7
0
    private void CleanUpSamtecFootprints()
    {
        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;

        PcbServer.PreProcess();

        while (PcbCmp != null)
        {
            IPCB_Board currentBoard = PcbServer.GetCurrentPCBBoard();      // heads up, PCB Ojbect can be added only by IPCB_Board, not IPCB_Component

            IPCB_GroupIterator PcbObjItera = PcbCmp.GroupIterator_Create();
            IPCB_Primitive     PcbObj      = PcbObjItera.FirstPCBObject();

            while (PcbObj != null)
            {
                switch (PcbObj.GetState_ObjectID())
                {
                case PCB.TObjectId.eTrackObject:
                    if ((int)PcbObj.GetState_V7Layer().ID != (int)new V7_Layer().Mechanical1().ID)
                    {
                        PcbObj = PcbObjItera.NextPCBObject();
                        continue;
                    }

                    IPCB_Track TrackObj = PcbObj as IPCB_Track;
                    TrackObj.SetState_Width(EDP.Utils.MMsToCoord((double)0.1));
                    TrackObj.SetState_Layer((int)new V7_Layer().Mechanical13().ID);
                    break;

                case PCB.TObjectId.eArcObject:
                    if ((int)PcbObj.GetState_V7Layer().ID != (int)new V7_Layer().Mechanical1().ID)
                    {
                        PcbObj = PcbObjItera.NextPCBObject();
                        continue;
                    }

                    IPCB_Arc ArcObj = PcbObj as IPCB_Arc;
                    ArcObj.SetState_LineWidth(EDP.Utils.MMsToCoord((double)0.1));
                    ArcObj.SetState_Layer((int)new V7_Layer().Mechanical13().ID);
                    break;

                case PCB.TObjectId.eComponentBodyObject:
                    IPCB_ComponentBody BodyObj = PcbObj as IPCB_ComponentBody;
                    BodyObj.SetState_Layer((int)new V7_Layer().Mechanical13().ID);
                    break;

                case PCB.TObjectId.eTextObject:
                    PcbCmp.RemovePCBObject(PcbObj);
                    break;
                }

                PcbObj = PcbObjItera.NextPCBObject();
            }

            PcbServer.PostProcess();
            DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw");

            PcbCmp.GroupIterator_Destroy(ref PcbObjItera);

            PcbCmp = LibIteartor.NextPCBObject() as IPCB_LibComponent;
        }

        PcbLib.LibraryIterator_Destroy(ref LibIteartor);
    }
Beispiel #8
0
    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);
    }
Beispiel #9
0
    /// <summary>
    /// Retrieve the current open PCB.
    /// </summary>
    /// <returns>Returns IPCB_Board if PCB file is active. Returns null if no PCB file is active.</returns>
    public static IPCB_Board GetCurrentPCB(bool OpenPCB = false)
    {
        try
        {
            PCBServer = PCB.GlobalVars.PCBServer;
            if (OpenPCB)
            {
                IDXPWorkSpace CurrentWorkspace = DXP.GlobalVars.DXPWorkSpace; //Get workspace
                IDXPProject   CurrentProject;
                int           LogicalDocumentCount;
                int           LoopIterator;
                IDXPDocument  CurrentSheet;
                CurrentProject       = CurrentWorkspace.DM_FocusedProject();     //Get current project.
                LogicalDocumentCount = CurrentProject.DM_LogicalDocumentCount(); //Get count of documents in the selected project.

                IClient         Client = DXP.GlobalVars.Client;
                IServerDocument ServerDoc;
                IDXPDocument    ActiveDoc = DXP.GlobalVars.DXPWorkSpace.DM_FocusedDocument(); //Save current open document so it can be reopened after process is done.

                //Loop through all project documents.
                for (LoopIterator = 1; LoopIterator <= LogicalDocumentCount; LoopIterator++)
                {
                    CurrentSheet = CurrentProject.DM_LogicalDocuments(LoopIterator - 1);

                    //Find the first PCB in the project.
                    if (CurrentSheet.DM_DocumentKind() == "PCB")
                    {
                        IPCB_Board PCBDoc = CurrentSheet as IPCB_Board;
                        //Open PCB file if not already open.
                        if (Client.IsDocumentOpen(CurrentSheet.DM_FullPath()))
                        {
                            ServerDoc = Client.GetDocumentByPath(CurrentSheet.DM_FullPath());
                        }
                        else
                        {
                            ServerDoc = Client.OpenDocument("PCB", CurrentSheet.DM_FullPath());
                        }

                        Client.ShowDocument(ServerDoc);
                        break;
                    }
                }
            }


            IPCB_Board Board;
            if (PCBServer == null)
            {
                return(null);
            }

            Board = PCBServer.GetCurrentPCBBoard(); //Get current board
            if (Board == null)
            {
                return(null);
            }
            return(Board);
        }
        catch (Exception ex)
        {
            ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex);
            return(null);
        }
    }