示例#1
0
    private PrimitiveArea CalPadArea(IPCB_Pad PcbPad)
    {
        int    Pad_X_Size, Pad_Y_Size;
        SPoint location = new SPoint();

        location.X = PcbPad.GetState_XLocation();
        location.Y = PcbPad.GetState_YLocation();

        if ((PcbPad.GetState_Rotation() == (double)90) || (PcbPad.GetState_Rotation() == (double)270))
        {
            Pad_X_Size = PcbPad.GetState_TopYSize();
            Pad_Y_Size = PcbPad.GetState_TopXSize();
        }

        else
        {
            Pad_X_Size = PcbPad.GetState_TopXSize();
            Pad_Y_Size = PcbPad.GetState_TopYSize();
        }

        PrimitiveArea PadArea = new PrimitiveArea();

        PadArea.BottomLeft.X  = location.X - (Pad_X_Size / 2);
        PadArea.BottomLeft.Y  = location.Y - (Pad_Y_Size / 2);
        PadArea.BottomRight.X = location.X + (Pad_X_Size / 2);
        PadArea.BottomRight.Y = PadArea.BottomLeft.Y;
        PadArea.TopLeft.X     = PadArea.BottomLeft.X;
        PadArea.TopLeft.Y     = location.Y + (Pad_Y_Size / 2);
        PadArea.TopRight.X    = PadArea.BottomRight.X;
        PadArea.TopRight.Y    = PadArea.TopLeft.Y;

        return(PadArea);
    }
示例#2
0
    private PrimitiveArea CalArcArea(IPCB_Arc PcbArc)
    {
        PrimitiveArea ArcArea = new PrimitiveArea();


        return(ArcArea);
    }
示例#3
0
    private PrimitiveArea CalTrackArea(IPCB_Track PcbTrack)
    {
        PrimitiveArea TrackArea = new PrimitiveArea();
        int           x1        = Math.Min(PcbTrack.GetState_X1(), PcbTrack.GetState_X2());
        int           x2        = Math.Max(PcbTrack.GetState_X1(), PcbTrack.GetState_X2());
        int           y1        = Math.Min(PcbTrack.GetState_Y1(), PcbTrack.GetState_Y2());
        int           y2        = Math.Max(PcbTrack.GetState_Y1(), PcbTrack.GetState_Y2());

        TrackArea.BottomLeft.X  = x1;
        TrackArea.BottomLeft.Y  = y1;
        TrackArea.BottomRight.X = x2;
        TrackArea.BottomRight.Y = y1;
        TrackArea.TopLeft.X     = x1;
        TrackArea.TopLeft.Y     = y2;
        TrackArea.TopRight.X    = x2;
        TrackArea.TopRight.Y    = y2;

        return(TrackArea);
    }
示例#4
0
    private PrimitiveArea CalComponentArea(List <PrimitiveArea> PcbPrimitiveAreas)
    {
        PrimitiveArea CmpArea = new PrimitiveArea();

        CmpArea.TopLeft.X     = PcbPrimitiveAreas[0].TopLeft.X;
        CmpArea.TopLeft.Y     = PcbPrimitiveAreas[0].TopLeft.Y;
        CmpArea.TopRight.X    = PcbPrimitiveAreas[0].TopRight.X;
        CmpArea.TopRight.Y    = PcbPrimitiveAreas[0].TopRight.Y;
        CmpArea.BottomLeft.X  = PcbPrimitiveAreas[0].BottomLeft.X;
        CmpArea.BottomLeft.Y  = PcbPrimitiveAreas[0].BottomLeft.Y;
        CmpArea.BottomRight.X = PcbPrimitiveAreas[0].BottomRight.X;
        CmpArea.BottomRight.Y = PcbPrimitiveAreas[0].BottomRight.Y;

        foreach (PrimitiveArea ObjArea in PcbPrimitiveAreas)
        {
            if (ObjArea.BottomLeft.X < CmpArea.BottomLeft.X)
            {
                CmpArea.BottomLeft.X = ObjArea.BottomLeft.X;
                CmpArea.TopLeft.X    = CmpArea.BottomLeft.X;
            }

            if (ObjArea.BottomLeft.Y < CmpArea.BottomLeft.Y)
            {
                CmpArea.BottomLeft.Y  = ObjArea.BottomLeft.Y;
                CmpArea.BottomRight.Y = CmpArea.BottomLeft.Y;
            }

            if (ObjArea.TopRight.X > CmpArea.TopRight.X)
            {
                CmpArea.TopRight.X    = ObjArea.TopRight.X;
                CmpArea.BottomRight.X = CmpArea.TopRight.X;
            }

            if (ObjArea.TopRight.Y > CmpArea.TopRight.Y)
            {
                CmpArea.TopRight.Y = ObjArea.TopRight.Y;
                CmpArea.TopLeft.Y  = ObjArea.TopRight.Y;
            }
        }

        return(CmpArea);
    }
示例#5
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");
    }
示例#6
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);
    }