Ejemplo n.º 1
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);
    }
Ejemplo n.º 2
0
    public void BoundingBoxTest()
    {
        IPCB_BoardIterator BoardIterator;
        IPCB_Component     Component;
        string             RefDes;//, Varriant, Footprint, CompID;
        IPCB_Board         Board = Util.GetCurrentPCB();

        if (Board == null)
        {
            return;
        }

        double OriginX = EDP.Utils.CoordToMils(Board.GetState_XOrigin());
        double OriginY = EDP.Utils.CoordToMils(Board.GetState_YOrigin());

        //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.eComponentObject);
        BoardIterator.AddFilter_ObjectSet(FilterSet);
        BoardIterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); //Filter all layers.
        BoardIterator.AddFilter_Method(TIterationMethod.eProcessAll);


        Component = (IPCB_Component)BoardIterator.FirstPCBObject();

        while (Component != null)
        {
            RefDes = Component.GetState_Name().GetState_Text();
            //Determines if component is a variant.
            if (RefDes == "U7")
            {
                while (true)
                {
                    MessageBox.Show("X: " + Math.Abs((EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Right) - OriginX) - (EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Left) - OriginX)) + " Y: " + Math.Abs((EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Top) - OriginX) - (EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Bottom) - OriginX)));

                    //MessageBox.Show("X: " + (EDP.Utils.CoordToMils(Component.BoundingRectangle().Lx) - OriginX) + " Y: " + (EDP.Utils.CoordToMils(Component.BoundingRectangle().Ly) - OriginY));
                    //MessageBox.Show("X: " + (EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Lx) - OriginX) + " Y: " + (EDP.Utils.CoordToMils(Component.BoundingRectangleNoNameCommentForSignals().Ly) - OriginY));
                }
            }
            Component = (IPCB_Component)BoardIterator.NextPCBObject();
        }
        //Iterator clean-up
        Board.BoardIterator_Destroy(ref BoardIterator);
    }
Ejemplo n.º 3
0
    public void PrimPrimTest()
    {
        IPCB_BoardIterator BoardIterator;
        IPCB_Pad           Pad, Selected1 = null, Selected2 = null;
        IPCB_Board         Board = Util.GetCurrentPCB();

        if (Board == null)
        {
            return;
        }

        double OriginX = EDP.Utils.CoordToMils(Board.GetState_XOrigin());
        double OriginY = EDP.Utils.CoordToMils(Board.GetState_YOrigin());

        //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.ePadObject);
        BoardIterator.AddFilter_ObjectSet(FilterSet);
        BoardIterator.AddFilter_LayerSet(PCBConstant.V6AllLayersSet); //Filter all layers.
        BoardIterator.AddFilter_Method(TIterationMethod.eProcessAll);


        Pad = (IPCB_Pad)BoardIterator.FirstPCBObject();

        while (Pad != null)
        {
            //RefDes = Component.GetState_Name().GetState_Text();
            //Determines if component is a variant.
            if (Selected1 == null && Pad.GetState_Selected() == true)
            {
                Selected1 = Pad;
            }
            else if (Pad.GetState_Selected() == true)
            {
                Selected2 = Pad;
            }
            if (Selected1 != null && Selected2 != null)
            {
                break;
            }


            Pad = (IPCB_Pad)BoardIterator.NextPCBObject();
        }
        if (Selected1 == null || Selected2 == null)
        {
            return;
        }

        bool bot = false, top = false;

        if (Selected1.GetState_Layer() == TV6_Layer.eV6_BottomLayer)
        {
            Selected1.SetState_Layer(TV6_Layer.eV6_TopLayer);
            top = true;
        }

        if (Selected2.GetState_Layer() == TV6_Layer.eV6_BottomLayer)
        {
            Selected2.SetState_Layer(TV6_Layer.eV6_TopLayer);
            bot = true;
        }

        MessageBox.Show(EDP.Utils.CoordToMMs(Board.PrimPrimDistance(Selected1, Selected2)).ToString());

        if (top)
        {
            Selected1.SetState_Layer(TV6_Layer.eV6_BottomLayer);
        }

        if (bot)
        {
            Selected2.SetState_Layer(TV6_Layer.eV6_BottomLayer);
        }

        //Iterator clean-up
        Board.BoardIterator_Destroy(ref BoardIterator);
    }
Ejemplo n.º 4
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");
    }