Beispiel #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);
    }
Beispiel #2
0
    IPCB_Primitive CreateTrack(double x1, double y1, double x2, double y2, TV6_Layer Layer)
    {
        IPCB_Primitive tmpPrim = PCBServer.PCBObjectFactory(TObjectId.eTrackObject, TDimensionKind.eNoDimension, TObjectCreationMode.eCreate_Default);
        IPCB_Track     track   = tmpPrim as IPCB_Track;

        track.SetState_X1(OffsetX + EDP.Utils.MilsToCoord(x1 - 4285));
        track.SetState_Y1(OffsetY + EDP.Utils.MilsToCoord(y1));
        track.SetState_X2(OffsetX + EDP.Utils.MilsToCoord(x2 - 4285));
        track.SetState_Y2(OffsetY + EDP.Utils.MilsToCoord(y2));

        track.SetState_Layer(Layer);
        track.SetState_Width(EDP.Utils.MilsToCoord(20));

        return(tmpPrim);
    }
Beispiel #3
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");
    }
Beispiel #4
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;
    }
Beispiel #5
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);
        }
    }
Beispiel #6
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");
    }