Es ist sehr einfach Ihre eigene C#-Anwendung mit Hilfe des PCB-Investigators zu erstellen. Zunächst müssen Sie die Referenz zu Ihrem Projekt hinzufügen. Für dieses Beispiel ist es ausreichend lediglich einen Verwendungszweck von PCB-Investigator über die Referenz PCBI.Automation anzugeben.

Für einen erleichterten Start wurde ein eigener Button hinzugefügt, mit dem Sie Ihr Programm starten können.

Sie können dieses einfache Beispiel ebenfalls mit Netzinformationen aktualisieren.

Hier finden Sie den Beispielcode in C# und VB:

private void buttonCreateJobAndAddDemoLayers_Click(object sender, EventArgs e)
    {
      IPCBIWindow window;
      if (parent == null)
      //create a new instance of PCB-Investigator
      {
        window = PCBI.Automation.IAutomation.CreateNewPCBIWindow(true);
        parent = window;
      }
      else
        //use the existing instance
        window = parent;
 
      PCBI.Automation.IFilter filter = new PCBI.Automation.IFilter(window);
 
      #region create new job
      try
      {
        string JobFullPath = filter.CreateAndLoadEmptyJob(@"C:\tests\FilterTests\Job1");
      }
      catch (Exception ex)
      {
        MessageBox.Show("Can't create new JobDirectory!\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
      }
      #endregion
 
      #region new layer
      CreateDemoODBLayer(filter);
 
      #endregion
 
      #region CMP-layer
      CreateDemoCMPLayer(window, filter);
      #endregion
    }
 
    /// <summary>
    /// This method creates an new component layer and add an cmp with some demo pins.
    /// </summary>
    /// <param name="window">The parent window to add the layer and cmp.</param>
    /// <param name="filter">An IFilter object to create the new items.</param>
    private static void CreateDemoCMPLayer(IPCBIWindow window, PCBI.Automation.IFilter filter)
    {
      ICMPLayer parentCMP = window.GetCurrentStep().GetCMPLayer(true);
      if (parentCMP == null)
        parentCMP = filter.CreateEmptyCMPLayer("cmp_top", "gerber"); //in this example the stepname is "gerber"
      ICMPObject component = filter.CreateComponent(parentCMP);
 
      IPackageSpecifics pack = filter.CreatePackage("testPack"); //one package for the demo-cmp
      #region outline of package
      GraphicsPath gp = new GraphicsPath();
 
      gp.AddLine(new Point(100, 100), new Point(100, 300));
      gp.AddLine(new Point(100, 300), new Point(300, 300));
      gp.AddLine(new Point(300, 300), new Point(300, 100));
      gp.AddLine(new Point(300, 100), new Point(100, 100));
 
      pack.SetGraphicsPath(gp);
      #endregion
 
      pack.AddEllipsePin(new PointF(101, 101), 35, "PinEl1");
      pack.AddRectanglePin(new RectangleF(279, 269, 40, 50), "PinRe1");
 
      #region more pins
      for (int i = 0; i < 5; i++)
      {
        ISurfaceSpecifics outline = pack.CreatePolygonPinSurface();
        outline.StartPolygon(false, new PointF(20, 50));
        outline.AddLine(new PointF(20, 50), new PointF(20, 70));
        outline.AddLine(new PointF(20, 70), new PointF(35, 70));
 
        outline.AddArc(new PointF(35, 70), new PointF(40, 65), new PointF(35, 65), true);
 
        outline.AddLine(new PointF(40, 65), new PointF(40, 50));
        outline.AddLine(new PointF(40, 50), new PointF(20, 50));
        outline.EndPolygon();
        pack.AddPolygonPin(new PointF(100 + i * 20, 150 + 1 * 5), outline, "PinPo" + i); //add the polygon pin with nr
      }
      #endregion
 
      var specifics = component.GetSpecifics();
      IComponentSpecifics spec = (IComponentSpecifics)specifics;
      spec.Height = 7;
      spec.Location = new PointF(1000, 500);
      spec.PartName = "partName2";
      spec.Value = "value2";
      spec.Attributes = "attributes2";
      spec.Reference = "Ref2";
      spec.PlacedTop = true;
 
      component.SetSpecifics(spec, pack);
    }
 
    /// <summary>
    /// An example to create an new layer and add some objects to show how to handle simple properties.
    /// </summary>
    /// <param name="filter">The IFilter object to create the elements.</param>
    private void CreateDemoODBLayer(PCBI.Automation.IFilter filter)
    {
      IODBLayer layer = filter.CreateEmptyODBLayer("layer1", "gerber");
 
      //tooldefinitions
      int index1 = IFilter.AddToolDefinitionRound(layer, 10, 0);
      int index2 = IFilter.AddToolDefinitionRect(layer, 20, 1, 20, 50, true);
      int index3 = IFilter.AddToolDefinitionDonut(layer, 50, 25, 2);
      int index4 = IFilter.AddToolDefinitionOct(layer, 40, 40, 40, 5, 3);
 
      #region firstArc
      //create an arc object
      IODBObject arc = filter.CreateArc(layer);
      IArcSpecifics specificsArc = new IArcSpecifics();
      specificsArc.Start = new PointF(100, 100);
      specificsArc.End = new PointF(100, 300);
      specificsArc.Center = new PointF(100, 200);
      specificsArc.ClockWise = true;
      specificsArc.Positiv = true;
      specificsArc.Diameter = 10;
      arc.SetSpecifics(specificsArc, 0);
      #endregion
 
      #region first+second+third Pad
      //create three pads
      IODBObject pad = filter.CreatePad(layer);
      IPadSpecifics padInfos = new IPadSpecifics();
      padInfos.Location = new PointF(400, 400);
      padInfos.Positiv = (true);
      pad.SetSpecifics(padInfos, index1); //its possible to use the same index more than one time
 
      IODBObject pad2 = filter.CreatePad(layer);
      padInfos = new IPadSpecifics();
      padInfos.Location = new PointF(300, 400);
      padInfos.Positiv = (true);
      pad2.SetSpecifics(padInfos, index2);
 
      IODBObject pad3 = filter.CreatePad(layer);
      padInfos = new IPadSpecifics();
      padInfos.Location = new PointF(200, 400);
      padInfos.Positiv = (true);
      pad3.SetSpecifics(padInfos, index3);
      #endregion
    }