
# IPCB_Board interface

An open PCB document, through which you add and delete design objects, find out which layers are used and so on.

```csharp
public interface IPCB_Board : IPCB_Primitive
```

**Namespace:** PCB · **Assembly:** Altium.SDK.Interfaces

**Inherits:** [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md)

## Remarks

A PCB library document also has a board ([`IPCB_Library.Board`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Library.md#board)): the library holds a list of footprints ([`IPCB_LibComponent`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LibComponent.md), components with unnamed designators), and each footprint is shown on the library's board.

Check that the PCB server exists and that there is a PCB document before you call any PCB interface methods.

To add a new object, create it with [`IPCB_ServerInterface.PCBObjectFactory`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbobjectfactory) and add it with [`AddPCBObject`](#addpcbobject).

To look for objects, use a board iterator ([`BoardIterator_Create`](#boarditerator_create)), a spatial iterator ([`SpatialIterator_Create`](#spatialiterator_create)), a group iterator ([`IPCB_Group.GroupIterator_Create`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Group.md#groupiterator_create)) or, on a PCB library document, a library iterator ([`IPCB_Library.LibraryIterator_Create`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Library.md#libraryiterator_create)).

The interactive methods [`GetObjectAtCursor`](#getobjectatcursor), [`GetObjectAtXYAskUserIfAmbiguous`](#getobjectatxyaskuserifambiguous), [`ChooseRectangleByCorners`](#chooserectanglebycorners) and [`ChooseLocation`](#chooselocation) return the object or the coordinates that the user clicks on.

## Properties

| Property | Type | Access | Description |
| --- | --- | --- | --- |
| [AutomaticSplitPlanes](#automaticsplitplanes) | `bool` | get; set | Whether split planes are generated automatically; always `true`. |
| [BigVisibleGridMultFactor](#bigvisiblegridmultfactor) | `double` | get; set |  |
| [BigVisibleGridSize](#bigvisiblegridsize) | `double` | get; set | The size of the big (coarse) visible grid. |
| [BigVisibleGridUnit](#bigvisiblegridunit) | [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md) | get; set | The measurement unit of the big (coarse) visible grid, imperial or metric. |
| [BoardID](#boardid) | `int` | get |  |
| [BoardLayerSetManager](#boardlayersetmanager) | [IPCB_BoardLayerSetManager](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardLayerSetManager.md) | get |  |
| [BoardOutline](#boardoutline) | [IPCB_BoardOutline](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md) | get | The Board Outline represents the board outline which encompasses a board design on a PCB document. |
| [BoardVersion](#boardversion) | `double` | get | The file format version that was read from the board's file. |
| [ComponentGridSize](#componentgridsize) | `double` | get; set | The component placement grid size, for X and Y together. |
| [ComponentGridSizeX](#componentgridsizex) | `double` | get; set | The X size of the component placement grid. |
| [ComponentGridSizeY](#componentgridsizey) | `double` | get; set | The Y size of the component placement grid. |
| [CurrentLayer](#currentlayer) | [TV6_Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md) | get | This property denotes the current PCB layer being displayed in the PCB workspace in Altium Designer. |
| [CurrentLayerV7](#currentlayerv7) | [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) | get; set | The current layer of the board's view. |
| [DesignatorDisplayMode](#designatordisplaymode) | [TDesignatorDisplayMode](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TDesignatorDisplayMode.md) | get; set |  |
| [DisplayUnit](#displayunit) | [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md) | get; set | This property retrieves or sets the measurement units for the PCB document display purposes in Imperial or Metric units. |
| [DrawDotGrid](#drawdotgrid) | `bool` | get; set | Whether the grid is drawn as dots (`true`) or as continuous lines (`false`). |
| [DrawMode](#drawmode) | [TDrawMode](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TDrawMode.md) | get; set |  |
| [DrillLayerPairsCount](#drilllayerpairscount) | `int` | get | This property returns the number of drill layer pairs for the board. |
| [ECOOptions](#ecooptions) | [IPCB_ECOOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ECOOptions.md) | get | This property returns you the [`IPCB_ECOOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ECOOptions.md) interface which represents the Options for the Engineering Order Change facility in the PCB editor. |
| [FileName](#filename) | `string` | get | The `FileName` property denotes the filename of the PCB document that the `IPCB_Board` interface is associated with. |
| [GerberOptions](#gerberoptions) | [IPCB_GerberOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GerberOptions.md) | get | This property returns you the [`IPCB_GerberOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GerberOptions.md) interface which represents the Options for the Gerbers facility in the PCB editor. |
| [InternalPlane1NetName](#internalplane1netname) | `string` | get; set | The net name of internal plane 1. |
| [InternalPlane2NetName](#internalplane2netname) | `string` | get; set | The net name of internal plane 2. |
| [InternalPlane3NetName](#internalplane3netname) | `string` | get; set | The net name of internal plane 3. |
| [InternalPlane4NetName](#internalplane4netname) | `string` | get; set | The net name of internal plane 4. |
| [InternalPlaneNetName](#internalplanenetname) | `string` | get; set | This property returns or sets the net name for the targeted internal plane. |
| [LayerColor](#layercolor) | `uint` | get | The display colour of a layer. |
| [LayerIsDisplayed](#layerisdisplayed) | `bool` | get; set | Whether a layer is shown in the board's view. |
| [LayerIsUsed](#layerisused) | `bool` | get; set | This property retrieves or sets the boolean value for whether the layer is used by primitives or not. |
| [LayerPair](#layerpair) | [IPCB_DrillLayerPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) | get | This property returns you the layer pair associated with the [`IPCB_DrillLayerPair`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) interface. |
| [LayerPairByPair](#layerpairbypair) | [IPCB_DrillLayerPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) | get | Deprecated: use [`LayerPairByPairEx`](#layerpairbypairex). |
| [LayerPairByPairEx](#layerpairbypairex) | [IPCB_DrillLayerPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) | get |  |
| [LayerStack](#layerstack) | [IPCB_LayerStack](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack.md) | get | The layer stack property fetches the [`IPCB_LayerStack`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack.md) interface for the current PCB document. |
| [LayerStack_V7](#layerstack_v7) | [IPCB_LayerStack_V7](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack_V7.md) | get | The master layer stack of the board, the same stack as [`MasterStack`](#masterstack), as an [`IPCB_LayerStack_V7`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack_V7.md). |
| [MainGraphicalView](#maingraphicalview) | [IPCB_GraphicalView](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GraphicalView.md) | get | The graphical view of the board. |
| [MasterStack](#masterstack) | [IPCB_MasterLayerStack](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MasterLayerStack.md) | get |  |
| [MechanicalPairs](#mechanicalpairs) | [IPCB_MechanicalLayerPairs](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MechanicalLayerPairs.md) | get | The mechanical layer pairs of the board, as an [`IPCB_MechanicalLayerPairs`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MechanicalLayerPairs.md). |
| [MeshViewMode](#meshviewmode) | [TPCBMeshViewMode](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TPCBMeshViewMode.md) | get; set |  |
| [Navigate_HighlightObjectList](#navigate_highlightobjectlist) | `bool` | set | Highlights the objects in the board's highlight list with the given highlight methods. |
| [OutputOptions](#outputoptions) | [IPCB_OutputOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OutputOptions.md) | get | This property returns you the [`IPCB_OutputOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OutputOptions.md) interface which represents the Options for the Output facility in the PCB editor. |
| [PadViaCache](#padviacache) | [IPCB_PadViaLibrary](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibrary.md) | get |  |
| [PadViaLibrary](#padvialibrary) | [IPCB_PadViaLibrary](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibrary.md) | get |  |
| [PCB3DMovieManager](#pcb3dmoviemanager) | [IPCB_3DMovieManager](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_3DMovieManager.md) | get |  |
| [PCBSheet](#pcbsheet) | [IPCB_Sheet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Sheet.md) | get | This property returns the [`IPCB_Sheet`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Sheet.md) interface which is represented by the sheet workspace. |
| [PinPairsManager](#pinpairsmanager) | [IPCB_PinPairsManager](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PinPairsManager.md) | get | The manager of the board's pin pairs. |
| [PlacerOptions](#placeroptions) | [IPCB_AdvancedPlacerOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AdvancedPlacerOptions.md) | get | This property returns you the [`IPCB_AdvancedPlacerOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AdvancedPlacerOptions.md) interface which represents the Options for the Placement facility in the PCB editor. |
| [PolygonNameTemplate](#polygonnametemplate) | [TPolygonNameTemplates](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TPolygonNameTemplates.md) | get; set |  |
| [PrinterOptions](#printeroptions) | [IPCB_PrinterOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrinterOptions.md) | get | This property returns you the [`IPCB_PrinterOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrinterOptions.md) interface which represents the Options for the Printer setup facility in the PCB editor. |
| [RouteToolPathLayer](#routetoolpathlayer) | [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) | get; set |  |
| [RoutingOptions](#routingoptions) | [IPCB_BoardRoutingOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardRoutingOptions.md) | get |  |
| [SelectecObject](#selectecobject) | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | get | This property represents the indexed selected object found on the PCB document. |
| [SelectecObjectCount](#selectecobjectcount) | `int` | get | This property represents the number of selected objects found on the PCB document. |
| [SnapGridSize](#snapgridsize) | `double` | get; set | The `SnapGridSize` property sets the X and Y values for the Snap Grid simultaneously. |
| [SnapGridSizeX](#snapgridsizex) | `double` | get; set | This property retrieves or sets the Snap Grid size X value. |
| [SnapGridSizeY](#snapgridsizey) | `double` | get; set | This property retrieves or sets the Snap Grid size Y value. |
| [SnapGridUnit](#snapgridunit) | [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md) | get; set | The `SnapGridUnit` property retrieves or sets the measurement unit for the Snap Grid Unit. |
| [SwitchOutputCapabilityMode](#switchoutputcapabilitymode) | `bool` | set |  |
| [SystemValid](#systemvalid) | `bool` | get; set |  |
| [TrackGridSize](#trackgridsize) | `double` | get; set | This property retrieves or sets the track grid size in both X and Y directions simultaneously. |
| [ViaGridSize](#viagridsize) | `double` | get; set | This property retrieves or sets the via grid size in both X and Y directions simultaneously. |
| [ViewConfigColor2D](#viewconfigcolor2d) | `uint` | get |  |
| [ViewConfigColor3D](#viewconfigcolor3d) | `uint` | get |  |
| [ViewConfigFromString](#viewconfigfromstring) | `string` | set |  |
| [ViewConfigFromString_ForceRebuild](#viewconfigfromstring_forcerebuild) | `string` | set |  |
| [ViewConfigIs3D](#viewconfigis3d) | `bool` | get |  |
| [ViewConfigOpacity2D](#viewconfigopacity2d) | `float` | get |  |
| [ViewConfigOpacity3D](#viewconfigopacity3d) | `float` | get |  |
| [ViewConfigTopSolderMaskColor3D](#viewconfigtopsoldermaskcolor3d) | `uint` | get |  |
| [Viewport](#viewport) | [IPCB_Viewport](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Viewport.md) | get; set |  |
| [VisibleGridMultFactor](#visiblegridmultfactor) | `double` | get; set |  |
| [VisibleGridSize](#visiblegridsize) | `double` | get; set | The size of the (fine) visible grid. |
| [VisibleGridUnit](#visiblegridunit) | [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md) | get; set | The measurement unit of the (fine) visible grid, imperial or metric. |
| [Window](#window) | `uint` | get | This property returns the raw Windows handle for a window handle of a PCB document in Altium Designer. |
| [WorldXOrigin](#worldxorigin) | `int` | get; set | The X coordinate of the world origin of the board, in internal units (10,000 per mil). |
| [WorldYOrigin](#worldyorigin) | `int` | get; set | The Y coordinate of the world origin of the board, in internal units (10,000 per mil). |
| [XCursor](#xcursor) | `int` | get; set | The X coordinate of the cursor in the current PCB view, in internal units (10,000 per mil). |
| [XOrigin](#xorigin) | `int` | get; set | This property sets or retrieves the X coordinate of the absolute origin of the board, in internal units (10,000 per mil). |
| [YCursor](#ycursor) | `int` | get; set | The Y coordinate of the cursor in the current PCB view, in internal units (10,000 per mil). |
| [YOrigin](#yorigin) | `int` | get; set | This property sets or retrieves the Y coordinate of the absolute origin of the board, in internal units (10,000 per mil). |

### AutomaticSplitPlanes

Whether split planes are generated automatically; always `true`.

```csharp
bool GetState_AutomaticSplitPlanes();
void SetState_AutomaticSplitPlanes(bool argValue);
```

**Type:** `bool` · **Access:** read/write

Setting the property has no effect.

### BigVisibleGridMultFactor

*No description yet.*

```csharp
double GetState_BigVisibleGridMultFactor();
void SetState_BigVisibleGridMultFactor(double argMultFact);
```

**Type:** `double` · **Access:** read/write

### BigVisibleGridSize

The size of the big (coarse) visible grid. This grid is used for reference purposes and there are two visible grids.

```csharp
double GetState_BigVisibleGridSize();
void SetState_BigVisibleGridSize(double argValue);
```

**Type:** `double` · **Access:** read/write

**See also:** [IPCB_Board.VisibleGridSize](#visiblegridsize)

### BigVisibleGridUnit

The measurement unit of the big (coarse) visible grid, imperial or metric. There are two visible grids to use for reference purposes.

```csharp
TUnit GetState_BigVisibleGridUnit();
void SetState_BigVisibleGridUnit(TUnit argValue);
```

**Type:** [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_Board.VisibleGridUnit](#visiblegridunit), [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md)

### BoardID

*No description yet.*

```csharp
int GetState_BoardID();
```

**Type:** `int` · **Access:** read-only

### BoardLayerSetManager

*No description yet.*

```csharp
IPCB_BoardLayerSetManager GetState_BoardLayerSetManager();
```

**Type:** [IPCB_BoardLayerSetManager](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardLayerSetManager.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### BoardOutline

The Board Outline represents the board outline which encompasses a board design on a PCB document. The board outline is represented by the [`IPCB_BoardOutline`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md) interface and inherited from the [`IPCB_Polygon`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Polygon.md) interface because the Board Outline is composed of vertices (tracks and arcs only).

```csharp
IPCB_BoardOutline GetState_BoardOutline();
```

**Type:** [IPCB_BoardOutline](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

To get the size of the board, the examples take the outline's [`IPCB_Primitive.BoundingRectangle`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#boundingrectangle) (in internal units).

**See also:** [IPCB_BoardOutline](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md)

### BoardVersion

The file format version that was read from the board's file.

```csharp
double GetState_BoardVersion();
```

**Type:** `double` · **Access:** read-only

### ComponentGridSize

The component placement grid size, for X and Y together.

```csharp
double GetState_ComponentGridSize();
void SetState_ComponentGridSize(double argValue);
```

**Type:** `double` · **Access:** read/write

Setting the property has no effect.

**See also:** [IPCB_Board.ComponentGridSizeX](#componentgridsizex), [IPCB_Board.ComponentGridSizeY](#componentgridsizey)

### ComponentGridSizeX

The X size of the component placement grid.

```csharp
double GetState_ComponentGridSizeX();
void SetState_ComponentGridSizeX(double argValue);
```

**Type:** `double` · **Access:** read/write

Setting the property has no effect.

**See also:** [IPCB_Board.ComponentGridSize](#componentgridsize), [IPCB_Board.ComponentGridSizeY](#componentgridsizey)

### ComponentGridSizeY

The Y size of the component placement grid.

```csharp
double GetState_ComponentGridSizeY();
void SetState_ComponentGridSizeY(double argValue);
```

**Type:** `double` · **Access:** read/write

Setting the property has no effect.

**See also:** [IPCB_Board.ComponentGridSize](#componentgridsize), [IPCB_Board.ComponentGridSizeX](#componentgridsizex)

### CurrentLayer

This property denotes the current PCB layer being displayed in the PCB workspace in Altium Designer.

```csharp
TV6_Layer GetState_CurrentLayer();
```

**Type:** [TV6_Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

Read-only; set [`CurrentLayerV7`](#currentlayerv7) to change the current layer.

### CurrentLayerV7

The current layer of the board's view.

```csharp
V7_LayerBase GetState_CurrentLayerV7();
void SetState_CurrentLayerV7(V7_LayerBase argValue);
```

**Type:** [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

Reads no layer when the board has no view; setting the property then has no effect.

### DesignatorDisplayMode

*No description yet.*

```csharp
TDesignatorDisplayMode GetState_DesignatorDisplayMode();
void SetState_DesignatorDisplayMode(TDesignatorDisplayMode argMode);
```

**Type:** [TDesignatorDisplayMode](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TDesignatorDisplayMode.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### DisplayUnit

This property retrieves or sets the measurement units for the PCB document display purposes in Imperial or Metric units.

```csharp
TUnit GetState_DisplayUnit();
void SetState_DisplayUnit(TUnit argValue);
```

**Type:** [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

Setting the property also updates the cursor coordinates shown on the status bar.

**Example:** Show the file name and the display unit of the current board.

```csharp
using PCB;

IPCB_Board board = PCB.GlobalVars.PCBServer?.GetCurrentPCBBoard();
if (board == null)
    return;
DXP.Utils.ShowMessage("Board Filename =" + board.GetState_FileName() + "\r" +
                      "Board Units = " + board.GetState_DisplayUnit());
```

### DrawDotGrid

Whether the grid is drawn as dots (`true`) or as continuous lines (`false`).

```csharp
bool GetState_DrawDotGrid();
void SetState_DrawDotGrid(bool argValue);
```

**Type:** `bool` · **Access:** read/write

### DrawMode

*No description yet.*

```csharp
TDrawMode GetState_DrawMode(TObjectId argOId);
void SetState_DrawMode(TObjectId argOId, TDrawMode argValue);
```

**Type:** [TDrawMode](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TDrawMode.md) · **Access:** read/write · **Index:** `argOId` ([TObjectId](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectId.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### DrillLayerPairsCount

This property returns the number of drill layer pairs for the board. A drill layer pair is represented by the [`IPCB_DrillLayerPair`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) interface.

```csharp
int GetState_DrillLayerPairsCount();
```

**Type:** `int` · **Access:** read-only

Read each pair with [`LayerPair`](#layerpair), at indexes 0 to `DrillLayerPairsCount` - 1.

**See also:** [IPCB_Board.LayerPair](#layerpair), [IPCB_DrillLayerPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md)

### ECOOptions

This property returns you the [`IPCB_ECOOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ECOOptions.md) interface which represents the Options for the Engineering Order Change facility in the PCB editor.

```csharp
IPCB_ECOOptions GetState_ECOOptions();
```

**Type:** [IPCB_ECOOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ECOOptions.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_ECOOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ECOOptions.md)

### FileName

The `FileName` property denotes the filename of the PCB document that the `IPCB_Board` interface is associated with. The Filename property is read only, which means you can retrieve the filename string only.

```csharp
string GetState_FileName();
```

**Type:** `string` · **Access:** read-only

**Examples:** [Extension_CreatePCBLib](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_CreatePCBLib/Source%20Code/Commands.cs#L104)

### GerberOptions

This property returns you the [`IPCB_GerberOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GerberOptions.md) interface which represents the Options for the Gerbers facility in the PCB editor.

```csharp
IPCB_GerberOptions GetState_GerberOptions();
```

**Type:** [IPCB_GerberOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GerberOptions.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_GerberOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GerberOptions.md)

### InternalPlane1NetName

The net name of internal plane 1.

```csharp
string GetState_InternalPlane1NetName();
void SetState_InternalPlane1NetName(string argNetName);
```

**Type:** `string` · **Access:** read/write

Empty when the board has no internal plane 1; setting the property then has no effect.

### InternalPlane2NetName

The net name of internal plane 2.

```csharp
string GetState_InternalPlane2NetName();
void SetState_InternalPlane2NetName(string argNetName);
```

**Type:** `string` · **Access:** read/write

Empty when the board has no internal plane 2; setting the property then has no effect.

### InternalPlane3NetName

The net name of internal plane 3.

```csharp
string GetState_InternalPlane3NetName();
void SetState_InternalPlane3NetName(string argNetName);
```

**Type:** `string` · **Access:** read/write

Empty when the board has no internal plane 3; setting the property then has no effect.

### InternalPlane4NetName

The net name of internal plane 4.

```csharp
string GetState_InternalPlane4NetName();
void SetState_InternalPlane4NetName(string argNetName);
```

**Type:** `string` · **Access:** read/write

Empty when the board has no internal plane 4; setting the property then has no effect.

### InternalPlaneNetName

This property returns or sets the net name for the targeted internal plane.

```csharp
string GetState_InternalPlaneNetName(V7_LayerBase argL);
void SetState_InternalPlaneNetName(V7_LayerBase argL, string argNetName);
```

**Type:** `string` · **Access:** read/write · **Index:** `argL` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

Empty when the layer is not an internal plane in the board's layer stack; setting the property then has no effect.

### LayerColor

The display colour of a layer.

```csharp
uint GetState_LayerColor(TV6_Layer argL);
```

**Type:** `uint` · **Access:** read-only · **Index:** `argL` ([TV6_Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

The colour comes from the application's layer colour settings, so it is the same for every board.

### LayerIsDisplayed

Whether a layer is shown in the board's view.

```csharp
bool GetState_LayerIsDisplayed(V7_LayerBase argL);
void SetState_LayerIsDisplayed(V7_LayerBase argL, bool argB);
```

**Type:** `bool` · **Access:** read/write · **Index:** `argL` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

Setting the property has no effect for a layer that is not in the board's layer stack, or when the board has no view.

**See also:** [IPCB_Board.LayerIsUsed](#layerisused)

### LayerIsUsed

This property retrieves or sets the boolean value for whether the layer is used by primitives or not. Normally when a layer has primitives (design objects) on it, the layer is used.

```csharp
bool GetState_LayerIsUsed(V7_LayerBase argL);
void SetState_LayerIsUsed(V7_LayerBase argL, bool argB);
```

**Type:** `bool` · **Access:** read/write · **Index:** `argL` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

Reads `false` for a layer that is not in the board's layer stack; setting the property then has no effect.

After creating a layer with [`IPCB_MasterLayerStack.CreateLayer`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MasterLayerStack.md#createlayer), the examples make it appear by setting `LayerIsUsed` and then [`LayerIsDisplayed`](#layerisdisplayed) to `true`.

**Example:** Check which layers of the current board are used and displayed.

```csharp
using PCB;

IPCB_Board pcbBoard = PCB.GlobalVars.PCBServer?.GetCurrentPCBBoard();
if (pcbBoard == null)
    return;
// Check for each signal layer for used/display setting
for (TV6_Layer layer = TV6_Layer.eV6_TopLayer; layer <= TV6_Layer.eV6_MultiLayer; layer++)
    if (pcbBoard.GetState_LayerIsUsed(new V7_Layer(layer)))
        if (pcbBoard.GetState_LayerIsDisplayed(new V7_Layer(layer)))
        {
            // do something
        }
```

### LayerPair

This property returns you the layer pair associated with the [`IPCB_DrillLayerPair`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) interface. A drill layer pair has two drill layers.

```csharp
IPCB_DrillLayerPair GetState_LayerPair(int argI);
```

**Type:** [IPCB_DrillLayerPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) · **Access:** read-only · **Index:** `argI` (`int`)

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

Null when the index is outside 0 to [`DrillLayerPairsCount`](#drilllayerpairscount) - 1.

### LayerPairByPair

Deprecated: use [`LayerPairByPairEx`](#layerpairbypairex).

```csharp
IPCB_DrillLayerPair GetState_LayerPairByPair(TV6_Layer argLowLay, TV6_Layer argHighLay);
```

**Type:** [IPCB_DrillLayerPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) · **Access:** read-only · **Index:** `argLowLay` ([TV6_Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md)), `argHighLay` ([TV6_Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### LayerPairByPairEx

*No description yet.*

```csharp
IPCB_DrillLayerPair GetState_LayerPairByPairEx(V7_LayerBase argLowLayer, V7_LayerBase argHighLayer, TDrillLayerPairType argDrillLayerPairType);
```

**Type:** [IPCB_DrillLayerPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md) · **Access:** read-only · **Index:** `argLowLayer` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md)), `argHighLayer` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md)), `argDrillLayerPairType` ([TDrillLayerPairType](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TDrillLayerPairType.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### LayerStack

The layer stack property fetches the [`IPCB_LayerStack`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack.md) interface for the current PCB document. The Layer stack only stores copper layers (signal and internal planes).

```csharp
IPCB_LayerStack GetState_LayerStack();
```

**Type:** [IPCB_LayerStack](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**Example:** List the copper layers in the layer stack of the current board.

```csharp
using PCB;

IPCB_Board pcbBoard = PCB.GlobalVars.PCBServer?.GetCurrentPCBBoard();
if (pcbBoard == null)
    return;
// Note that the Layer stack only stores existing copper based layers.
// But you can use the LayerObject method to fetch all layers.
IPCB_LayerStack theLayerStack = pcbBoard.GetState_LayerStack();
if (theLayerStack == null)
    return;
string ls = "";
IPCB_LayerObject layerObj = theLayerStack.First(TLayerClassID.eLayerClass_Electrical);
while (layerObj != null)
{
    ls = ls + EDP.Utils.LayerToString(new V7_Layer(layerObj.V6_LayerID())) + "\r\n";
    layerObj = theLayerStack.Next(TLayerClassID.eLayerClass_Electrical, layerObj);
}
DXP.Utils.ShowInfo("The Layer Stack has :\r\n" + ls, "Layer stack");
```

**See also:** [IPCB_LayerStack](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack.md), [IPCB_LayerObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObject.md)

### LayerStack_V7

The master layer stack of the board, the same stack as [`MasterStack`](#masterstack), as an [`IPCB_LayerStack_V7`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack_V7.md).

```csharp
IPCB_LayerStack_V7 GetState_LayerStack_V7();
```

**Type:** [IPCB_LayerStack_V7](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack_V7.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

The examples walk its layers with [`IPCB_LayerStack_V7.FirstLayer`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack_V7.md#firstlayer) and [`IPCB_LayerStack_V7.NextLayer`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack_V7.md#nextlayer), change a layer's [`IPCB_LayerObject_V7.IsDisplayed`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObject_V7.md#isdisplayed), and then call [`Update_PCBGraphicalView`](#update_pcbgraphicalview) to show the change.

### MainGraphicalView

The graphical view of the board.

```csharp
IPCB_GraphicalView GetState_MainGraphicalView();
```

**Type:** [IPCB_GraphicalView](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GraphicalView.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

The examples read and set the 3D camera of this view with [`IPCB_GraphicalView.GetState_Camera`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GraphicalView.md#getstate_camera) and [`IPCB_GraphicalView.Camera`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GraphicalView.md#camera).

### MasterStack

*No description yet.*

```csharp
IPCB_MasterLayerStack GetState_MasterStack();
```

**Type:** [IPCB_MasterLayerStack](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MasterLayerStack.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### MechanicalPairs

The mechanical layer pairs of the board, as an [`IPCB_MechanicalLayerPairs`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MechanicalLayerPairs.md).

```csharp
IPCB_MechanicalLayerPairs GetState_MechanicalPairs();
```

**Type:** [IPCB_MechanicalLayerPairs](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MechanicalLayerPairs.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

There are 16 general purpose mechanical layers for defining the board layout, placing dimensions on, including fabrication details on, or any other mechanical details the design requires.

The purpose of the [`IPCB_MechanicalLayerPairs`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MechanicalLayerPairs.md) Interface is to provide which Mechanical layers are paired to one another.

When a component incorporates objects on one or more Mechanical layers which have been paired, the Layer property of those objects changes when the Layer property of the component is toggled (between the Top and Bottom layers), just like objects on the non-Mechanical layers which have always been paired to one another, along with the Top and Bottom (copper) layers, the Top and Bottom Overlay layers, the Top and Bottom Paste Mask layers, and the Top and Bottom Solder Mask layers.

### MeshViewMode

*No description yet.*

```csharp
TPCBMeshViewMode GetState_MeshViewMode(int argID);
void SetState_MeshViewMode(int argID, TPCBMeshViewMode argViewMode);
```

**Type:** [TPCBMeshViewMode](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TPCBMeshViewMode.md) · **Access:** read/write · **Index:** `argID` (`int`)

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### Navigate_HighlightObjectList

Highlights the objects in the board's highlight list with the given highlight methods.

```csharp
void SetState_Navigate_HighlightObjectList(THighlightMethodSet argHighlightMethods, bool argClearExisting);
```

**Type:** `bool` · **Access:** write-only · **Index:** `argHighlightMethods` ([THighlightMethodSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/edp/THighlightMethodSet.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

The assigned value says whether the existing highlighting is cleared first.

**See also:** [IPCB_Board.AddObjectToHighlightObjectList](#addobjecttohighlightobjectlist)

**Examples:** [Extension_PlacePad](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlacePad/Source%20Code/PlacePadCommand.cs#L47)

### OutputOptions

This property returns you the [`IPCB_OutputOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OutputOptions.md) interface which represents the Options for the Output facility in the PCB editor.

```csharp
IPCB_OutputOptions GetState_OutputOptions();
```

**Type:** [IPCB_OutputOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OutputOptions.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_OutputOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OutputOptions.md)

### PadViaCache

*No description yet.*

```csharp
IPCB_PadViaLibrary GetState_PadViaCache();
```

**Type:** [IPCB_PadViaLibrary](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibrary.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### PadViaLibrary

*No description yet.*

```csharp
IPCB_PadViaLibrary GetState_PadViaLibrary();
```

**Type:** [IPCB_PadViaLibrary](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibrary.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### PCB3DMovieManager

*No description yet.*

```csharp
IPCB_3DMovieManager GetState_PCB3DMovieManager();
```

**Type:** [IPCB_3DMovieManager](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_3DMovieManager.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### PCBSheet

This property returns the [`IPCB_Sheet`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Sheet.md) interface which is represented by the sheet workspace. A sheet encapsulates the sheet borders, the fabrication and assembly information, and the board outline.

```csharp
IPCB_Sheet GetState_PCBSheet();
```

**Type:** [IPCB_Sheet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Sheet.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_Sheet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Sheet.md)

### PinPairsManager

The manager of the board's pin pairs.

```csharp
IPCB_PinPairsManager GetState_PinPairsManager();
```

**Type:** [IPCB_PinPairsManager](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PinPairsManager.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

The examples check the result for null, create a pin pair with [`IPCB_PinPairsManager.CreateFromPinsDescriptors`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PinPairsManager.md#createfrompinsdescriptors) from a descriptor such as `"U1-16|U4-23"`, and then call [`IPCB_PinPairsManager.InvalidateAll`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PinPairsManager.md#invalidateall).

### PlacerOptions

This property returns you the [`IPCB_AdvancedPlacerOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AdvancedPlacerOptions.md) interface which represents the Options for the Placement facility in the PCB editor.

```csharp
IPCB_AdvancedPlacerOptions GetState_PlacerOptions();
```

**Type:** [IPCB_AdvancedPlacerOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AdvancedPlacerOptions.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_AdvancedPlacerOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AdvancedPlacerOptions.md)

### PolygonNameTemplate

*No description yet.*

```csharp
TPolygonNameTemplates GetState_PolygonNameTemplate();
void SetState_PolygonNameTemplate(TPolygonNameTemplates argTemplate);
```

**Type:** [TPolygonNameTemplates](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TPolygonNameTemplates.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### PrinterOptions

This property returns you the [`IPCB_PrinterOptions`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrinterOptions.md) interface which represents the Options for the Printer setup facility in the PCB editor.

```csharp
IPCB_PrinterOptions GetState_PrinterOptions();
```

**Type:** [IPCB_PrinterOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrinterOptions.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_PrinterOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrinterOptions.md)

### RouteToolPathLayer

*No description yet.*

```csharp
V7_LayerBase GetState_RouteToolPathLayer();
void SetState_RouteToolPathLayer(V7_LayerBase argLayer);
```

**Type:** [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### RoutingOptions

*No description yet.*

```csharp
IPCB_BoardRoutingOptions GetState_RoutingOptions();
```

**Type:** [IPCB_BoardRoutingOptions](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardRoutingOptions.md) · **Access:** read-only

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### SelectecObject

This property represents the indexed selected object found on the PCB document. This is to be used in conjunction with the [`SelectecObjectCount`](#selectecobjectcount) property.

```csharp
IPCB_Primitive GetState_SelectecObject(int argI);
```

**Type:** [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) · **Access:** read-only · **Index:** `argI` (`int`)

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

Null when the selected item at the index is not a primitive.

### SelectecObjectCount

This property represents the number of selected objects found on the PCB document. This is to be used in conjunction with the [`SelectecObject`](#selectecobject) property.

```csharp
int GetState_SelectecObjectCount();
```

**Type:** `int` · **Access:** read-only

**See also:** [IPCB_Board.SelectecObject](#selectecobject)

### SnapGridSize

The `SnapGridSize` property sets the X and Y values for the Snap Grid simultaneously. If you want to have different X and Y values for this snap grid, use the [`SnapGridSizeX`](#snapgridsizex) and [`SnapGridSizeY`](#snapgridsizey) properties.

```csharp
double GetState_SnapGridSize();
void SetState_SnapGridSize(double argValue);
```

**Type:** `double` · **Access:** read/write

**See also:** [IPCB_Board.SnapGridSizeX](#snapgridsizex), [IPCB_Board.SnapGridSizeY](#snapgridsizey)

### SnapGridSizeX

This property retrieves or sets the Snap Grid size X value. To set both X and Y values simultaneously for the Snap Grid, use the [`SnapGridSize`](#snapgridsize) property.

```csharp
double GetState_SnapGridSizeX();
void SetState_SnapGridSizeX(double argValue);
```

**Type:** `double` · **Access:** read/write

**See also:** [IPCB_Board.SnapGridSizeY](#snapgridsizey), [IPCB_Board.SnapGridSize](#snapgridsize)

### SnapGridSizeY

This property retrieves or sets the Snap Grid size Y value. To set both X and Y values simultaneously for the Snap Grid, use the [`SnapGridSize`](#snapgridsize) property.

```csharp
double GetState_SnapGridSizeY();
void SetState_SnapGridSizeY(double argValue);
```

**Type:** `double` · **Access:** read/write

**See also:** [IPCB_Board.SnapGridSizeX](#snapgridsizex), [IPCB_Board.SnapGridSize](#snapgridsize)

### SnapGridUnit

The `SnapGridUnit` property retrieves or sets the measurement unit for the Snap Grid Unit. It can be in Imperial or Metric units.

```csharp
TUnit GetState_SnapGridUnit();
void SetState_SnapGridUnit(TUnit argValue);
```

**Type:** [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md)

### SwitchOutputCapabilityMode

*No description yet.*

```csharp
void SetState_SwitchOutputCapabilityMode(bool argOutputCapability);
```

**Type:** `bool` · **Access:** write-only

### SystemValid

*No description yet.*

```csharp
bool GetState_SystemValid(string argProcessorName);
void SetState_SystemValid(string argProcessorName, bool argValid);
```

**Type:** `bool` · **Access:** read/write · **Index:** `argProcessorName` (`string`)

### TrackGridSize

This property retrieves or sets the track grid size in both X and Y directions simultaneously.

```csharp
double GetState_TrackGridSize();
void SetState_TrackGridSize(double argValue);
```

**Type:** `double` · **Access:** read/write

**See also:** [IPCB_Board.ViaGridSize](#viagridsize)

### ViaGridSize

This property retrieves or sets the via grid size in both X and Y directions simultaneously.

```csharp
double GetState_ViaGridSize();
void SetState_ViaGridSize(double argValue);
```

**Type:** `double` · **Access:** read/write

**See also:** [IPCB_Board.TrackGridSize](#trackgridsize)

### ViewConfigColor2D

*No description yet.*

```csharp
uint GetState_ViewConfigColor2D(V7_LayerBase argLayer);
```

**Type:** `uint` · **Access:** read-only · **Index:** `argLayer` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### ViewConfigColor3D

*No description yet.*

```csharp
uint GetState_ViewConfigColor3D(V7_LayerBase argLayer);
```

**Type:** `uint` · **Access:** read-only · **Index:** `argLayer` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### ViewConfigFromString

*No description yet.*

```csharp
bool SetState_ViewConfigFromString(string argConfigType, string argConfig);
```

**Type:** `string` · **Access:** write-only · **Index:** `argConfigType` (`string`)

### ViewConfigFromString_ForceRebuild

*No description yet.*

```csharp
bool SetState_ViewConfigFromString_ForceRebuild(string argConfigType, string argConfig);
```

**Type:** `string` · **Access:** write-only · **Index:** `argConfigType` (`string`)

### ViewConfigIs3D

*No description yet.*

```csharp
bool GetState_ViewConfigIs3D();
```

**Type:** `bool` · **Access:** read-only

### ViewConfigOpacity2D

*No description yet.*

```csharp
float GetState_ViewConfigOpacity2D(V7_LayerBase argLayer, TObjectId argObjectId);
```

**Type:** `float` · **Access:** read-only · **Index:** `argLayer` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md)), `argObjectId` ([TObjectId](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectId.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### ViewConfigOpacity3D

*No description yet.*

```csharp
float GetState_ViewConfigOpacity3D(V7_LayerBase argLayer);
```

**Type:** `float` · **Access:** read-only · **Index:** `argLayer` ([V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md))

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### ViewConfigTopSolderMaskColor3D

*No description yet.*

```csharp
uint GetState_ViewConfigTopSolderMaskColor3D();
```

**Type:** `uint` · **Access:** read-only

### Viewport

*No description yet.*

```csharp
IPCB_Viewport GetState_Viewport();
void SetState_Viewport(IPCB_Viewport argValue);
```

**Type:** [IPCB_Viewport](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Viewport.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

### VisibleGridMultFactor

*No description yet.*

```csharp
double GetState_VisibleGridMultFactor();
void SetState_VisibleGridMultFactor(double argMultFact);
```

**Type:** `double` · **Access:** read/write

### VisibleGridSize

The size of the (fine) visible grid. This grid is used for reference purposes and there are two visible grids.

```csharp
double GetState_VisibleGridSize();
void SetState_VisibleGridSize(double argValue);
```

**Type:** `double` · **Access:** read/write

**See also:** [IPCB_Board.BigVisibleGridSize](#bigvisiblegridsize)

### VisibleGridUnit

The measurement unit of the (fine) visible grid, imperial or metric. There are two visible grids to use for reference purposes.

```csharp
TUnit GetState_VisibleGridUnit();
void SetState_VisibleGridUnit(TUnit argValue);
```

**Type:** [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md) · **Access:** read/write

The accessors are extension methods of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_Board.BigVisibleGridUnit](#bigvisiblegridunit), [TUnit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TUnit.md)

### Window

This property returns the raw Windows handle for a window handle of a PCB document in Altium Designer.

```csharp
uint GetState_Window();
```

**Type:** `uint` · **Access:** read-only

Returns 0 when the document is not open in a PCB editor view.

### WorldXOrigin

The X coordinate of the world origin of the board, in internal units (10,000 per mil).

```csharp
int GetState_WorldXOrigin();
void SetState_WorldXOrigin(int argValue);
```

**Type:** `int` · **Access:** read/write

### WorldYOrigin

The Y coordinate of the world origin of the board, in internal units (10,000 per mil).

```csharp
int GetState_WorldYOrigin();
void SetState_WorldYOrigin(int argValue);
```

**Type:** `int` · **Access:** read/write

### XCursor

The X coordinate of the cursor in the current PCB view, in internal units (10,000 per mil).

```csharp
int GetState_XCursor();
void SetState_XCursor(int argValue);
```

**Type:** `int` · **Access:** read/write

Reads 0 when there is no current PCB view. Setting the property moves the cursor in that view.

**Examples:** [Extension_PlacePad](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlacePad/Source%20Code/PlacePadCommand.cs#L142)

### XOrigin

This property sets or retrieves the X coordinate of the absolute origin of the board, in internal units (10,000 per mil).

```csharp
int GetState_XOrigin();
void SetState_XOrigin(int argValue);
```

**Type:** `int` · **Access:** read/write

To get a coordinate relative to the board origin, the examples subtract `XOrigin` from the absolute coordinate.

### YCursor

The Y coordinate of the cursor in the current PCB view, in internal units (10,000 per mil).

```csharp
int GetState_YCursor();
void SetState_YCursor(int argValue);
```

**Type:** `int` · **Access:** read/write

Reads 0 when there is no current PCB view. Setting the property moves the cursor in that view.

**Examples:** [Extension_PlacePad](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlacePad/Source%20Code/PlacePadCommand.cs#L143)

### YOrigin

This property sets or retrieves the Y coordinate of the absolute origin of the board, in internal units (10,000 per mil).

```csharp
int GetState_YOrigin();
void SetState_YOrigin(int argValue);
```

**Type:** `int` · **Access:** read/write

To get a coordinate relative to the board origin, the examples subtract `YOrigin` from the absolute coordinate.

## Methods

| Method | Returns | Description |
| --- | --- | --- |
| [AddLayerPair](#addlayerpair) | `void` |  |
| [AddMesh](#addmesh) | `int` |  |
| [AddObjectToHighlightObjectList](#addobjecttohighlightobjectlist) | `void` | Adds a primitive to the board's list of objects to highlight. |
| [AddPCBObject](#addpcbobject) | `void` | Adds an object created with [`IPCB_ServerInterface.PCBObjectFactory`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbobjectfactory) to the board. |
| [AddPolygonMesh](#addpolygonmesh) | `int` |  |
| [AnalyzeNet](#analyzenet) | `void` | This method analyzes a supplied net object in the form of [`IPCB_Net`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Net.md) interface. |
| [BoardIterator_Create](#boarditerator_create) | [IPCB_BoardIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardIterator.md) | The `BoardIterator_Create` method creates a board iterator which is used to search for design objects on the PCB document. |
| [BoardIterator_Destroy](#boarditerator_destroy) | `void` | The `BoardIterator_Destroy` method destroys the board iterator object after it has been used to conduct a search on the PCB document for specified board objects. |
| [ChooseLocation](#chooselocation) | `bool` | The method returns you the X1 and Y1 coordinates of the PCB Document after you have clicked on a location on the PCB document. |
| [ChooseRectangleByCorners](#chooserectanglebycorners) | `bool` | The `ChooseRectangleByCorners` method prompts you twice to choose the two sets of coordinates that define a boundary rectangle on the PCB document. |
| [ClassNameIsUnique](#classnameisunique) | `bool` |  |
| [CleanNet](#cleannet) | `void` | Cleans up a net by re-organizing and re-arranging its net topology. |
| [ClearMeshes](#clearmeshes) | `void` |  |
| [ClearUndoRedo](#clearundoredo) | `void` | Has no effect. |
| [ConnectivelyValidateNets](#connectivelyvalidatenets) | `void` | This method validates the connectivity of nets on the PCB document. |
| [ContextMenuObjectCount](#contextmenuobjectcount) | `int` | Returns the number of objects of the given kind that the context menu of the board's view applies to. |
| [CreateBoardOutline](#createboardoutline) | [IPCB_BoardOutline](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md) | Creates a board outline with default settings, makes it the outline of the board and returns it. |
| [DeleteMesh](#deletemesh) | `bool` |  |
| [DifferentialPairNameIsUnique](#differentialpairnameisunique) | `bool` |  |
| [DispatchMessage](#dispatchmessage) | `void` | Sends a PCB message with a source, a destination and message data to the board's message handlers. |
| [DoRedo](#doredo) | `void` | Has no effect. |
| [DoUndo](#doundo) | `void` | Has no effect. |
| [ElectricalLayerIterator](#electricallayeriterator) | [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md) |  |
| [ElectricalLayers](#electricallayers) | [IPCB_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerSet.md) |  |
| [EnableAllPrimitives](#enableallprimitives) | `void` | Enables or disables all primitives on the PCB document. |
| [EndUndo](#endundo) | `void` | Has no effect. |
| [FindDominantRuleForObject](#finddominantruleforobject) | [IPCB_Rule](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Rule.md) | This method returns the dominant specified rule for the primitive which is targeted by this rule. |
| [FindDominantRuleForObjectPair](#finddominantruleforobjectpair) | [IPCB_Rule](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Rule.md) | This method returns the dominant specified binary rule for the two primitives which are targeted by this rule. |
| [FindLinkedBoardLibrary](#findlinkedboardlibrary) | [IPCB_PadViaLibrary](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibrary.md) |  |
| [FindLinkedBoardTemplate](#findlinkedboardtemplate) | [IPCB_PadViaTemplate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaTemplate.md) | Returns the pad and via template that a primitive, for example a pad, is linked to. |
| [GenerateUniqueID](#generateuniqueid) | `string` |  |
| [GetLastClickedObject](#getlastclickedobject) | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) |  |
| [GetMeshPatchFromPoint](#getmeshpatchfrompoint) | `bool` |  |
| [GetObjectAtCursor](#getobjectatcursor) | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | Asks the user to click on the PCB document and returns the design object at the clicked point. |
| [GetObjectAtXYAskUserIfAmbiguous](#getobjectatxyaskuserifambiguous) | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | This method returns you the specified object with the specified X and Y coordinates which could be retrieved by the [`ChooseLocation`](#chooselocation) method for example. |
| [GetPcbComponentByRefDes](#getpcbcomponentbyrefdes) | [IPCB_Component](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Component.md) | Returns the component with the given designator, or null when the board has none. |
| [GetPrimitiveCount](#getprimitivecount) | `int` | Returns the number of primitives that match the object kinds, the layers and the search method supplied. |
| [GetPrimitiveCounter](#getprimitivecounter) | [IPCB_PrimitiveCounter](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrimitiveCounter.md) | Returns the primitive counter of the board, which gives the object count, hole count and string count of the PCB document. |
| [GetState_ViewConfigAsString](#getstate_viewconfigasstring) | `bool` |  |
| [GetState_ZTopBottom](#getstate_ztopbottom) | `void` |  |
| [GraphicalView_ViewportRect](#graphicalview_viewportrect) | [CoordRect](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/CoordRect.md) |  |
| [GraphicalView_ZoomOnRect](#graphicalview_zoomonrect) | `void` |  |
| [GraphicalView_ZoomRedraw](#graphicalview_zoomredraw) | `void` | Redraws the board's view. |
| [HasServerDocument](#hasserverdocument) | `bool` |  |
| [HideHoleSymbols](#hideholesymbols) | `void` |  |
| [HidePCBObject](#hidepcbobject) | `void` | This method hides the specified object on the PCB document from view. |
| [InternalPlaneLayerIterator](#internalplanelayeriterator) | [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md) | Returns an iterator over the internal plane layers of the board. |
| [InvalidatePlane](#invalidateplane) | `void` |  |
| [InvalidateScopeTester](#invalidatescopetester) | `void` |  |
| [InvertPCBObject](#invertpcbobject) | `void` | This method inverts the colors of the specified object on the PCB document. |
| [IsEmptyHoleToleranceValue](#isemptyholetolerancevalue) | `bool` |  |
| [LayerIterator](#layeriterator) | [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md) |  |
| [LayerIterator_IncludeNonEditable](#layeriterator_includenoneditable) | [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md) |  |
| [LayerName](#layername) | `string` | Returns the name of a layer. |
| [LayerPositionInSet](#layerpositioninset) | `int` | This method returns a positive value with 1 being the first layer and a higher number being the lower layer in the list. |
| [LinkToTemplate](#linktotemplate) | `void` |  |
| [LoadMeshFile](#loadmeshfile) | `int` |  |
| [MechanicalLayerIterator](#mechanicallayeriterator) | [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md) | Returns an iterator over the mechanical layers of the board. |
| [MechanicalLayers](#mechanicallayers) | [IPCB_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerSet.md) |  |
| [Navigate_RedrawChangedObjectsInBoard](#navigate_redrawchangedobjectsinboard) | `void` | Has no effect. |
| [NetNameIsUnique](#netnameisunique) | `bool` | Returns whether no other net on the board has the given name. |
| [NewUndo](#newundo) | `void` | Has no effect. |
| [PrimPrimDistance](#primprimdistance) | `int` | Returns the distance between two primitives, in internal units (10,000 per mil). |
| [RebuildBoardOutline](#rebuildboardoutline) | `void` | Rebuilds the board outline from the given defining layer. |
| [RebuildPadCaches](#rebuildpadcaches) | `void` |  |
| [RebuildSplitBoardRegions](#rebuildsplitboardregions) | `void` |  |
| [RecreateHandles](#recreatehandles) | `void` |  |
| [ReDrawToDC](#redrawtodc) | `void` |  |
| [RemovePCBObject](#removepcbobject) | `void` | Removes an object from the board without destroying it. |
| [ReportStackupCompatibilityForEmbeddedBoards](#reportstackupcompatibilityforembeddedboards) | `bool` |  |
| [RuleNameUnique](#rulenameunique) | `bool` | Returns whether no other rule on the board has the given name. |
| [RunBatchDesignRuleCheck](#runbatchdesignrulecheck) | `bool` |  |
| [SelectedObjects_Add](#selectedobjects_add) | `void` |  |
| [SelectedObjects_BeginUpdate](#selectedobjects_beginupdate) | `void` |  |
| [SelectedObjects_Clear](#selectedobjects_clear) | `void` |  |
| [SelectedObjects_EndUpdate](#selectedobjects_endupdate) | `void` |  |
| [SelectedObjectsCount](#selectedobjectscount) | `int` |  |
| [SelectNewViewConfiguration](#selectnewviewconfiguration) | `bool` |  |
| [SetState_DocumentHasChanged](#setstate_documenthaschanged) | `void` | This method forces the document has changed flag to true denoting that the document has been marked dirty so that when you close this document, you are prompted to save this document. |
| [SetState_SaveCurrentStatusOfObjectsInBoard](#setstate_savecurrentstatusofobjectsinboard) | `void` | Has no effect. |
| [SetState_ViewManager_FilterChanging](#setstate_viewmanager_filterchanging) | `void` | Tells the board's views that the object filter is changing. |
| [ShowHoleSymbols](#showholesymbols) | `void` |  |
| [ShowPCBObject](#showpcbobject) | `void` | This method makes this hidden PCB object visible on the PCB document. |
| [SignalLayerIterator](#signallayeriterator) | [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md) |  |
| [SpatialIterator_Create](#spatialiterator_create) | [IPCB_SpatialIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_SpatialIterator.md) | This method creates a spatial iterator which conducts a search within defined boundary on a PCB document. |
| [SpatialIterator_Destroy](#spatialiterator_destroy) | `void` | This method destroys the spatial iterator object after it has finished conducting a search within a defined boundary on the PCB document. |
| [UnlinkFromTemplate](#unlinkfromtemplate) | `void` |  |
| [Update_PCBGraphicalView](#update_pcbgraphicalview) | `void` | Updates the board's view. |
| [UpdateBoardOutline](#updateboardoutline) | `void` | This method refreshes the Board outline on the PCB document for example if you have programmatically altered the outline, it is a good time to invoke the `UpdateBoardOutline` method to refresh the PCB… |
| [UpdateCachedVCSRevisionNumberSpecialStrings](#updatecachedvcsrevisionnumberspecialstrings) | `void` |  |
| [ValidateInvalidPlanes](#validateinvalidplanes) | `void` |  |
| [ValidateScopeTester](#validatescopetester) | `void` |  |
| [ViewManager_FullUpdate](#viewmanager_fullupdate) | `void` | This method invokes a full update of all panels that are associated with the current PCB document. |
| [ViewManager_GraphicallyInvalidatePrimitive](#viewmanager_graphicallyinvalidateprimitive) | `void` | This method forces a repaint of the targeted design object (PCBObject parameter) on the PCB document. |
| [ViewManager_UpdateLayerTabs](#viewmanager_updatelayertabs) | `void` | Refreshes the layer tabs of the board's view. |
| [VisibleLayers](#visiblelayers) | [IPCB_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerSet.md) |  |
| [WindowBoundingRectangle](#windowboundingrectangle) | [CoordRect](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/CoordRect.md) | This method returns the coordinates of the bounds of a PCB window. |

### AddLayerPair

*No description yet.*

```csharp
void AddLayerPair(V7_LayerBase argLowLayer, V7_LayerBase argHighLayer);
void AddLayerPair(IV7_Layer argLowLayer, IV7_Layer argHighLayer);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argLowLayer` | [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) | value |
| `argHighLayer` | [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### AddMesh

*No description yet.*

```csharp
int AddMesh(string argMeshString);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argMeshString` | `string` | value |

**Returns:** `int`

### AddObjectToHighlightObjectList

Adds a primitive to the board's list of objects to highlight.

```csharp
void AddObjectToHighlightObjectList(IPCB_Primitive argiPrimitive);
void AddObjectToHighlightObjectList(object argiPrimitive);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argiPrimitive` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

**See also:** [IPCB_Board.Navigate_HighlightObjectList](#navigate_highlightobjectlist)

**Examples:** [Extension_PlacePad](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlacePad/Source%20Code/PlacePadCommand.cs#L46)

### AddPCBObject

Adds an object created with [`IPCB_ServerInterface.PCBObjectFactory`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbobjectfactory) to the board.

```csharp
void AddPCBObject(IPCB_Primitive argPCBObject);
void AddPCBObject(object argPCBObject);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPCBObject` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Does nothing when the object is null. When the board is fully loaded, references that the object holds to a component, net, polygon, dimension or coordinate of another board are cleared before it is added.

A rule ([`IPCB_Rule`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Rule.md)) without a name is named after its kind, for example Clearance. When the name is already used by another rule of the board, trailing digits and underscores are removed from it and an underscore and a number are appended that make it unique.

On a PCB library board, adding an [`IPCB_LibComponent`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LibComponent.md) inserts a copy of that footprint into the library; the object passed in is not added itself.

Make the change between [`IPCB_ServerInterface.PreProcess`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#preprocess) and [`IPCB_ServerInterface.PostProcess`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#postprocess), then refresh the document with [`ViewManager_FullUpdate`](#viewmanager_fullupdate) (see the example).

The examples assign the board to the new object ([`IPCB_Primitive.Board`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#board)) and set its layer and location before adding it, and redraw the view with [`GraphicalView_ZoomRedraw`](#graphicalview_zoomredraw) afterwards. Rules created with [`IPCB_ServerInterface.PCBRuleFactory`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbrulefactory) are added in the same way.

**Example:** Put a via with custom pad cache settings near the bottom left corner of the current board.

```csharp
using PCB;

IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer;
// Grab the board interface representing the current PCB document.
IPCB_Board board = pcbServer?.GetCurrentPCBBoard();
// If the board interface doesnt exist (no PCB document) then exit.
if (board == null)
    return;
// Initialize the systems in the PCB Editor.
pcbServer.PreProcess();
IPCB_Sheet sheet = board.GetState_PCBSheet();
// Create a Via object with the PCBObjectFactory method
// and then with the new attributes.
// Note we convert values in Mils to internal coordinates
// using the MilsToCoord function. All PCB objects locations and sizes
// have internal coordinate units where 1 mil = 10000 internal units
var via = pcbServer.PCBObjectFactory(TObjectId.eViaObject, TDimensionKind.eNoDimension, TObjectCreationMode.eCreate_Default) as IPCB_Via;
// obtain the bottom left coordinates of the board outline
CoordRect br = board.GetState_BoardOutline().BoundingRectangle();
via.SetState_XLocation(br.Left + EDP.Utils.MilsToCoord(500));
via.SetState_YLocation(br.Bottom + EDP.Utils.MilsToCoord(500));
// via.SetState_XLocation(sheet.GetState_SheetX() + EDP.Utils.MilsToCoord(500));
// via.SetState_YLocation(sheet.GetState_SheetY() + EDP.Utils.MilsToCoord(500));
via.SetState_Size(EDP.Utils.MilsToCoord(50));
via.SetState_HoleSize(EDP.Utils.MilsToCoord(20));
// Assign Via to the Top layer and bottom layer.
via.SetState_LowLayer(new V7_Layer(TV6_Layer.eV6_TopLayer));
via.SetState_HighLayer(new V7_Layer(TV6_Layer.eV6_BottomLayer));
// Set up Cache info for Via
// which consists mainly solder mask, paste mask and power plane values from design rules
V7_PadCache padCache = via.GetState_Cache();
padCache.ReliefAirGap = EDP.Utils.MilsToCoord(11);
padCache.PowerPlaneReliefExpansion = EDP.Utils.MilsToCoord(11);
padCache.PowerPlaneClearance = EDP.Utils.MilsToCoord(11);
padCache.ReliefConductorWidth = EDP.Utils.MilsToCoord(11);
padCache.SolderMaskExpansion = EDP.Utils.MilsToCoord(11);
padCache.SolderMaskExpansionValid = TCacheState.eCacheManual;
padCache.PasteMaskExpansion = EDP.Utils.MilsToCoord(11);
padCache.PasteMaskExpansionValid = TCacheState.eCacheManual;
// Assign the new pad cache to the via
via.SetState_Cache(padCache);
// Put the new Via object on the board
board.AddPCBObject(via);
// Finalize the systems in the PCB Editor.
pcbServer.PostProcess();
//Full PCB system update
board.ViewManager_FullUpdate();
// Refresh PCB screen
DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw");
```

**Examples:** [Extension_PcbLibComponentToSTEP](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PcbLibComponentToSTEP/Source%20Code/Commands.cs#L49), [Extension_PlaceAndMovePcbComponent](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlaceAndMovePcbComponent/Source%20Code/Commands.cs#L42), [Extension_PlacePad](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlacePad/Source%20Code/PlacePadCommand.cs#L44)

### AddPolygonMesh

*No description yet.*

```csharp
int AddPolygonMesh(IPCB_Contour argShape, int argz, uint argColor);
int AddPolygonMesh(object argShape, int argz, uint argColor);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argShape` | [IPCB_Contour](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Contour.md) | value |
| `argz` | `int` | value |
| `argColor` | `uint` | value |

**Returns:** `int`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### AnalyzeNet

This method analyzes a supplied net object in the form of [`IPCB_Net`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Net.md) interface.

```csharp
void AnalyzeNet(IPCB_Net argNet);
void AnalyzeNet(object argNet);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argNet` | [IPCB_Net](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Net.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Does nothing when the argument is null or is not a net.

### BoardIterator_Create

The `BoardIterator_Create` method creates a board iterator which is used to search for design objects on the PCB document. After the search has been conducted, invoke the [`BoardIterator_Destroy`](#boarditerator_destroy) method to destroy the board iterator object.

```csharp
IPCB_BoardIterator BoardIterator_Create();
```

**Returns:** [IPCB_BoardIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardIterator.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

The examples set the filters with [`IPCB_AbstractIterator.AddFilter_ObjectSet`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#addfilter_objectset), [`IPCB_AbstractIterator.AddFilter_LayerSet`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#addfilter_layerset) and [`IPCB_BoardIterator.AddFilter_Method`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardIterator.md#addfilter_method), walk the objects with [`IPCB_AbstractIterator.FirstPCBObject`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#firstpcbobject) and [`IPCB_AbstractIterator.NextPCBObject`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#nextpcbobject), and call [`BoardIterator_Destroy`](#boarditerator_destroy) in a `finally` block.

**Examples:** [Extension_BOMManager](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_BOMManager/Source%20Code/PcbBom.cs#L36), [Extension_PCBUndoRedo](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PCBUndoRedo/Source%20Code/Commands.cs#L40), [Extension_Pad_SolderMask](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_Pad_SolderMask/Source%20Code/Commands.cs#L32)

### BoardIterator_Destroy

The `BoardIterator_Destroy` method destroys the board iterator object after it has been used to conduct a search on the PCB document for specified board objects.

```csharp
void BoardIterator_Destroy(ref IPCB_BoardIterator argIterator);
void BoardIterator_Destroy(ref object argIterator);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argIterator` | [IPCB_BoardIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardIterator.md) | ref |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The variable passed by reference is set to null.

**Examples:** [Extension_BOMManager](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_BOMManager/Source%20Code/PcbBom.cs#L55), [Extension_PCBUndoRedo](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PCBUndoRedo/Source%20Code/Commands.cs#L54), [Extension_Pad_SolderMask](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_Pad_SolderMask/Source%20Code/Commands.cs#L53)

### ChooseLocation

The method returns you the X1 and Y1 coordinates of the PCB Document after you have clicked on a location on the PCB document. When this method is executed, you are prompted with a cross hair cursor (being in the interactive mode) and the status bar of the Altium Designer appears with the Prompt string.

```csharp
bool ChooseLocation(ref int argx1, ref int argy1, string argPrompt);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argx1` | `int` | ref |
| `argy1` | `int` | ref |
| `argPrompt` | `string` | value |

**Returns:** `bool`

Returns whether a location was chosen; if you press the Escape key, the method returns false.

The coordinates are in internal units (10,000 per mil) and are set to 0 before the prompt. When the board has no view, the method returns false without prompting.

**Example:** Let the user pick pairs of components on the current board.

```csharp
using PCB;

IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer;
int x = 0, y = 0;
try
{
    IPCB_Board board = pcbServer.GetCurrentPCBBoard();
    if (board == null)
    {
        DXP.Utils.ShowMessage("The Current Document is not a PCB Document.");
        return;
    }
    IPCB_Primitive comp1, comp2;
    do
    {
        board.ChooseLocation(ref x, ref y, "Choose Component1");
        comp1 = board.GetObjectAtXYAskUserIfAmbiguous(x, y, new PCB.TObjectSet { TObjectId.eComponentObject },
            PCBConstant.V6AllLayersSet, TEditingAction.eEditAction_Select);
        if (comp1 == null)
            return;
        board.ChooseLocation(ref x, ref y, "Choose Component2");
        comp2 = board.GetObjectAtXYAskUserIfAmbiguous(x, y, new PCB.TObjectSet { TObjectId.eComponentObject },
            PCBConstant.V6AllLayersSet, TEditingAction.eEditAction_Select);
        if (comp2 == null)
            return;
        // do what you want with comp1 and comp2
        // click on the board to exit or RMB
    } while ((comp1 != null) && (comp2 != null));
}
finally
{
    pcbServer.PostProcess();
    DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw");
}
```

### ChooseRectangleByCorners

The `ChooseRectangleByCorners` method prompts you twice to choose the two sets of coordinates that define a boundary rectangle on the PCB document. When this method is executed, the PCB is in interactive mode with a cross hair cursor, waiting for the user to click on the PCB document.

```csharp
bool ChooseRectangleByCorners(string argPrompt1, string argPrompt2, ref int argx1, ref int argy1, ref int argx2, ref int argy2);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPrompt1` | `string` | value |
| `argPrompt2` | `string` | value |
| `argx1` | `int` | ref |
| `argy1` | `int` | ref |
| `argx2` | `int` | ref |
| `argy2` | `int` | ref |

**Returns:** `bool`

The method returns you the X1,Y1, X2, Y2 values that can be used for calculations or for the spatial iterator for example and a true value.

However if the method was exit prematurely for example the user clicks Escape key or the right mouse button, the method returns a false value.

The coordinates are in internal units (10,000 per mil) and are set to 0 before the prompts. When the board has no view, the method returns false without prompting.

**Example:** Ask the user to choose a rectangle on the current board.

```csharp
using PCB;

int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
IPCB_Board board = PCB.GlobalVars.PCBServer?.GetCurrentPCBBoard();
if (board == null)
    return;
if (!board.ChooseRectangleByCorners("Choose first corner", "Choose final corner", ref x1, ref y1, ref x2, ref y2))
    return;
// The coordinates from the ChooseRectangleByCorners method
// can be used for a spatial iterator for example
```

**See also:** [IPCB_SpatialIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_SpatialIterator.md), [IPCB_Board.ChooseLocation](#chooselocation)

### ClassNameIsUnique

*No description yet.*

```csharp
bool ClassNameIsUnique(IPCB_ObjectClass argObjectClass, string argName);
bool ClassNameIsUnique(object argObjectClass, string argName);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argObjectClass` | [IPCB_ObjectClass](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ObjectClass.md) | value |
| `argName` | `string` | value |

**Returns:** `bool`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### CleanNet

Cleans up a net by re-organizing and re-arranging its net topology.

```csharp
void CleanNet(IPCB_Net argNet);
void CleanNet(object argNet);
```

| Parameter | Type | Passing | Description |
| --- | --- | --- | --- |
| `argNet` | [IPCB_Net](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Net.md) | value | The net to clean up. |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Does nothing when the argument is null or is not a net.

### ClearMeshes

*No description yet.*

```csharp
void ClearMeshes();
```

**Returns:** nothing (`void`)

### ClearUndoRedo

Has no effect.

```csharp
void ClearUndoRedo();
```

**Returns:** nothing (`void`)

### ConnectivelyValidateNets

This method validates the connectivity of nets on the PCB document.

```csharp
void ConnectivelyValidateNets();
```

**Returns:** nothing (`void`)

### ContextMenuObjectCount

Returns the number of objects of the given kind that the context menu of the board's view applies to.

```csharp
int ContextMenuObjectCount(TObjectId argObjectId);
int ContextMenuObjectCount(int argObjectId);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argObjectId` | [TObjectId](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectId.md) | value |

**Returns:** `int`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Returns 0 when the board has no view.

### CreateBoardOutline

Creates a board outline with default settings, makes it the outline of the board and returns it.

```csharp
IPCB_BoardOutline CreateBoardOutline();
```

**Returns:** [IPCB_BoardOutline](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

To adjust the parameters of the board outline, see the [`IPCB_BoardOutline`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md) interface.

**See also:** [IPCB_BoardOutline](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md)

### DeleteMesh

*No description yet.*

```csharp
bool DeleteMesh(int argID);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argID` | `int` | value |

**Returns:** `bool`

### DifferentialPairNameIsUnique

*No description yet.*

```csharp
bool DifferentialPairNameIsUnique(IPCB_DifferentialPair argDifferentialPair, string argName);
bool DifferentialPairNameIsUnique(object argDifferentialPair, string argName);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argDifferentialPair` | [IPCB_DifferentialPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DifferentialPair.md) | value |
| `argName` | `string` | value |

**Returns:** `bool`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### DispatchMessage

Sends a PCB message with a source, a destination and message data to the board's message handlers.

```csharp
void DispatchMessage(IPCB_Primitive argSource, IPCB_Primitive argDestination, ushort argMessageID, IPCB_Primitive argMessageData);
void DispatchMessage(object argSource, object argDestination, ushort argMessageID, object argMessageData);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argSource` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |
| `argDestination` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |
| `argMessageID` | `ushort` | value |
| `argMessageData` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

In the overload that takes [`IPCB_Primitive`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) arguments, a null source, destination or data object is sent as no object.

**Examples:** [Extension_PCBUndoRedo](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PCBUndoRedo/Source%20Code/Commands.cs#L37)

### DoRedo

Has no effect.

```csharp
void DoRedo();
```

**Returns:** nothing (`void`)

### DoUndo

Has no effect.

```csharp
void DoUndo();
```

**Returns:** nothing (`void`)

### ElectricalLayerIterator

*No description yet.*

```csharp
IPCB_LayerObjectIterator ElectricalLayerIterator();
```

**Returns:** [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### ElectricalLayers

*No description yet.*

```csharp
IPCB_LayerSet ElectricalLayers();
```

**Returns:** [IPCB_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerSet.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### EnableAllPrimitives

Enables or disables all primitives on the PCB document.

```csharp
void EnableAllPrimitives(bool argenable);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argenable` | `bool` | value |

**Returns:** nothing (`void`)

Sets [`IPCB_Primitive.Enabled`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabled) of every primitive, and of the board outline, to the argument, and clears the highlighting. On a PCB library board it applies to the primitives of all footprints.

### EndUndo

Has no effect.

```csharp
void EndUndo();
```

**Returns:** nothing (`void`)

### FindDominantRuleForObject

This method returns the dominant specified rule for the primitive which is targeted by this rule.

```csharp
IPCB_Rule FindDominantRuleForObject(IPCB_Primitive argPrimitive, TRuleKind argRuleKind);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPrimitive` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |
| `argRuleKind` | [TRuleKind](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TRuleKind.md) | value |

**Returns:** [IPCB_Rule](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Rule.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

Returns null when the primitive is null.

### FindDominantRuleForObjectPair

This method returns the dominant specified binary rule for the two primitives which are targeted by this rule.

```csharp
IPCB_Rule FindDominantRuleForObjectPair(IPCB_Primitive argPrimitive1, IPCB_Primitive argPrimitive2, TRuleKind argRuleKind);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPrimitive1` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |
| `argPrimitive2` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |
| `argRuleKind` | [TRuleKind](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TRuleKind.md) | value |

**Returns:** [IPCB_Rule](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Rule.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

Returns null when either primitive is null or belongs to another board.

### FindLinkedBoardLibrary

*No description yet.*

```csharp
IPCB_PadViaLibrary FindLinkedBoardLibrary(IPCB_Primitive argPrimitive);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPrimitive` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** [IPCB_PadViaLibrary](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibrary.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### FindLinkedBoardTemplate

Returns the pad and via template that a primitive, for example a pad, is linked to.

```csharp
IPCB_PadViaTemplate FindLinkedBoardTemplate(IPCB_Primitive argPrimitive);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPrimitive` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** [IPCB_PadViaTemplate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaTemplate.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

The examples treat null as "not linked"; otherwise they read the template's [`IPCB_PadViaTemplate.LibraryID`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaTemplate.md#libraryid), [`IPCB_PadViaTemplate.TemplateID`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaTemplate.md#templateid), [`IPCB_PadViaTemplate.RevisionID`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaTemplate.md#revisionid), [`IPCB_PadViaTemplate.TemplateName`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaTemplate.md#templatename) and [`IPCB_PadViaTemplate.TemplateDescription`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaTemplate.md#templatedescription).

### GenerateUniqueID

*No description yet.*

```csharp
string GenerateUniqueID();
```

**Returns:** `string`

### GetLastClickedObject

*No description yet.*

```csharp
IPCB_Primitive GetLastClickedObject(TObjectSet argObjectSet, TEditingAction argction);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argObjectSet` | [TObjectSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectSet.md) | value |
| `argction` | [TEditingAction](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TEditingAction.md) | value |

**Returns:** [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### GetMeshPatchFromPoint

*No description yet.*

```csharp
bool GetMeshPatchFromPoint(int argx, int argy, ref int argMeshID, ref int argPatchIndex0, ref int argPatchIndex1, ref int argPatchIndex2, ref int argIntersectionX, ref int argIntersectionY, ref int argIntersectionZ);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argx` | `int` | value |
| `argy` | `int` | value |
| `argMeshID` | `int` | ref |
| `argPatchIndex0` | `int` | ref |
| `argPatchIndex1` | `int` | ref |
| `argPatchIndex2` | `int` | ref |
| `argIntersectionX` | `int` | ref |
| `argIntersectionY` | `int` | ref |
| `argIntersectionZ` | `int` | ref |

**Returns:** `bool`

### GetObjectAtCursor

Asks the user to click on the PCB document and returns the design object at the clicked point.

```csharp
IPCB_Primitive GetObjectAtCursor(TObjectSet argObjectSet, TV6_LayerSet argLayerSet, string argStatusBarText);
```

| Parameter | Type | Passing | Description |
| --- | --- | --- | --- |
| `argObjectSet` | [TObjectSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectSet.md) | value | The object types that can be returned. |
| `argLayerSet` | [TV6_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_LayerSet.md) | value | The layers whose objects can be returned. |
| `argStatusBarText` | `string` | value | The text on the status bar of the Altium Designer application when the method is invoked. |

**Returns:** [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

The prompt repeats until the user clicks an object that matches the object set and the layer set, or cancels; when several objects overlap, the user chooses one. Returns null when the user cancels or when the board has no view.

### GetObjectAtXYAskUserIfAmbiguous

This method returns you the specified object with the specified X and Y coordinates which could be retrieved by the [`ChooseLocation`](#chooselocation) method for example.

```csharp
IPCB_Primitive GetObjectAtXYAskUserIfAmbiguous(int argHitX, int argHitY, TObjectSet argObjectSet, TV6_LayerSet argLayerSet, TEditingAction argction);
```

| Parameter | Type | Passing | Description |
| --- | --- | --- | --- |
| `argHitX` | `int` | value | The X coordinate, in internal units (10,000 per mil). |
| `argHitY` | `int` | value | The Y coordinate, in internal units (10,000 per mil). |
| `argObjectSet` | [TObjectSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectSet.md) | value | The object types that can be returned. |
| `argLayerSet` | [TV6_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_LayerSet.md) | value | The layers whose objects can be returned. |
| `argction` | [TEditingAction](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TEditingAction.md) | value | What is happening when the method is invoked. |

**Returns:** [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

This method is useful when there are overlapping objects on the PCB document and you need to retrieve the specific object type.

Returns null when the board has no view. The examples get the point with [`ChooseLocation`](#chooselocation), pass `TEditingAction.eEditAction_Select`, and stop when the result is null.

**Example:** Let the user click components on the current board until they click elsewhere.

```csharp
using PCB;

IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer;
int x = 0, y = 0;
pcbServer.PreProcess();
try
{
    IPCB_Board board = pcbServer.GetCurrentPCBBoard();
    if (board == null)
    {
        DXP.Utils.ShowMessage("The Current Document is not a PCB Document.");
        return;
    }
    IPCB_Primitive comp1;
    do
    {
        board.ChooseLocation(ref x, ref y, "Choose Component1");
        comp1 = board.GetObjectAtXYAskUserIfAmbiguous(x, y, new PCB.TObjectSet { TObjectId.eComponentObject },
            PCBConstant.V6AllLayersSet, TEditingAction.eEditAction_Select);
        if (comp1 == null)
            return;
        // click on the board to exit or RMB
    } while (comp1 != null);
}
finally
{
    pcbServer.PostProcess();
    DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw");
}
```

**See also:** [IPCB_Board.ChooseLocation](#chooselocation), [TObjectSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectSet.md), [TEditingAction](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TEditingAction.md)

### GetPcbComponentByRefDes

Returns the component with the given designator, or null when the board has none.

```csharp
IPCB_Component GetPcbComponentByRefDes(string argValue);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argValue` | `string` | value |

**Returns:** [IPCB_Component](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Component.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### GetPrimitiveCount

Returns the number of primitives that match the object kinds, the layers and the search method supplied.

```csharp
int GetPrimitiveCount(TObjectSet argObjSet, TV6_LayerSet argLayerSet, TIterationMethod argMethod);
int GetPrimitiveCount(ITransportSet argObjSet, ITransportSet argLayerSet, int argMethod);
```

| Parameter | Type | Passing | Description |
| --- | --- | --- | --- |
| `argObjSet` | [TObjectSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectSet.md) | value | The object kinds to look for. |
| `argLayerSet` | [TV6_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_LayerSet.md) | value | The layers to look in. |
| `argMethod` | [TIterationMethod](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TIterationMethod.md) | value | How the search is conducted. |

**Returns:** `int`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

**See also:** [TObjectSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectSet.md), [TIterationMethod](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TIterationMethod.md)

### GetPrimitiveCounter

Returns the primitive counter of the board, which gives the object count, hole count and string count of the PCB document.

```csharp
IPCB_PrimitiveCounter GetPrimitiveCounter();
```

**Returns:** [IPCB_PrimitiveCounter](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrimitiveCounter.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

**See also:** [IPCB_PrimitiveCounter](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrimitiveCounter.md)

### GetState_ViewConfigAsString

*No description yet.*

```csharp
bool GetState_ViewConfigAsString(out string argConfigType, out string argConfig);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argConfigType` | `string` | out |
| `argConfig` | `string` | out |

**Returns:** `bool`

### GetState_ZTopBottom

*No description yet.*

```csharp
void GetState_ZTopBottom(out float argZTop, out float argZBottom);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argZTop` | `float` | out |
| `argZBottom` | `float` | out |

**Returns:** nothing (`void`)

### GraphicalView_ViewportRect

*No description yet.*

```csharp
CoordRect GraphicalView_ViewportRect();
```

**Returns:** [CoordRect](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/CoordRect.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### GraphicalView_ZoomOnRect

*No description yet.*

```csharp
void GraphicalView_ZoomOnRect(int argx1, int argy1, int argx2, int argy2);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argx1` | `int` | value |
| `argy1` | `int` | value |
| `argx2` | `int` | value |
| `argy2` | `int` | value |

**Returns:** nothing (`void`)

### GraphicalView_ZoomRedraw

Redraws the board's view.

```csharp
void GraphicalView_ZoomRedraw();
```

**Returns:** nothing (`void`)

The examples call it right after [`AddPCBObject`](#addpcbobject) to show the new object.

### HasServerDocument

*No description yet.*

```csharp
bool HasServerDocument();
```

**Returns:** `bool`

### HideHoleSymbols

*No description yet.*

```csharp
void HideHoleSymbols();
```

**Returns:** nothing (`void`)

### HidePCBObject

This method hides the specified object on the PCB document from view.

```csharp
void HidePCBObject(IPCB_Primitive argPCBObject);
void HidePCBObject(object argPCBObject);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPCBObject` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Does nothing when the object is null or belongs to another board.

**See also:** [IPCB_Board.InvertPCBObject](#invertpcbobject), [IPCB_Board.ShowPCBObject](#showpcbobject)

### InternalPlaneLayerIterator

Returns an iterator over the internal plane layers of the board.

```csharp
IPCB_LayerObjectIterator InternalPlaneLayerIterator();
```

**Returns:** [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

The examples call [`IPCB_LayerIterator.SetBeforeFirst`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerIterator.md#setbeforefirst), then [`IPCB_LayerIterator.Next`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerIterator.md#next) in a loop, and read each layer with [`IPCB_LayerIterator.Layer`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerIterator.md#layer).

**Examples:** [Extension_InternalPlaneLayer](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_InternalPlaneLayer/Source%20Code/Commands.cs#L33)

### InvalidatePlane

*No description yet.*

```csharp
void InvalidatePlane(TV6_Layer argL);
void InvalidatePlane(int argL);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argL` | [TV6_Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### InvalidateScopeTester

*No description yet.*

```csharp
void InvalidateScopeTester();
```

**Returns:** nothing (`void`)

### InvertPCBObject

This method inverts the colors of the specified object on the PCB document.

```csharp
void InvertPCBObject(IPCB_Primitive argPCBObject);
void InvertPCBObject(object argPCBObject);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPCBObject` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Does nothing when the object is null or belongs to another board.

**See also:** [IPCB_Board.ShowPCBObject](#showpcbobject), [IPCB_Board.HidePCBObject](#hidepcbobject)

### IsEmptyHoleToleranceValue

*No description yet.*

```csharp
bool IsEmptyHoleToleranceValue(int argValue);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argValue` | `int` | value |

**Returns:** `bool`

### LayerIterator

*No description yet.*

```csharp
IPCB_LayerObjectIterator LayerIterator();
```

**Returns:** [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### LayerIterator_IncludeNonEditable

*No description yet.*

```csharp
IPCB_LayerObjectIterator LayerIterator_IncludeNonEditable();
```

**Returns:** [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### LayerName

Returns the name of a layer.

```csharp
string LayerName(V7_LayerBase argL);
string LayerName(IV7_Layer argL);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argL` | [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) | value |

**Returns:** `string`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

When the board has more than one substack ([`IPCB_MasterLayerStack.SubstackCount`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MasterLayerStack.md#substackcount)), the name is taken from the first substack.

### LayerPositionInSet

This method returns a positive value with 1 being the first layer and a higher number being the lower layer in the list. This method is useful for checking low and high layers of a layer pair.

```csharp
int LayerPositionInSet(TV6_LayerSet argLayerSet, IPCB_LayerObject argLayerObj);
int LayerPositionInSet(ITransportSet argLayerSet, object argLayerObj);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argLayerSet` | [TV6_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_LayerSet.md) | value |
| `argLayerObj` | [IPCB_LayerObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObject.md) | value |

**Returns:** `int`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Only the layers of the set are counted, from the top of the layer stack. Returns 0 when the layer object is null or its layer is not in the set.

**See also:** [IPCB_LayerObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObject.md), [IPCB_DrillLayerPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md)

### LinkToTemplate

*No description yet.*

```csharp
void LinkToTemplate(IPCB_Primitive argPrimitive, IPCB_PadViaTemplate argTemplate);
void LinkToTemplate(object argPrimitive, object argTemplate);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPrimitive` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |
| `argTemplate` | [IPCB_PadViaTemplate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaTemplate.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### LoadMeshFile

*No description yet.*

```csharp
int LoadMeshFile(string argMeshFile);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argMeshFile` | `string` | value |

**Returns:** `int`

### MechanicalLayerIterator

Returns an iterator over the mechanical layers of the board.

```csharp
IPCB_LayerObjectIterator MechanicalLayerIterator();
```

**Returns:** [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

The examples walk it with [`IPCB_LayerIterator.First`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerIterator.md#first) and [`IPCB_LayerIterator.Next`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerIterator.md#next) and read each layer with [`IPCB_LayerObjectIterator.LayerObject`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md#layerobject), as an [`IPCB_MechanicalLayer`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MechanicalLayer.md).

### MechanicalLayers

*No description yet.*

```csharp
IPCB_LayerSet MechanicalLayers();
```

**Returns:** [IPCB_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerSet.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### Navigate_RedrawChangedObjectsInBoard

Has no effect.

```csharp
void Navigate_RedrawChangedObjectsInBoard();
```

**Returns:** nothing (`void`)

### NetNameIsUnique

Returns whether no other net on the board has the given name.

```csharp
bool NetNameIsUnique(IPCB_Net argNet, string argName);
bool NetNameIsUnique(object argNet, string argName);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argNet` | [IPCB_Net](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Net.md) | value |
| `argName` | `string` | value |

**Returns:** `bool`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The net passed in may itself have the name. Returns `false` for an empty name.

### NewUndo

Has no effect.

```csharp
void NewUndo();
```

**Returns:** nothing (`void`)

### PrimPrimDistance

Returns the distance between two primitives, in internal units (10,000 per mil).

```csharp
int PrimPrimDistance(IPCB_Primitive argPrimitive1, IPCB_Primitive argPrimitive2);
int PrimPrimDistance(object argPrimitive1, object argPrimitive2);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPrimitive1` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |
| `argPrimitive2` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** `int`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Returns `PCBConstant.MaxCoord` when either primitive is null or does not belong to this board.

The example collects the primitives with a board iterator first, destroys the iterator, and then measures every pair.

### RebuildBoardOutline

Rebuilds the board outline from the given defining layer.

```csharp
void RebuildBoardOutline(V7_LayerBase argDefiningLayer);
void RebuildBoardOutline(IV7_Layer argDefiningLayer);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argDefiningLayer` | [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

After changing the outline's segments, the example calls [`UpdateBoardOutline`](#updateboardoutline) and then `RebuildBoardOutline` with the outline's own layer.

### RebuildPadCaches

*No description yet.*

```csharp
void RebuildPadCaches();
```

**Returns:** nothing (`void`)

### RebuildSplitBoardRegions

*No description yet.*

```csharp
void RebuildSplitBoardRegions(bool argFullRebuild);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argFullRebuild` | `bool` | value |

**Returns:** nothing (`void`)

### RecreateHandles

*No description yet.*

```csharp
void RecreateHandles();
```

**Returns:** nothing (`void`)

### ReDrawToDC

*No description yet.*

```csharp
void ReDrawToDC(UIntPtr argDC, int argPrintKind, int argPrintWhat, TV6_LayerSet argLayers);
void ReDrawToDC(object argDC, int argPrintKind, int argPrintWhat, ITransportSet argLayers);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argDC` | `UIntPtr` | value |
| `argPrintKind` | `int` | value |
| `argPrintWhat` | `int` | value |
| `argLayers` | [TV6_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_LayerSet.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### RemovePCBObject

Removes an object from the board without destroying it.

```csharp
void RemovePCBObject(IPCB_Primitive argPCBObject);
void RemovePCBObject(object argPCBObject);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPCBObject` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Does nothing when the object is null or is not a primitive, a rule, a class or a union. On a PCB library board only footprints ([`IPCB_LibComponent`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LibComponent.md)) are removed, from the library's list of footprints; other objects stay in place.

Do not remove objects while an iterator is walking the board, because it changes the data the iterator traverses: collect the objects in a list first, then remove them (see the example). The examples also remove rules and violations that were added only for a check.

**Example:** Remove all tracks on the top layer of the current board.

```csharp
using System.Collections.Generic;
using PCB;

IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer;
IPCB_Board currentPCBBoard = pcbServer?.GetCurrentPCBBoard();
if (currentPCBBoard == null)
    return;
IPCB_BoardIterator iterator = currentPCBBoard.BoardIterator_Create();
if (iterator == null)
    return;
iterator.AddFilter_ObjectSet(new PCB.TObjectSet { TObjectId.eTrackObject });
iterator.AddFilter_LayerSet(new TV6_LayerSet { TV6_Layer.eV6_TopLayer });
// store tracks in a list that are to be deleted later...
var trackList = new List<IPCB_Primitive>();
try
{
    IPCB_Primitive track = iterator.FirstPCBObject();
    while (track != null)
    {
        trackList.Add(track);
        track = iterator.NextPCBObject();
    }
}
finally
{
    currentPCBBoard.BoardIterator_Destroy(ref iterator);
}
try
{
    pcbServer.PreProcess();
    for (int i = 0; i < trackList.Count; i++)
        currentPCBBoard.RemovePCBObject(trackList[i]);
}
finally
{
    pcbServer.PostProcess();
}
// Refresh the PCB document.
currentPCBBoard.ViewManager_FullUpdate();
DXP.Utils.RunCommand("PCB:Zoom", "Action=Redraw");
```

**Examples:** [Extension_PcbLibComponentToSTEP](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PcbLibComponentToSTEP/Source%20Code/Commands.cs#L52), [Extension_PlacePad](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlacePad/Source%20Code/PlacePadCommand.cs#L62)

### ReportStackupCompatibilityForEmbeddedBoards

*No description yet.*

```csharp
bool ReportStackupCompatibilityForEmbeddedBoards(bool argRunReport);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argRunReport` | `bool` | value |

**Returns:** `bool`

### RuleNameUnique

Returns whether no other rule on the board has the given name.

```csharp
bool RuleNameUnique(IPCB_Rule argRule, string argName);
bool RuleNameUnique(object argRule, string argName);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argRule` | [IPCB_Rule](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Rule.md) | value |
| `argName` | `string` | value |

**Returns:** `bool`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The rule passed in may itself have the name. Returns `false` for an empty name.

### RunBatchDesignRuleCheck

*No description yet.*

```csharp
bool RunBatchDesignRuleCheck(string argReportFilename, TDRCReportFileFormat argDRCReportFormat, bool argDisplayReportFile, bool argPublishToWeb);
bool RunBatchDesignRuleCheck(string argReportFilename, int argDRCReportFormat, bool argDisplayReportFile, bool argPublishToWeb);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argReportFilename` | `string` | value |
| `argDRCReportFormat` | [TDRCReportFileFormat](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TDRCReportFileFormat.md) | value |
| `argDisplayReportFile` | `bool` | value |
| `argPublishToWeb` | `bool` | value |

**Returns:** `bool`

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### SelectedObjects_Add

*No description yet.*

```csharp
void SelectedObjects_Add(IPCB_Primitive argP);
void SelectedObjects_Add(object argP);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argP` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### SelectedObjects_BeginUpdate

*No description yet.*

```csharp
void SelectedObjects_BeginUpdate();
```

**Returns:** nothing (`void`)

### SelectedObjects_Clear

*No description yet.*

```csharp
void SelectedObjects_Clear();
```

**Returns:** nothing (`void`)

### SelectedObjects_EndUpdate

*No description yet.*

```csharp
void SelectedObjects_EndUpdate();
```

**Returns:** nothing (`void`)

### SelectedObjectsCount

*No description yet.*

```csharp
int SelectedObjectsCount();
```

**Returns:** `int`

### SelectNewViewConfiguration

*No description yet.*

```csharp
bool SelectNewViewConfiguration(string argCurConfigType, string argCurConfig, out string argConfigType, out string argConfig);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argCurConfigType` | `string` | value |
| `argCurConfig` | `string` | value |
| `argConfigType` | `string` | out |
| `argConfig` | `string` | out |

**Returns:** `bool`

### SetState_DocumentHasChanged

This method forces the document has changed flag to true denoting that the document has been marked dirty so that when you close this document, you are prompted to save this document.

```csharp
void SetState_DocumentHasChanged();
```

**Returns:** nothing (`void`)

### SetState_SaveCurrentStatusOfObjectsInBoard

Has no effect.

```csharp
void SetState_SaveCurrentStatusOfObjectsInBoard();
```

**Returns:** nothing (`void`)

### SetState_ViewManager_FilterChanging

Tells the board's views that the object filter is changing.

```csharp
void SetState_ViewManager_FilterChanging();
```

**Returns:** nothing (`void`)

### ShowHoleSymbols

*No description yet.*

```csharp
void ShowHoleSymbols(int argSymbolType, int argSymbolSize, int argLayerPairIndex);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argSymbolType` | `int` | value |
| `argSymbolSize` | `int` | value |
| `argLayerPairIndex` | `int` | value |

**Returns:** nothing (`void`)

### ShowPCBObject

This method makes this hidden PCB object visible on the PCB document.

```csharp
void ShowPCBObject(IPCB_Primitive argPCBObject);
void ShowPCBObject(object argPCBObject);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPCBObject` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

Does nothing when the object is null or belongs to another board.

**See also:** [IPCB_Board.InvertPCBObject](#invertpcbobject), [IPCB_Board.HidePCBObject](#hidepcbobject)

### SignalLayerIterator

*No description yet.*

```csharp
IPCB_LayerObjectIterator SignalLayerIterator();
```

**Returns:** [IPCB_LayerObjectIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObjectIterator.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### SpatialIterator_Create

This method creates a spatial iterator which conducts a search within defined boundary on a PCB document. A spatial iterator only looks for primitive objects on a PCB document such as tracks and arcs not group objects such as dimensions and components.

```csharp
IPCB_SpatialIterator SpatialIterator_Create();
```

**Returns:** [IPCB_SpatialIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_SpatialIterator.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

The examples set the filters with [`IPCB_AbstractIterator.AddFilter_ObjectSet`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#addfilter_objectset), [`IPCB_AbstractIterator.AddFilter_AllLayers`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#addfilter_alllayers) and [`IPCB_AbstractIterator.AddFilter_Area`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#addfilter_area) (corners in internal units), walk the objects with [`IPCB_AbstractIterator.FirstPCBObject`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#firstpcbobject) and [`IPCB_AbstractIterator.NextPCBObject`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#nextpcbobject), and then call [`SpatialIterator_Destroy`](#spatialiterator_destroy).

**See also:** [IPCB_Board.SpatialIterator_Destroy](#spatialiterator_destroy)

### SpatialIterator_Destroy

This method destroys the spatial iterator object after it has finished conducting a search within a defined boundary on the PCB document. A spatial iterator only looks for primitive objects on a PCB document such as tracks and arcs not group objects such as dimensions and components.

```csharp
void SpatialIterator_Destroy(ref IPCB_SpatialIterator argIterator);
void SpatialIterator_Destroy(ref object argIterator);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argIterator` | [IPCB_SpatialIterator](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_SpatialIterator.md) | ref |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The variable passed by reference is set to null.

**See also:** [IPCB_Board.SpatialIterator_Create](#spatialiterator_create)

### UnlinkFromTemplate

*No description yet.*

```csharp
void UnlinkFromTemplate(IPCB_Primitive argPrimitive);
void UnlinkFromTemplate(object argPrimitive);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPrimitive` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

### Update_PCBGraphicalView

Updates the board's view.

```csharp
void Update_PCBGraphicalView(bool argForceRebuild, bool argRedrawView);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argForceRebuild` | `bool` | value |
| `argRedrawView` | `bool` | value |

**Returns:** nothing (`void`)

The examples call `Update_PCBGraphicalView(false, true)` after changing which layers are displayed or the current layer, to show the change.

### UpdateBoardOutline

This method refreshes the Board outline on the PCB document for example if you have programmatically altered the outline, it is a good time to invoke the `UpdateBoardOutline` method to refresh the PCB document.

```csharp
void UpdateBoardOutline();
```

**Returns:** nothing (`void`)

Recalculates the size of the outline and rebuilds its region, including the board cutouts. Does nothing when the board has no outline.

After changing the outline's segments, the example calls `UpdateBoardOutline` and then [`RebuildBoardOutline`](#rebuildboardoutline).

### UpdateCachedVCSRevisionNumberSpecialStrings

*No description yet.*

```csharp
void UpdateCachedVCSRevisionNumberSpecialStrings();
```

**Returns:** nothing (`void`)

### ValidateInvalidPlanes

*No description yet.*

```csharp
void ValidateInvalidPlanes();
```

**Returns:** nothing (`void`)

### ValidateScopeTester

*No description yet.*

```csharp
void ValidateScopeTester();
```

**Returns:** nothing (`void`)

### ViewManager_FullUpdate

This method invokes a full update of all panels that are associated with the current PCB document. This method is useful if a document has been modified programmatically especially with library documents.

```csharp
void ViewManager_FullUpdate();
```

**Returns:** nothing (`void`)

### ViewManager_GraphicallyInvalidatePrimitive

This method forces a repaint of the targeted design object (PCBObject parameter) on the PCB document.

```csharp
void ViewManager_GraphicallyInvalidatePrimitive(IPCB_Primitive argPCBObject);
void ViewManager_GraphicallyInvalidatePrimitive(object argPCBObject);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argPCBObject` | [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md) | value |

**Returns:** nothing (`void`)

The first overload is an extension method of `IPCB_BoardHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The example passes the board itself to redraw it after changing the board outline.

### ViewManager_UpdateLayerTabs

Refreshes the layer tabs of the board's view.

```csharp
void ViewManager_UpdateLayerTabs();
```

**Returns:** nothing (`void`)

### VisibleLayers

*No description yet.*

```csharp
IPCB_LayerSet VisibleLayers();
```

**Returns:** [IPCB_LayerSet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerSet.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

### WindowBoundingRectangle

This method returns the coordinates of the bounds of a PCB window.

```csharp
CoordRect WindowBoundingRectangle();
```

**Returns:** [CoordRect](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/CoordRect.md)

Extension method of `IPCB_BoardHelper` (`using PCB;`).

The coordinates are in internal units (10,000 per mil).

## Inherited members

- From [IPCB_Primitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md): [AllowGlobalEdit](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#allowglobaledit), [BeginModify](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#beginmodify), [Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#board), [BoundingRectangle](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#boundingrectangle), [BoundingRectangleChildren](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#boundingrectanglechildren), [BoundingRectangleForPainting](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#boundingrectangleforpainting), [BoundingRectangleForSelection](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#boundingrectangleforselection), [CancelModify](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#cancelmodify), [Component](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#component), [Coordinate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#coordinate), [DescriptorString](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#descriptorstring), [DetailString](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#detailstring), [Dimension](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#dimension), [DrawAsPreview](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#drawaspreview), [DRCError](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#drcerror), [Enabled](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabled), [Enabled_Direct](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabled_direct), [Enabled_vComponent](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabled_vcomponent), [Enabled_vCoordinate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabled_vcoordinate), [Enabled_vDimension](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabled_vdimension), [Enabled_vNet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabled_vnet), [Enabled_vPolygon](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabled_vpolygon), [EnableDraw](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#enabledraw), [EndModify](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#endmodify), [Export_ToParameters](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#export_toparameters), [FlipXY](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#flipxy), [GraphicallyInvalidate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#graphicallyinvalidate), [Handle](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#handle), [Identifier](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#identifier), [InBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#inboard), [InComponent](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#incomponent), [InCoordinate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#incoordinate), [Index](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#index), [InDimension](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#indimension), [InNet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#innet), [InPolygon](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#inpolygon), [InSelectionMemory](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#inselectionmemory), [IsAssyTestPoint_Bottom](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#isassytestpoint_bottom), [IsAssyTestPoint_Top](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#isassytestpoint_top), [IsElectricalPrim](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#iselectricalprim), [IsFreePrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#isfreeprimitive), [IsHidden](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#ishidden), [IsKeepout](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#iskeepout), [IsPreRoute](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#ispreroute), [IsSaveable](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#issaveable), [IsTenting](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#istenting), [IsTenting_Bottom](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#istenting_bottom), [IsTenting_Top](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#istenting_top), [IsTestPoint_Bottom](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#istestpoint_bottom), [IsTestPoint_Top](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#istestpoint_top), [Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#layer), [MiscFlag1](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#miscflag1), [MiscFlag2](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#miscflag2), [MiscFlag3](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#miscflag3), [Moveable](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#moveable), [MoveByXY](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#movebyxy), [MoveToXY](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#movetoxy), [Net](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#net), [ObjectID](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#objectid), [ObjectIDString](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#objectidstring), [PadCacheRobotFlag](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#padcacherobotflag), [PasteMaskExpansion](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#pastemaskexpansion), [Polygon](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#polygon), [PolygonOutline](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#polygonoutline), [PowerPlaneClearance](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#powerplaneclearance), [PowerPlaneConnectStyle](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#powerplaneconnectstyle), [PowerPlaneReliefExpansion](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#powerplanereliefexpansion), [Preview](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#preview), [ReliefAirGap](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#reliefairgap), [ReliefConductorWidth](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#reliefconductorwidth), [ReliefEntries](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#reliefentries), [Replicate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#replicate), [RequiredParamterSpace](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#requiredparamterspace), [RotateBy](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#rotateby), [Selected](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#selected), [SolderMaskExpansion](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#soldermaskexpansion), [SwapLayerPairs](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#swaplayerpairs), [TearDrop](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#teardrop), [UnionIndex](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#unionindex), [UniqueId](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#uniqueid), [UniqueID](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#uniqueid-1), [Used](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#used), [UserRouted](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#userrouted), [V7Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#v7layer), [ViewableObjectID](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#viewableobjectid)

## Returned by

[ILayerStackServerDocumentHelper.GetBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/ILayerStackServerDocumentHelper.md#getboard), [IPCB_BoardEx3.GetBaseVCSBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardEx3.md#getbasevcsboard), [IPCB_BoardEx3.GetLastRemoteBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardEx3.md#getlastremoteboard), [IPCB_ComponentPainterView.GetDummyBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ComponentPainterView.md#getdummyboard), [IPCB_DrillLayerPair.Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillLayerPair.md#board), [IPCB_EmbeddedBoard.ChildBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_EmbeddedBoard.md#childboard), [IPCB_LayerStack.Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack.md#board), [IPCB_LayerStack_V7.Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerStack_V7.md#board), [IPCB_Library.Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Library.md#board), [IPCB_MasterLayerStack.Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MasterLayerStack.md#board), [IPCB_PlacementGuide.GetOwnerBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PlacementGuide.md#getownerboard), [IPCB_Primitive.Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Primitive.md#board), [IPCB_ServerInterface.GetCurrentPCBBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#getcurrentpcbboard), [IPCB_ServerInterface.GetPCBBoardByBoardID](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#getpcbboardbyboardid), [IPCB_ServerInterface.GetPCBBoardByPath](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#getpcbboardbypath), [IPCB_ServerInterface.LoadPCBBoardByPath](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#loadpcbboardbypath)

## Accepted by

[ILayerStackManager.GetLayerStackProvider](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/ILayerStackManager.md#getlayerstackprovider), [ILayerStackManager.OpenDocumentFromPcb](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/ILayerStackManager.md#opendocumentfrompcb), [ILayerStackManager.RemoveLayerStackProvider](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/ILayerStackManager.md#removelayerstackprovider), [IPCB_Board3DModelExporter.ExportBoard3DModel](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board3DModelExporter.md#exportboard3dmodel), [IPCB_Board3DModelExporter.ExportBoard3DModelToOCCDoc](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board3DModelExporter.md#exportboard3dmodeltooccdoc), [IPCB_Board3DModelExporter.GetCopperBodyList](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board3DModelExporter.md#getcopperbodylist), [IPCB_Board3DModelExporter.GetCopperBodyList2](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board3DModelExporter.md#getcopperbodylist2), [IPCB_DocumentPainterView.SetBoard](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterView.md#setboard), [IPCB_ExpressionManager.ExecRuleExpression](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ExpressionManager.md#execruleexpression), [IPCB_ExpressionManager.HighlightByExpression](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ExpressionManager.md#highlightbyexpression), [IPCB_ExpressionManager.IsExpressionValid](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ExpressionManager.md#isexpressionvalid), [IPCB_ExpressionManager.ShowExpressionBuilder](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ExpressionManager.md#showexpressionbuilder), [IPCB_ExpressionManager.ShowExpressionHelper](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ExpressionManager.md#showexpressionhelper), [IPCB_GridManager.RunGridEditor](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GridManager.md#rungrideditor), [IPCB_LayerObject_V7.IsDisplayed](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_LayerObject_V7.md#isdisplayed), [IPCB_MechanicalLayer.MirroredLayer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_MechanicalLayer.md#mirroredlayer), [IPCB_PadViaLibraryManager.AddRemoveLibraries](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibraryManager.md#addremovelibraries), [IPCB_PadViaLibraryManager.FindLibrary](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibraryManager.md#findlibrary), [IPCB_PadViaLibraryManager.GetLinkedToLibrary_1](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PadViaLibraryManager.md#getlinkedtolibrary_1), [IPCB_PrimitiveComparator.Compare](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrimitiveComparator.md#compare), [IPCB_SMDToPlaneConstraint.IsInternalPlaneNet](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_SMDToPlaneConstraint.md#isinternalplanenet)

## Examples

Used in the SDK examples: [Extension_BOMManager](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_BOMManager/Source%20Code/BomManager.cs#L19), [Extension_BOMManager](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_BOMManager/Source%20Code/Commands.cs#L34), [Extension_BOMManager](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_BOMManager/Source%20Code/IBomManager.cs#L14), [Extension_BOMManager](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_BOMManager/Source%20Code/PcbBom.cs#L13), [Extension_CreatePCBLib](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_CreatePCBLib/Source%20Code/Commands.cs#L86), [Extension_InternalPlaneLayer](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_InternalPlaneLayer/Source%20Code/Commands.cs#L29), [Extension_PCBToImage](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PCBToImage/Source%20Code/Commands.cs#L94), [Extension_PCBUndoRedo](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PCBUndoRedo/Source%20Code/Commands.cs#L33), [Extension_Pad_SolderMask](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_Pad_SolderMask/Source%20Code/Commands.cs#L28), [Extension_PlaceAndMovePcbComponent](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlaceAndMovePcbComponent/Source%20Code/Commands.cs#L28), [Extension_PlacePad](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PlacePad/Source%20Code/PlacePadCommand.cs#L15).
