Пример #1
0
    private void LoadLists()
    {
        PCBServer = PCB.GlobalVars.PCBServer;

        if (PCBServer == null)
        {
            MessageBox.Show("Error opening PCB.");
            return;
        }


        Board = Util.GetCurrentPCB();
        if (Board == null)
        {
            MessageBox.Show("Invalid Board");
        }

        IPCB_DrillLayerPair DrillPair = null;

        lstBefore.Items.Clear();
        lstAfter.Items.Clear();

        for (int i = 0; i < Board.GetState_DrillLayerPairsCount(); i++)
        {
            DrillPair = Board.GetState_LayerPair(i);
            lstBefore.Items.Add(DrillPair.GetState_Description());
            lstAfter.Items.Add(DrillPair.GetState_Description());
        }
    }
Пример #2
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");
    }
Пример #3
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);
        }
    }
Пример #4
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);
    }
Пример #5
0
    public void GetCompData()
    {
        try
        {
            IPCB_Board           Board;
            IPCB_BoardIterator   BoardIterator;
            IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer;
            IPCB_Net             Net;
            Board = Util.GetCurrentPCB();
            if (Board == null)
            {
                return;
            }

            //Iterate theough all components on the board.
            BoardIterator = Board.BoardIterator_Create();
            PCB.TObjectSet FilterSet = new PCB.TObjectSet();
            //Filter for components only.
            FilterSet.Add(PCB.TObjectId.eNetObject);
            BoardIterator.AddFilter_ObjectSet(FilterSet);
            BoardIterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); //Filter all layers.
            BoardIterator.AddFilter_Method(TIterationMethod.eProcessAll);

            //Component.GetState_ObjectID().ToString()
            //Component.GetState_ObjectIDString()
            int l = 0;
            Net = (IPCB_Net)BoardIterator.FirstPCBObject();
            //Component = (IPCB_Component)BoardIterator.FirstPCBObject();
            while (Net != null)
            {
                LogFile[l] = Net.GetState_ObjectIDString() + " " + Net.GetState_ObjectID().ToString();
                l++;
                //Component.BeginModify();
                //Component.SetState_NameOn(NameOn); //Show or hide refdes.
                //Component.EndModify();

                Net = (IPCB_Net)BoardIterator.NextPCBObject();
                //Component = (IPCB_Component)BoardIterator.NextPCBObject();
            }
            //Iterator clean-up
            Board.BoardIterator_Destroy(ref BoardIterator);
            //Board.GraphicalView_ZoomRedraw();
            log(LogFile);
        }
        catch (Exception ex)
        {
            ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex);
        }
    }
Пример #6
0
    public void ModelTest()
    {
        IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer;


        IPCB_ComponentBody STEPmodel = (IPCB_ComponentBody)PCBServer.PCBObjectFactory(PCB.TObjectId.eComponentBodyObject, TDimensionKind.eNoDimension, PCB.TObjectCreationMode.eCreate_Default);

        IPCB_Model Model = STEPmodel.ModelFactory_FromFilename("C:\\test.step", false);

        STEPmodel.SetState_FromModel();

        Model.SetState(90, 100, 110, 12000);

        double RotX;
        double RotY;
        double RotZ;
        int    StandOff;

        Model.GetState(out RotX, out RotY, out RotZ, out StandOff); //here occurs the error!!!

        STEPmodel.SetModel(Model);

        IPCB_Component Component = null;

        Component.AddPCBObject(STEPmodel);



        ////This code produces the same error:


        //CIter:= Component.GroupIterator_Create;

        //    CIter.AddFilter_ObjectSet(MkSet(eComponentBodyObject));

        //STEPmodel:= CIter.FirstPCBObject;

        //    While(STEPmodel <> nil) do

        //        begin


        //   StepModel.GetModel.GetState(RotX, RotY, RotZ, StandOff); //here occurs the error!!!

        //STEPmodel:= CIter.NextPCBObject;

        //    end;
    }
Пример #7
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");
    }
Пример #8
0
    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");
    }
Пример #9
0
    private void ReplaceVia(IPCB_Via OldVia, List <IPCB_DrillLayerPair> NewPairs, bool RemoveOld = true)
    {
        IPCB_Via NewVia;

        PCBServer = PCB.GlobalVars.PCBServer;

        if (PCBServer == null)
        {
            return;
        }

        foreach (IPCB_DrillLayerPair Pair in NewPairs)
        {
            NewVia = PCBServer.PCBObjectFactory(TObjectId.eViaObject, TDimensionKind.eCenterDimension, TObjectCreationMode.eCreate_Default) as IPCB_Via;
            NewVia.SetState_Net(OldVia.GetState_Net());
            NewVia.SetState_XLocation(OldVia.GetState_XLocation());
            NewVia.SetState_YLocation(OldVia.GetState_YLocation());
            //NewVia.SetState_Layer(Via.GetState_Layer());
            NewVia.SetState_HighLayer(Pair.GetState_StartLayer().V7_LayerID());
            NewVia.SetState_LowLayer(Pair.GetState_StopLayer().V7_LayerID());

            if (radMetric.Checked)
            {
                NewVia.SetState_HoleSize(EDP.Utils.MMsToCoord((double)numDrill.Value));
                NewVia.SetState_Size(EDP.Utils.MMsToCoord((double)numPad.Value));
            }
            else
            {
                NewVia.SetState_HoleSize(EDP.Utils.MilsToCoord((double)numDrill.Value));
                NewVia.SetState_Size(EDP.Utils.MilsToCoord((double)numPad.Value));
            }

            Board.AddPCBObject(NewVia as IPCB_Primitive);
        }
        if (RemoveOld)
        {
            Board.RemovePCBObject(OldVia);
        }
    }
Пример #10
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);
        }
    }
Пример #11
0
    /// <summary>
    /// Adds a new track to the PCB
    /// </summary>
    /// <param name="Offset"></param>
    /// <param name="argWidth"></param>
    private void AddTrack(structPos Offset, int argWidth)//, V7_Layer argLayer)
    {
        PCBServer = PCB.GlobalVars.PCBServer;
        if (Offset.x == null)
        {
            Offset.x = 0;
        }
        if (Offset.y == null)
        {
            Offset.y = 0;
        }

        int        xL, yL, xO, yO;
        IPCB_Board pcbBoard = Util.GetCurrentPCB();

        if (pcbBoard == null)
        {
            return;
        }

        System.Diagnostics.Debug.WriteLine(pcbBoard.GetState_DisplayUnit().ToString());



        TV6_Layer ActiveLayer = pcbBoard.GetState_CurrentLayer();

        int OriginX = pcbBoard.GetState_XOrigin();
        int OriginY = pcbBoard.GetState_YOrigin();

        PCBServer.PreProcess();

        // Set the value of J to point to the "next" vertex; this is normally
        // I + 1, but needs to be set to 0 instead for the very last vertex
        // that is processed by this loop.
        IPCB_Primitive primitive = PCBServer.PCBObjectFactory(TObjectId.eTrackObject, TDimensionKind.eNoDimension, TObjectCreationMode.eCreate_Default);

        if (primitive == null)
        {
            return;
        }
        IPCB_Track track = primitive as IPCB_Track;

        if (pcbBoard.GetState_DisplayUnit() == TUnit.eImperial)
        {
            xL       = EDP.Utils.MilsToCoord((double)LastPos.x);
            yL       = EDP.Utils.MilsToCoord((double)LastPos.y);
            xO       = EDP.Utils.MilsToCoord((double)Offset.x);
            yO       = EDP.Utils.MilsToCoord((double)Offset.y);
            argWidth = EDP.Utils.MilsToCoord((double)argWidth);
        }
        else
        {
            xL       = EDP.Utils.MMsToCoord((double)LastPos.x);
            yL       = EDP.Utils.MMsToCoord((double)LastPos.y);
            xO       = EDP.Utils.MMsToCoord((double)Offset.x);
            yO       = EDP.Utils.MMsToCoord((double)Offset.y);
            argWidth = EDP.Utils.MMsToCoord((double)argWidth);
        }

        if (Offset.absolute)
        {
            track.SetState_X1(OriginX + xL);
            track.SetState_Y1(OriginY + yL);
            track.SetState_X2(OriginX + xO);
            track.SetState_Y2(OriginY + yO);

            LastPos = Offset;
        }
        else
        {
            track.SetState_X1(OriginX + xL);
            track.SetState_Y1(OriginY + yL);
            track.SetState_X2(OriginX + (xL + xO));
            track.SetState_Y2(OriginY + (yL + yO));

            LastPos.x = LastPos.x + Offset.x;
            LastPos.y = LastPos.y + Offset.y;
        }

        track.SetState_Layer(ActiveLayer);
        track.SetState_Width(argWidth);
        pcbBoard.AddPCBObject(primitive);

        PCBServer.PostProcess();


        // Refresh PCB workspace.
        //DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw");
    }
Пример #12
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);
    }
Пример #13
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);
    }
Пример #14
0
    private void btnPlace_Click(object sender, EventArgs e)
    {
        try
        {
            clsSelectedObjects NewPlacement = new clsSelectedObjects();

            Dictionary <string, string> NetCompare = GetNetDiff();

            IPCB_Board brd = Util.GetCurrentPCB();
            brd.SelectedObjects_Clear();

            IPCB_Primitive temp;

            IPCB_ServerInterface PCBServer = PCB.GlobalVars.PCBServer;
            PCBServer.PreProcess();

            int OffsetX = 0, OffsetY = 0;
            if (!brd.ChooseLocation(ref OffsetX, ref OffsetY, "Select placement location"))
            {
                return;
            }
            try
            {
                OffsetX = OffsetX - PR.selectedSourceObjects.componentObjects[0].GetState_XLocation();
                OffsetY = OffsetY - PR.selectedSourceObjects.componentObjects[0].GetState_YLocation();
            }
            catch (Exception ex)
            {
                if (ex.HResult == -2147467259)
                {
                    MessageBox.Show("Source and destination data is corrupted due to board file being closed. Please restart the process.");
                    lstDest.Items.Clear();
                    lstSource.Items.Clear();
                    lstMatched.Items.Clear();
                    return;
                }
                throw;
            }

            PR.GetNets();

            brd.BeginModify();

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.arcObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                    }
                    else
                    {
                        //temp.SetState_Net(PCBServer.PCBObjectFactory(TObjectId.eNetObject, TDimensionKind.eNoDimension, TObjectCreationMode.eCreate_Default) as IPCB_Net);
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.arcObjects.Add(temp as IPCB_Arc);
            }

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.padObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                        else
                        {
                            temp.SetState_Net(null);
                        }
                    }
                    else
                    {
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.padObjects.Add(temp as IPCB_Pad);
            }

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.ViaObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                        else
                        {
                            temp.SetState_Net(null);
                        }
                    }
                    else
                    {
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.ViaObjects.Add(temp as IPCB_Via);
            }

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.trackObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                        else
                        {
                            temp.SetState_Net(null);
                        }
                    }
                    else
                    {
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.trackObjects.Add(temp as IPCB_Track);
            }

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.textObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                        else
                        {
                            temp.SetState_Net(null);
                        }
                    }
                    else
                    {
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.textObjects.Add(temp as IPCB_Text);
            }

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.fillObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                        else
                        {
                            temp.SetState_Net(null);
                        }
                    }
                    else
                    {
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.fillObjects.Add(temp as IPCB_Fill);
            }

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.polygonObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                        else
                        {
                            temp.SetState_Net(null);
                        }
                    }
                    else
                    {
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.polygonObjects.Add(temp as IPCB_Polygon);
            }

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.primitiveObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                        else
                        {
                            temp.SetState_Net(null);
                        }
                    }
                    else
                    {
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.primitiveObjects.Add(temp);
            }

            foreach (IPCB_Primitive item in PR.selectedSourceObjects.regionObjects)
            {
                temp = item.Replicate();
                brd.AddPCBObject(temp);
                temp.BeginModify();
                temp.MoveByXY(OffsetX, OffsetY);

                if (temp.GetState_Net() != null)
                {
                    if (NetCompare.ContainsKey(temp.GetState_Net().GetState_Name()))
                    {
                        if (PR.BoardNets.ContainsKey(NetCompare[temp.GetState_Net().GetState_Name()]))
                        {
                            temp.SetState_Net(PR.BoardNets[NetCompare[temp.GetState_Net().GetState_Name()]]);
                        }
                        else
                        {
                            temp.SetState_Net(null);
                        }
                    }
                    else
                    {
                        temp.SetState_Net(null);
                    }
                }
                temp.EndModify();
                NewPlacement.regionObjects.Add(temp as IPCB_Region);
            }

            string         srcRef, dstRef;
            IPCB_Component srcComp, dstComp;

            foreach (string item in lstMatched.Items)
            {
                srcRef = item.Split('>')[0];
                dstRef = item.Split('>')[1];

                srcComp = PR.selectedSourceObjects.GetComponent(srcRef);
                dstComp = PR.selectedDestinationObjects.GetComponent(dstRef);

                dstComp.BeginModify();
                if (srcComp.GetState_Layer() != dstComp.GetState_Layer())
                {
                    dstComp.FlipComponent();
                }
                dstComp.SetState_Rotation(srcComp.GetState_Rotation());
                dstComp.MoveToXY(OffsetX + srcComp.GetState_XLocation(), OffsetY + srcComp.GetState_YLocation());
                //dstComp.Rebuild();
                dstComp.EndModify();
            }


            brd.EndModify();

            PCBServer.PostProcess();

            brd.GraphicallyInvalidate();
            //brd.Update_PCBGraphicalView(true, true);

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

            //string process = "PCB:MoveObject";
            //string parameters = "Object= Selection";
            //DXP.Utils.RunCommand(process, parameters);
            RemoveMatched("Placed");
        }
        catch (Exception ex)
        {
            ErrorMail.LogError("Error in " + System.Reflection.MethodBase.GetCurrentMethod().Name + ".", ex);
            return;
        }
    }
Пример #15
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();
    }
Пример #16
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);
        //}
    }
Пример #17
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);
        }
    }