
# IPCB_Primitive interface

The base interface of the PCB design objects; tracks, arcs, pads, vias, fills, text, components, polygons, dimensions and the other PCB object interfaces inherit its members.

```csharp
public interface IPCB_Primitive
```

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

**Derived:** [IPCB_Accordion](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Accordion.md), [IPCB_Arc](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Arc.md), [IPCB_Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md), [IPCB_Connection](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Connection.md), [IPCB_DifferentialPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DifferentialPair.md), [IPCB_DrillTable](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillTable.md), [IPCB_Embedded](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Embedded.md), [IPCB_FromTo](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_FromTo.md), [IPCB_Group](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Group.md), [IPCB_ObjectClass](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ObjectClass.md), [IPCB_ObjectClassBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ObjectClassBase.md), [IPCB_Pad](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Pad.md), [IPCB_RectangularPrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_RectangularPrimitive.md), [IPCB_Region](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Region.md), [IPCB_Rule](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Rule.md), [IPCB_Track](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Track.md), [IPCB_Via](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Via.md), [IPCB_Violation](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Violation.md)

## Remarks

Coordinates and sizes are in internal units (10,000 per mil): 10,000 per mil (`EDP.EDPConstant.InternalUnits`). Convert with [`EDP.Utils.MilsToCoord`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/edp/Utils.md#milstocoord) and [`EDP.Utils.MMsToCoord`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/edp/Utils.md#mmstocoord), and back with [`EDP.Utils.CoordToMils`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/edp/Utils.md#coordtomils) and [`EDP.Utils.CoordToMMs`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/edp/Utils.md#coordtomms).

To change an object, call [`BeginModify`](#beginmodify) before and [`EndModify`](#endmodify) after 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).

Once the object has been destroyed, every call through this interface fails with the error "Object accessed after being destroyed".

A primitive has a bounding rectangle which encapsulates the region of the primitive. There are two other bounding rectangles which are for selection and for painting (refreshing and updating).

## Properties

| Property | Type | Access | Description |
| --- | --- | --- | --- |
| [AllowGlobalEdit](#allowglobaledit) | `bool` | get; set |  |
| [Board](#board) | [IPCB_Board](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md) | get; set | The Board property determines the PCB document that the object itself is associated with. |
| [Component](#component) | [IPCB_Component](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Component.md) | get; set | This property determines whether the object itself is associated with the component or not. |
| [Coordinate](#coordinate) | [IPCB_Coordinate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Coordinate.md) | get; set | The Coordinate property returns the [`IPCB_Coordinate`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Coordinate.md) only if this object itself is part of the [`IPCB_Coordinate`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Coordinate.md) type. |
| [DescriptorString](#descriptorstring) | `string` | get | The Descriptor read only property fetches the Descriptor string. |
| [DetailString](#detailstring) | `string` | get | This property retrieves the Detail text string for this design object. |
| [Dimension](#dimension) | [IPCB_Dimension](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Dimension.md) | get; set | The dimension the object belongs to, or null when it is not part of a dimension. |
| [DrawAsPreview](#drawaspreview) | `bool` | get; set |  |
| [DRCError](#drcerror) | `bool` | get; set | The `DRCError` property determines whether the object is affected by the Design Rule Checker and thus if the object breaks one of the design rules, the `DRCError` is true. |
| [Enabled](#enabled) | `bool` | get; set |  |
| [Enabled_Direct](#enabled_direct) | `bool` | get; set |  |
| [Enabled_vComponent](#enabled_vcomponent) | `bool` | get; set |  |
| [Enabled_vCoordinate](#enabled_vcoordinate) | `bool` | get; set |  |
| [Enabled_vDimension](#enabled_vdimension) | `bool` | get; set |  |
| [Enabled_vNet](#enabled_vnet) | `bool` | get; set |  |
| [Enabled_vPolygon](#enabled_vpolygon) | `bool` | get; set |  |
| [EnableDraw](#enabledraw) | `bool` | get; set |  |
| [Handle](#handle) | `string` | get |  |
| [Identifier](#identifier) | `string` | get |  |
| [InBoard](#inboard) | `bool` | get; set | This `InBoard` property determines whether the object itself is part of the board object or not. |
| [InComponent](#incomponent) | `bool` | get; set | This `InComponent` property determines whether the object itself is part of the component object or not. |
| [InCoordinate](#incoordinate) | `bool` | get; set | This `InCoordinate` property determines whether the object itself is part of the coordinate object or not. |
| [Index](#index) | `ushort` | get; set |  |
| [InDimension](#indimension) | `bool` | get; set | This `InDimension` property determines whether the object itself is part of the dimension object or not. |
| [InNet](#innet) | `bool` | get; set |  |
| [InPolygon](#inpolygon) | `bool` | get; set | This `InPolygon` property determines whether the object itself is part of the polygon object or not. |
| [InSelectionMemory](#inselectionmemory) | `bool` | get; set |  |
| [IsAssyTestPoint_Bottom](#isassytestpoint_bottom) | `bool` | get; set |  |
| [IsAssyTestPoint_Top](#isassytestpoint_top) | `bool` | get; set |  |
| [IsElectricalPrim](#iselectricalprim) | `bool` | get | This property determines whether this PCB object possesses an electrical property- tracks, fills, polygons, arcs, vias all have electrical properties - basically those objects that have a Net propert… |
| [IsKeepout](#iskeepout) | `bool` | get; set | This property determines whether a PCB object is used as a keep-out object. |
| [IsPreRoute](#ispreroute) | `bool` | get; set |  |
| [IsTenting](#istenting) | `bool` | get; set | This property determines whether the solder mask of pad and via objects are tented on top and bottom layers. |
| [IsTenting_Bottom](#istenting_bottom) | `bool` | get; set | This property determines whether the solder mask of pad and via objects are tented or not on the bottom layer. |
| [IsTenting_Top](#istenting_top) | `bool` | get; set | This property determines whether the solder mask of pad and via objects are tented or not on the top layer. |
| [IsTestPoint_Bottom](#istestpoint_bottom) | `bool` | get; set |  |
| [IsTestPoint_Top](#istestpoint_top) | `bool` | get; set |  |
| [Layer](#layer) | [TV6_Layer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md) | get; set | The layer the object is on, as a [`TV6_Layer`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md). |
| [MiscFlag1](#miscflag1) | `bool` | get; set | This property determines the boolean value from the `MiscFlag1` property and can be used for custom purposes. |
| [MiscFlag2](#miscflag2) | `bool` | get; set | This property determines the boolean value from the `MiscFlag2` property and can be used for custom purposes. |
| [MiscFlag3](#miscflag3) | `bool` | get; set | This property determines the boolean value from the `MiscFlag3` property and can be used for custom purposes. |
| [Moveable](#moveable) | `bool` | get; set | This property determines whether this design object can be moved or not (by the autorouter for example). |
| [Net](#net) | [IPCB_Net](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Net.md) | get; set | The Net property of an object denotes it has an electrical property, meaning it is connected from one node to another. |
| [ObjectID](#objectid) | [TObjectId](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TObjectId.md) | get |  |
| [ObjectIDString](#objectidstring) | `string` | get | This `ObjectIDString` property returns the Object Id string. |
| [PadCacheRobotFlag](#padcacherobotflag) | `bool` | get; set | Not used; the property reads false, and setting it has no effect. |
| [PasteMaskExpansion](#pastemaskexpansion) | `int` | get | The paste mask expansion of the object, in internal units (10,000 per mil). |
| [Polygon](#polygon) | [IPCB_Polygon](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Polygon.md) | get; set | This method retrieves the [`IPCB_Polygon`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Polygon.md) interface that the design object primitive is associated with. |
| [PolygonOutline](#polygonoutline) | `bool` | get; set | This method determines whether the design object primitive is part of the polygon outline or not. |
| [PowerPlaneClearance](#powerplaneclearance) | `int` | get | The power plane clearance of the object, in internal units (10,000 per mil). |
| [PowerPlaneConnectStyle](#powerplaneconnectstyle) | [TPlaneConnectStyle](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TPlaneConnectStyle.md) | get | The style of the object's connection to power planes. |
| [PowerPlaneReliefExpansion](#powerplanereliefexpansion) | `int` | get | The relief expansion of the object's power plane connection, in internal units (10,000 per mil). |
| [Preview](#preview) | `float` | set |  |
| [ReliefAirGap](#reliefairgap) | `int` | get | The `ReliefAirGap` property retrieves the relief air gap value for this pad/via object, in internal units (10,000 per mil). |
| [ReliefConductorWidth](#reliefconductorwidth) | `int` | get | The relief conductor width of the pad or via, in internal units (10,000 per mil). |
| [ReliefEntries](#reliefentries) | `int` | get | This property retrieves the number of relief entries for a pad/via object. |
| [Selected](#selected) | `bool` | get; set | This property determines whether this object is selected or not on the PCB document. |
| [SolderMaskExpansion](#soldermaskexpansion) | `int` | get | The solder mask expansion of the object, in internal units (10,000 per mil). |
| [TearDrop](#teardrop) | `bool` | get; set | This property determines whether the PCB object (an arc or track object) is used for as a tear drop. |
| [UnionIndex](#unionindex) | `int` | get; set | The property denotes the union index. |
| [UniqueId](#uniqueid) | `string` | get |  |
| [UniqueID](#uniqueid-1) | `string` | set |  |
| [Used](#used) | `bool` | get; set |  |
| [UserRouted](#userrouted) | `bool` | get; set |  |
| [V7Layer](#v7layer) | [V7_LayerBase](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/V7_LayerBase.md) | get; set | The layer the object is on. |
| [ViewableObjectID](#viewableobjectid) | [TViewableObjectID](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TViewableObjectID.md) | get | The read only property determines the `ViewableObjectID` of the design object. |

### AllowGlobalEdit

*No description yet.*

```csharp
bool GetState_AllowGlobalEdit();
void SetState_AllowGlobalEdit(bool argValue);
```

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

### Board

The Board property determines the PCB document that the object itself is associated with.

```csharp
IPCB_Board GetState_Board();
void SetState_Board(IPCB_Board argBoard);
```

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

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

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

### Component

This property determines whether the object itself is associated with the component or not.

```csharp
IPCB_Component GetState_Component();
void SetState_Component(IPCB_Component argValue);
```

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

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

### Coordinate

The Coordinate property returns the [`IPCB_Coordinate`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Coordinate.md) only if this object itself is part of the [`IPCB_Coordinate`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Coordinate.md) type. A coordinate object is a group object and is composed of design object primitives such as tracks, arcs and text objects.

```csharp
IPCB_Coordinate GetState_Coordinate();
void SetState_Coordinate(IPCB_Coordinate argValue);
```

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

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

### DescriptorString

The Descriptor read only property fetches the Descriptor string.

```csharp
string GetState_DescriptorString();
```

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

### DetailString

This property retrieves the Detail text string for this design object.

```csharp
string GetState_DetailString();
```

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

### Dimension

The dimension the object belongs to, or null when it is not part of a dimension.

```csharp
IPCB_Dimension GetState_Dimension();
void SetState_Dimension(IPCB_Dimension argValue);
```

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

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

### DrawAsPreview

*No description yet.*

```csharp
bool GetState_DrawAsPreview();
void SetState_DrawAsPreview(bool argValue);
```

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

### DRCError

The `DRCError` property determines whether the object is affected by the Design Rule Checker and thus if the object breaks one of the design rules, the `DRCError` is true.

```csharp
bool GetState_DRCError();
void SetState_DRCError(bool argValue);
```

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

### Enabled

*No description yet.*

```csharp
bool GetState_Enabled();
void SetState_Enabled(bool argValue);
```

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

### Enabled_Direct

*No description yet.*

```csharp
bool GetState_Enabled_Direct();
void SetState_Enabled_Direct(bool argValue);
```

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

### Enabled_vComponent

*No description yet.*

```csharp
bool GetState_Enabled_vComponent();
void SetState_Enabled_vComponent(bool argValue);
```

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

### Enabled_vCoordinate

*No description yet.*

```csharp
bool GetState_Enabled_vCoordinate();
void SetState_Enabled_vCoordinate(bool argValue);
```

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

### Enabled_vDimension

*No description yet.*

```csharp
bool GetState_Enabled_vDimension();
void SetState_Enabled_vDimension(bool argValue);
```

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

### Enabled_vNet

*No description yet.*

```csharp
bool GetState_Enabled_vNet();
void SetState_Enabled_vNet(bool argValue);
```

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

### Enabled_vPolygon

*No description yet.*

```csharp
bool GetState_Enabled_vPolygon();
void SetState_Enabled_vPolygon(bool argValue);
```

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

### EnableDraw

*No description yet.*

```csharp
bool GetState_EnableDraw();
void SetState_EnableDraw(bool argValue);
```

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

### Handle

*No description yet.*

```csharp
string GetState_Handle();
```

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

### Identifier

*No description yet.*

```csharp
string GetState_Identifier();
```

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

### InBoard

This `InBoard` property determines whether the object itself is part of the board object or not.

```csharp
bool GetState_InBoard();
void SetState_InBoard(bool argValue);
```

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

### InComponent

This `InComponent` property determines whether the object itself is part of the component object or not.

```csharp
bool GetState_InComponent();
void SetState_InComponent(bool argValue);
```

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

### InCoordinate

This `InCoordinate` property determines whether the object itself is part of the coordinate object or not.

```csharp
bool GetState_InCoordinate();
void SetState_InCoordinate(bool argValue);
```

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

### Index

*No description yet.*

```csharp
ushort GetState_Index();
void SetState_Index(ushort argIndex);
```

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

### InDimension

This `InDimension` property determines whether the object itself is part of the dimension object or not.

```csharp
bool GetState_InDimension();
void SetState_InDimension(bool argValue);
```

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

### InNet

*No description yet.*

```csharp
bool GetState_InNet();
void SetState_InNet(bool argValue);
```

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

### InPolygon

This `InPolygon` property determines whether the object itself is part of the polygon object or not.

```csharp
bool GetState_InPolygon();
void SetState_InPolygon(bool argValue);
```

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

### InSelectionMemory

*No description yet.*

```csharp
bool GetState_InSelectionMemory(int argIndex);
void SetState_InSelectionMemory(int argIndex, bool argValue);
```

**Type:** `bool` · **Access:** read/write · **Index:** `argIndex` (`int`): The selection memory, from 0 to 7.

Setting the property for an index outside 0 to 7 has no effect.

### IsAssyTestPoint_Bottom

*No description yet.*

```csharp
bool GetState_IsAssyTestPoint_Bottom();
void SetState_IsAssyTestPoint_Bottom(bool argValue);
```

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

### IsAssyTestPoint_Top

*No description yet.*

```csharp
bool GetState_IsAssyTestPoint_Top();
void SetState_IsAssyTestPoint_Top(bool argValue);
```

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

### IsElectricalPrim

This property determines whether this PCB object possesses an electrical property- tracks, fills, polygons, arcs, vias all have electrical properties - basically those objects that have a Net property will possess an electrical property.

```csharp
bool GetState_IsElectricalPrim();
```

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

Embedded boards and Embedded objects etc don't have an electrical property for example.

### IsKeepout

This property determines whether a PCB object is used as a keep-out object. Currently arc, track and fill objects are used as keep out objects. The keepout layer generally defines areas on the PCB document that you don't want automatically or manually routed, and this can include clearance areas around mounting hole pads or high voltage components for example.

```csharp
bool GetState_IsKeepout();
void SetState_IsKeepout(bool argValue);
```

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

### IsPreRoute

*No description yet.*

```csharp
bool GetState_IsPreRoute();
void SetState_IsPreRoute(bool argB);
```

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

### IsTenting

This property determines whether the solder mask of pad and via objects are tented on top and bottom layers. A tenting closes an opening in the mask of pad or via objects.

```csharp
bool GetState_IsTenting();
void SetState_IsTenting(bool argValue);
```

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

### IsTenting_Bottom

This property determines whether the solder mask of pad and via objects are tented or not on the bottom layer. A tenting closes an opening in the mask of pad or via objects.

```csharp
bool GetState_IsTenting_Bottom();
void SetState_IsTenting_Bottom(bool argValue);
```

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

### IsTenting_Top

This property determines whether the solder mask of pad and via objects are tented or not on the top layer. A tenting closes an opening in the mask of pad or via objects.

```csharp
bool GetState_IsTenting_Top();
void SetState_IsTenting_Top(bool argValue);
```

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

### IsTestPoint_Bottom

*No description yet.*

```csharp
bool GetState_IsTestPoint_Bottom();
void SetState_IsTestPoint_Bottom(bool argValue);
```

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

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

### IsTestPoint_Top

*No description yet.*

```csharp
bool GetState_IsTestPoint_Top();
void SetState_IsTestPoint_Top(bool argValue);
```

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

### Layer

The layer the object is on, as a [`TV6_Layer`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md).

```csharp
TV6_Layer GetState_Layer();
void SetState_Layer(TV6_Layer argLayer);
```

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

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

A layer that [`TV6_Layer`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TV6_Layer.md) cannot represent reads as the nearest value; mid layers above 30 as `TV6_Layer.eV6_MidLayer30`, internal planes above 16 as `TV6_Layer.eV6_InternalPlane16`, mechanical layers above 16 as `TV6_Layer.eV6_Mechanical16`, and other layers as `TV6_Layer.eV6_NoLayer`. [`V7Layer`](#v7layer) gives the exact layer.

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

### MiscFlag1

This property determines the boolean value from the `MiscFlag1` property and can be used for custom purposes.

```csharp
bool GetState_MiscFlag1();
void SetState_MiscFlag1(bool argValue);
```

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

### MiscFlag2

This property determines the boolean value from the `MiscFlag2` property and can be used for custom purposes.

```csharp
bool GetState_MiscFlag2();
void SetState_MiscFlag2(bool argValue);
```

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

### MiscFlag3

This property determines the boolean value from the `MiscFlag3` property and can be used for custom purposes.

```csharp
bool GetState_MiscFlag3();
void SetState_MiscFlag3(bool argValue);
```

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

### Moveable

This property determines whether this design object can be moved or not (by the autorouter for example).

```csharp
bool GetState_Moveable();
void SetState_Moveable(bool argValue);
```

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

### Net

The Net property of an object denotes it has an electrical property, meaning it is connected from one node to another.

```csharp
IPCB_Net GetState_Net();
void SetState_Net(IPCB_Net argValue);
```

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

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

### ObjectID

*No description yet.*

```csharp
TObjectId GetState_ObjectID();
```

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

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

### ObjectIDString

This `ObjectIDString` property returns the Object Id string. For example eTrackObject type will yield a Track string.

```csharp
string GetState_ObjectIDString();
```

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

### PadCacheRobotFlag

Not used; the property reads false, and setting it has no effect.

```csharp
bool GetState_PadCacheRobotFlag();
void SetState_PadCacheRobotFlag(bool argValue);
```

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

### PasteMaskExpansion

The paste mask expansion of the object, in internal units (10,000 per mil).

```csharp
int GetState_PasteMaskExpansion();
```

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

The value comes from the paste mask expansion rule that applies to the object, or is the object's manual expansion when it has one; it is 0 when the object has no paste mask.

### Polygon

This method retrieves the [`IPCB_Polygon`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Polygon.md) interface that the design object primitive is associated with. For example, a polygon may contain arcs and tracks, and when you only have the arc, you can retrieve the polygon the arc is associated with.

```csharp
IPCB_Polygon GetState_Polygon();
void SetState_Polygon(IPCB_Polygon argValue);
```

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

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

### PolygonOutline

This method determines whether the design object primitive is part of the polygon outline or not.

```csharp
bool GetState_PolygonOutline();
void SetState_PolygonOutline(bool argValue);
```

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

### PowerPlaneClearance

The power plane clearance of the object, in internal units (10,000 per mil).

```csharp
int GetState_PowerPlaneClearance();
```

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

The value comes from the power plane clearance rule that applies to the object.

### PowerPlaneConnectStyle

The style of the object's connection to power planes.

```csharp
TPlaneConnectStyle GetState_PowerPlaneConnectStyle();
```

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

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

The value comes from the power plane connect style rule that applies to the object; `TPlaneConnectStyle.eNoConnect` when no rule applies.

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

### PowerPlaneReliefExpansion

The relief expansion of the object's power plane connection, in internal units (10,000 per mil).

```csharp
int GetState_PowerPlaneReliefExpansion();
```

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

The value comes from the power plane connect style rule that applies to the object.

### Preview

*No description yet.*

```csharp
void SetState_Preview(bool argEnable, uint argColor, float argOpacity, int argz, int argHeight, float argsx, float argsy, float argSZ);
```

**Type:** `float` · **Access:** write-only · **Index:** `argEnable` (`bool`), `argColor` (`uint`), `argOpacity` (`float`), `argz` (`int`), `argHeight` (`int`), `argsx` (`float`), `argsy` (`float`)

### ReliefAirGap

The `ReliefAirGap` property retrieves the relief air gap value for this pad/via object, in internal units (10,000 per mil).

```csharp
int GetState_ReliefAirGap();
```

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

The value comes from the power plane connect style rule that applies to the object.

### ReliefConductorWidth

The relief conductor width of the pad or via, in internal units (10,000 per mil).

```csharp
int GetState_ReliefConductorWidth();
```

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

The value comes from the power plane connect style rule that applies to the object.

### ReliefEntries

This property retrieves the number of relief entries for a pad/via object.

```csharp
int GetState_ReliefEntries();
```

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

The value comes from the power plane connect style rule that applies to the object.

### Selected

This property determines whether this object is selected or not on the PCB document.

```csharp
bool GetState_Selected();
void SetState_Selected(bool argB);
```

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

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

### SolderMaskExpansion

The solder mask expansion of the object, in internal units (10,000 per mil).

```csharp
int GetState_SolderMaskExpansion();
```

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

The value comes from the solder mask expansion rule that applies to the object (its top side expansion), or is the object's manual expansion when it has one; it is 0 when the object has no solder mask.

A Solder Mask expansion property for a pad object is currently relevant just for pads on top and bottom copper layers.

### TearDrop

This property determines whether the PCB object (an arc or track object) is used for as a tear drop.

```csharp
bool GetState_TearDrop();
void SetState_TearDrop(bool argValue);
```

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

### UnionIndex

The property denotes the union index. Unions are sets of components that will be manipulated as a block for the PCB placement. Components in a union maintain their relative positions within the union as they are moved for example.

```csharp
int GetState_UnionIndex();
void SetState_UnionIndex(int argValue);
```

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

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

### UniqueId

*No description yet.*

```csharp
string GetState_UniqueId();
```

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

### UniqueID

*No description yet.*

```csharp
void SetState_UniqueID(string argValue);
```

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

### Used

*No description yet.*

```csharp
bool GetState_Used();
void SetState_Used(bool argValue);
```

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

### UserRouted

*No description yet.*

```csharp
bool GetState_UserRouted();
void SetState_UserRouted(bool argValue);
```

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

### V7Layer

The layer the object is on.

```csharp
V7_LayerBase GetState_V7Layer();
void SetState_V7Layer(V7_LayerBase argL);
```

**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_PrimitiveHelper` (`using PCB;`).

Identifies every layer, including the layers that `Layer` cannot represent.

### ViewableObjectID

The read only property determines the `ViewableObjectID` of the design object. The [`TViewableObjectID`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TViewableObjectID.md) type is a more descriptive ID of a design object than the TObjectID type.

```csharp
TViewableObjectID GetState_ViewableObjectID();
```

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

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

For example any type of dimension object is a eDimension type according to the TObjectID but could be one of the eViewableObject_LinearDimension...eViewableObject_RadialDiameterDimension value.

This [`TViewableObjectID`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TViewableObjectID.md) type is mainly used by the Inspector and List views in Altium Designer and is an extension of TObjectID type.

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

## Methods

| Method | Returns | Description |
| --- | --- | --- |
| [BeginModify](#beginmodify) | `void` | Starts a change of the object; saves the object's state and tells the board that the object is about to change. |
| [BoundingRectangle](#boundingrectangle) | [CoordRect](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/CoordRect.md) | This method returns the coordinates of the bounding rectangle that encapsulates the design object on a PCB document. |
| [BoundingRectangleChildren](#boundingrectanglechildren) | [CoordRect](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/CoordRect.md) |  |
| [BoundingRectangleForPainting](#boundingrectangleforpainting) | [CoordRect](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/CoordRect.md) | The bounding rectangle of a design object for painting is potentially the largest of all bounding rectangles because for example a component can have comment and designator objects as well. |
| [BoundingRectangleForSelection](#boundingrectangleforselection) | [CoordRect](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/CoordRect.md) | The bounding rectangle of a design object used for selection is a bit bigger than the bounding rectangle of a design object itself. |
| [CancelModify](#cancelmodify) | `void` | Ends a change started with [`BeginModify`](#beginmodify) and restores the object's state that [`BeginModify`](#beginmodify) saved. |
| [EndModify](#endmodify) | `void` | Ends a change started with [`BeginModify`](#beginmodify) and tells the board that the object has changed. |
| [Export_ToParameters](#export_toparameters) | `void` |  |
| [FlipXY](#flipxy) | `void` | This method flips the object about the axis depending on Axis and MirrOp parameters. |
| [GraphicallyInvalidate](#graphicallyinvalidate) | `void` | Redraws the object in the board's view. |
| [IsFreePrimitive](#isfreeprimitive) | `bool` | This method determines whether the object is a free primitive (not connected to a net) or just a standalone object. |
| [IsHidden](#ishidden) | `bool` | Returns whether this object is hidden from view. |
| [IsSaveable](#issaveable) | `bool` | This method determines whether this particular object can be saved in a specified file format version according to the [`TAdvPCBFileFormatVersion`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TAdvPCBFileFormatVersion.md) type. |
| [MoveByXY](#movebyxy) | `void` | Moves the design object by an offset in horizontal and vertical directions. |
| [MoveToXY](#movetoxy) | `void` | Moves the design object to a new location. |
| [Replicate](#replicate) | [IPCB_Primitive](#) | Returns a copy of the object. |
| [RequiredParamterSpace](#requiredparamterspace) | `int` |  |
| [RotateBy](#rotateby) | `void` | Rotates the object by an angle about its reference point. |
| [SwapLayerPairs](#swaplayerpairs) | `void` | This method swaps the current layer pair that the PCB design object (vias and pads only) has. |

### BeginModify

Starts a change of the object; saves the object's state and tells the board that the object is about to change.

```csharp
void BeginModify();
```

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

End the change with [`EndModify`](#endmodify), or with [`CancelModify`](#cancelmodify) to restore the saved state. When the object is on a board, the board's undo history is one of the receivers of the notification.

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

### BoundingRectangle

This method returns the coordinates of the bounding rectangle that encapsulates the design object on a PCB document. There are other two bounding rectangle methods.

```csharp
CoordRect BoundingRectangle();
```

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

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

### BoundingRectangleChildren

*No description yet.*

```csharp
CoordRect BoundingRectangleChildren();
```

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

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

### BoundingRectangleForPainting

The bounding rectangle of a design object for painting is potentially the largest of all bounding rectangles because for example a component can have comment and designator objects as well.

```csharp
CoordRect BoundingRectangleForPainting();
```

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

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

### BoundingRectangleForSelection

The bounding rectangle of a design object used for selection is a bit bigger than the bounding rectangle of a design object itself.

```csharp
CoordRect BoundingRectangleForSelection();
```

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

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

### CancelModify

Ends a change started with [`BeginModify`](#beginmodify) and restores the object's state that [`BeginModify`](#beginmodify) saved.

```csharp
void CancelModify();
```

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

### EndModify

Ends a change started with [`BeginModify`](#beginmodify) and tells the board that the object has changed.

```csharp
void EndModify();
```

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

Also updates the board's connectivity for the object. When the object has no board, no notification is sent.

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

### Export_ToParameters

*No description yet.*

```csharp
void Export_ToParameters(ref string argParams);
```

| Parameter | Type | Passing |
| --- | --- | --- |
| `argParams` | `string` | ref |

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

### FlipXY

This method flips the object about the axis depending on Axis and MirrOp parameters.

```csharp
void FlipXY(int argxis, TMirrorOperation argMirrOp);
void FlipXY(int argxis, int argMirrOp);
```

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

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

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

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

### GraphicallyInvalidate

Redraws the object in the board's view.

```csharp
void GraphicallyInvalidate();
```

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

Does nothing for the board itself or for an object that has no board.

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

### IsFreePrimitive

This method determines whether the object is a free primitive (not connected to a net) or just a standalone object.

```csharp
bool IsFreePrimitive();
```

**Returns:** `bool`

### IsHidden

Returns whether this object is hidden from view.

```csharp
bool IsHidden();
```

**Returns:** `bool`

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

### IsSaveable

This method determines whether this particular object can be saved in a specified file format version according to the [`TAdvPCBFileFormatVersion`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TAdvPCBFileFormatVersion.md) type.

```csharp
bool IsSaveable(TAdvPCBFileFormatVersion argVer);
bool IsSaveable(int argVer);
```

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

**Returns:** `bool`

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

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

### MoveByXY

Moves the design object by an offset in horizontal and vertical directions.

```csharp
void MoveByXY(int argX, int argY);
```

| Parameter | Type | Passing | Description |
| --- | --- | --- | --- |
| `argX` | `int` | value | The horizontal offset, in internal units (10,000 per mil). |
| `argY` | `int` | value | The vertical offset, in internal units (10,000 per mil). |

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

**Example:** Move the first selected object on the current board by a distance in a direction.

```csharp
using PCB;

IPCB_Board board = PCB.GlobalVars.PCBServer?.GetCurrentPCBBoard();
if (board == null || board.GetState_SelectecObjectCount() == 0)
    return;
IPCB_Primitive pcbObject = board.GetState_SelectecObject(0);
// Sample values: the distance and the direction (in radians) of the move.
int distanceStep = EDP.Utils.MilsToCoord(100);
double angleStep = Math.PI / 4;

//Move the object by a specified offset
int xStep = (int)(distanceStep * Math.Cos(angleStep));
int yStep = (int)(distanceStep * Math.Sin(angleStep));
pcbObject.MoveByXY(xStep, yStep);
```

### MoveToXY

Moves the design object to a new location.

```csharp
void MoveToXY(int argX, int argY);
```

| Parameter | Type | Passing | Description |
| --- | --- | --- | --- |
| `argX` | `int` | value | The X coordinate of the new location, in internal units (10,000 per mil). |
| `argY` | `int` | value | The Y coordinate of the new location, in internal units (10,000 per mil). |

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

### Replicate

Returns a copy of the object.

```csharp
IPCB_Primitive Replicate();
```

**Returns:** [IPCB_Primitive](#)

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

### RequiredParamterSpace

*No description yet.*

```csharp
int RequiredParamterSpace();
```

**Returns:** `int`

### RotateBy

Rotates the object by an angle about its reference point.

```csharp
void RotateBy(double argngle);
```

| Parameter | Type | Passing | Description |
| --- | --- | --- | --- |
| `argngle` | `double` | value | The angle, in degrees. |

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

### SwapLayerPairs

This method swaps the current layer pair that the PCB design object (vias and pads only) has.

```csharp
void SwapLayerPairs();
```

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

## Returned by

[IPCB_AbstractIterator.FirstPCBObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#firstpcbobject), [IPCB_AbstractIterator.NextPCBObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AbstractIterator.md#nextpcbobject), [IPCB_AccordinGraphicIterator.First](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AccordinGraphicIterator.md#first), [IPCB_AccordinGraphicIterator.Next](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_AccordinGraphicIterator.md#next), [IPCB_BackDrilling.SourceObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BackDrilling.md#sourceobject), [IPCB_Board.GetLastClickedObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#getlastclickedobject), [IPCB_Board.GetObjectAtCursor](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#getobjectatcursor), [IPCB_Board.GetObjectAtXYAskUserIfAmbiguous](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#getobjectatxyaskuserifambiguous), [IPCB_Board.SelectecObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#selectecobject), [IPCB_Component.Getstate_PadByName](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Component.md#getstate_padbyname), [IPCB_Coordinate.Text](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Coordinate.md#text), [IPCB_Coordinate.Track1](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Coordinate.md#track1), [IPCB_Coordinate.Track2](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Coordinate.md#track2), [IPCB_CustomPadShape.CustomShape](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_CustomPadShape.md#customshape), [IPCB_CustomPadShape.ExtractedPrimitiveOnLayer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_CustomPadShape.md#extractedprimitiveonlayer), [IPCB_DocumentPainterView.FocusedPrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterView.md#focusedprimitive), [IPCB_DrillTableGraphicIterator.First](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillTableGraphicIterator.md#first), [IPCB_DrillTableGraphicIterator.Next](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DrillTableGraphicIterator.md#next), [IPCB_Group.GetPrimitiveAt](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Group.md#getprimitiveat), [IPCB_Group.ReplicateWithChildren](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Group.md#replicatewithchildren), [IPCB_GroupComparisionResult.GetPrimitiveForLayer](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GroupComparisionResult.md#getprimitiveforlayer), [IPCB_Net.Getstate_PadByName](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Net.md#getstate_padbyname), [IPCB_Net.Getstate_PadByPinDescription](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Net.md#getstate_padbypindescription), [IPCB_OriginalDimension.Track1](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OriginalDimension.md#track1), [IPCB_OriginalDimension.Track2](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OriginalDimension.md#track2), [IPCB_OriginalDimension.Track3](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OriginalDimension.md#track3), [IPCB_OriginalDimension.Track4](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OriginalDimension.md#track4), [IPCB_OriginalDimension.Track5](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OriginalDimension.md#track5), [IPCB_OriginalDimension.Track6](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OriginalDimension.md#track6), [IPCB_OriginalDimension.Track7](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OriginalDimension.md#track7), [IPCB_OriginalDimension.Track8](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_OriginalDimension.md#track8), [IPCB_PinPair.CastToPrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PinPair.md#casttoprimitive), [IPCB_PinPair.GetPrimitives](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PinPair.md#getprimitives), [IPCB_PrimitiveList.Get](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PrimitiveList.md#get), [IPCB_RealPlacementGuide.SourceObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_RealPlacementGuide.md#sourceobject), [IPCB_ServerInterface.PCBObjectFactory](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbobjectfactory), [IPCB_SharedUnion.OwnerPrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_SharedUnion.md#ownerprimitive), [IPCB_Violation.Primitive1](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Violation.md#primitive1), [IPCB_Violation.Primitive2](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Violation.md#primitive2), [IPCB_Violation.Rule](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Violation.md#rule), and 1 more.

## Accepted by

[IPCB_Board.AddObjectToHighlightObjectList](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#addobjecttohighlightobjectlist), [IPCB_Board.AddPCBObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#addpcbobject), [IPCB_Board.DispatchMessage](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#dispatchmessage), [IPCB_Board.FindDominantRuleForObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#finddominantruleforobject), [IPCB_Board.FindDominantRuleForObjectPair](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#finddominantruleforobjectpair), [IPCB_Board.FindLinkedBoardLibrary](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#findlinkedboardlibrary), [IPCB_Board.FindLinkedBoardTemplate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#findlinkedboardtemplate), [IPCB_Board.HidePCBObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#hidepcbobject), [IPCB_Board.InvertPCBObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#invertpcbobject), [IPCB_Board.LinkToTemplate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#linktotemplate), [IPCB_Board.PrimPrimDistance](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#primprimdistance), [IPCB_Board.RemovePCBObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#removepcbobject), [IPCB_Board.SelectedObjects_Add](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#selectedobjects_add), [IPCB_Board.ShowPCBObject](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#showpcbobject), [IPCB_Board.UnlinkFromTemplate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#unlinkfromtemplate), [IPCB_Board.ViewManager_GraphicallyInvalidatePrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#viewmanager_graphicallyinvalidateprimitive), [IPCB_BoardEx.Drillmanager_GetDrillSymbolIndex](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardEx.md#drillmanager_getdrillsymbolindex), [IPCB_BoardEx.GetSignalDelayForPrim](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardEx.md#getsignaldelayforprim), [IPCB_BoardEx.GetSignalDelayPerMeter](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardEx.md#getsignaldelaypermeter), [IPCB_BoardEx2.GetBoardRegionForPrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardEx2.md#getboardregionforprimitive), [IPCB_BoardEx2.GetLayerStackForPrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardEx2.md#getlayerstackforprimitive), [IPCB_BoardOutline.HitPrimitive_1](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutline.md#hitprimitive_1), [IPCB_BoardOutlineClearanceConstraint.GetObstacleTracks](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_BoardOutlineClearanceConstraint.md#getobstacletracks), [IPCB_ClearanceConstraint.Clearance](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ClearanceConstraint.md#clearance), [IPCB_ClearanceConstraint.PrimitivesViolate](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ClearanceConstraint.md#primitivesviolate), [IPCB_ConnectivityGraph.FindShortestPath](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ConnectivityGraph.md#findshortestpath), [IPCB_ContourMaker.MakeContour](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ContourMaker.md#makecontour), [IPCB_ContourMaker2.MakeContour_10](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ContourMaker2.md#makecontour_10), [IPCB_Dimension.References_IndexOf](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Dimension.md#references_indexof), [IPCB_DocumentPainterListener.OnBeginDrag](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterListener.md#onbegindrag), [IPCB_DocumentPainterListener.OnClick](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterListener.md#onclick), [IPCB_DocumentPainterListener.OnDragging](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterListener.md#ondragging), [IPCB_DocumentPainterListener.OnEndDrag](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterListener.md#onenddrag), [IPCB_DocumentPainterView.AddOrUpdatePrim](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterView.md#addorupdateprim), [IPCB_DocumentPainterView.FocusPrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterView.md#focusprimitive), [IPCB_DocumentPainterView.SelectPrimitive](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_DocumentPainterView.md#selectprimitive), [IPCB_GeometryMaker.BuildGeometry](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GeometryMaker.md#buildgeometry), [IPCB_GridManager.AddHorizontalGuide](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GridManager.md#addhorizontalguide), [IPCB_GridManager.AddMinus45DegreeGuide](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GridManager.md#addminus45degreeguide), [IPCB_GridManager.AddPlus45DegreeGuide](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_GridManager.md#addplus45degreeguide), and 56 more.

## Examples

Used in the SDK examples: [Extension_PCBUndoRedo](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PCBUndoRedo/Source%20Code/Commands.cs#L44), [Extension_PcbLibToImage](https://github.com/AltiumDeveloper/ad-sdk-examples/blob/5b144f54740a53ec578b3b6c3f902b831e0b1144/Extension_PcbLibToImage/Source%20Code/Commands.cs#L49).
