void Parent_PCBIFormGraphicPaneDrawing(Graphics g, int ClientWidth, int ClientHeight) { if (!parent.JobIsLoaded) { return; } int pcbCount = 0; IStep PanelStep = parent.GetCurrentStep(); if (PanelStep == null) { return; } RectangleF PanelSize = PanelStep.GetBounds(); if (PanelSize == RectangleF.Empty) { return; } DrawSingleBoard(g, PanelSize, new PointD(0, 0), pcbCount, PanelStep.Name, "0"); pcbCount++; List <IStep.StepAndRepeatClass> srList = PanelStep.GetChildStepClasses(); foreach (IStep.StepAndRepeatClass sr in srList) { IStep step = parent.GetStep(sr.NAME); System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix(); matrix.Rotate(-(float)sr.ANGLE, System.Drawing.Drawing2D.MatrixOrder.Append); matrix.Translate((float)sr.X, (float)sr.Y, System.Drawing.Drawing2D.MatrixOrder.Append); RectangleF BoardSize = IMath.RectangleTransformWithMatrix(step.GetBoundsD(), matrix).ToRectangleF(); PointD originOfBoard = new PointD(sr.X, sr.Y); IMath.TransformPoint(matrix, originOfBoard); DrawSingleBoard(g, BoardSize, originOfBoard, pcbCount, sr.NAME, sr.ANGLE.ToString("N2")); if (sr.NX > 1 || sr.NY > 1) { for (int iy = 0; iy < sr.NY; iy++) { for (int ix = 0; ix < sr.NX; ix++) { System.Drawing.Drawing2D.Matrix matrixsr = matrix.Clone(); double offsetX = sr.DX * ix; double offsetY = sr.DY * iy; matrixsr.Translate((float)offsetX, (float)offsetY, System.Drawing.Drawing2D.MatrixOrder.Append); BoardSize = IMath.RectangleTransformWithMatrix(step.GetBoundsD(), matrixsr).ToRectangleF(); originOfBoard = new PointD(sr.X + offsetX, sr.Y + offsetY); DrawSingleBoard(g, BoardSize, originOfBoard, pcbCount, sr.NAME, sr.ANGLE.ToString("N2")); pcbCount++; } } } pcbCount++; } }
public void Execute(IPCBIWindow PCBI_Host) { PCBI_Host.LoadODBJob(@"D:\jobs\examples\odbjob"); //this works only if the location exists and the folder contains an odb++ design! IStep step = PCBI_Host.GetStep("pcb"); //the step name must be correct to find the step with this method. if (step == null) { return; } step.ActivateStep(); }