
# IPCB_ObjectClass interface

A class on a PCB document, a named group of objects of one kind, such as nets or components, identified by its unique class name.

```csharp
public interface IPCB_ObjectClass : IPCB_Primitive
```

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

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

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

## Remarks

An object can belong to more than one class. [`MemberKind`](#memberkind) sets the kind of object the class holds: nets, components, from-tos, pads, layers, design channels, differential pairs, polygons, split planes, classes, xSignals or xNets. The members are stored as names (for example a net name or a component designator), not as references to the objects.

An ObjectClass object can be created with the [`IPCB_ServerInterface.PCBClassFactoryByClassMember`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbclassfactorybyclassmember) or [`IPCB_ServerInterface.PCBObjectFactory`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbobjectfactory) method.

A class created with [`IPCB_ServerInterface.PCBClassFactoryByClassMember`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbclassfactorybyclassmember) for `TClassMemberKind.eClassMemberKind_ObjectClass` or `TClassMemberKind.eClassMemberKind_xNetClass` holds other classes. Members are added to such a class with [`AddMember`](#addmember); [`AddMemberByName`](#addmemberbyname) does nothing, [`IsMember`](#ismember) returns false and [`MemberName`](#membername) returns an empty string.

## Properties

| Property | Type | Access | Description |
| --- | --- | --- | --- |
| [MemberKind](#memberkind) | [TClassMemberKind](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/TClassMemberKind.md) | get; set | The kind of object the class holds. |
| [MemberName](#membername) | `string` | get | The name of a member of the class. |
| [Name](#name) | `string` | get; set | The name of the class. |
| [SuperClass](#superclass) | `bool` | get; set | Whether the class implicitly contains all objects of its member kind, such as the "All Nets" class. |

### MemberKind

The kind of object the class holds.

```csharp
TClassMemberKind GetState_MemberKind();
void SetState_MemberKind(TClassMemberKind argValue);
```

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

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

The kind decides which objects [`IsValidObjectKind`](#isvalidobjectkind) accepts, and therefore what [`AddMember`](#addmember) and [`RemoveMember`](#removemember) do, and whether [`AddLayerMember`](#addlayermember) and [`RemoveLayerMember`](#removelayermember) have an effect. To find the classes of one kind on a board, iterate the board's `TObjectId.eClassObject` objects on `TV6_Layer.eV6_MultiLayer` and test `MemberKind`.

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

### MemberName

The name of a member of the class.

```csharp
string GetState_MemberName(int argI);
```

**Type:** `string` · **Access:** read-only · **Index:** `argI` (`int`): The zero-based index of the member.

Returns an empty string when the index is outside the member list, and for a class that holds other classes.

### Name

The name of the class.

```csharp
string GetState_Name();
void SetState_Name(string argValue);
```

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

For a class, `Identifier` returns the same value as `Name`.

### SuperClass

Whether the class implicitly contains all objects of its member kind, such as the "All Nets" class.

```csharp
bool GetState_SuperClass();
void SetState_SuperClass(bool argValue);
```

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

While `SuperClass` is true, [`IsMember`](#ismember) returns true for every name (with the exceptions listed there), and [`IsLayerMember`](#islayermember) decides from the class name instead of the stored members. The stored members are kept and can still be changed; they are ignored by these checks.

**Example:** Report which object classes on the current board are super classes.

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

IPCB_Board board = PCB.GlobalVars.PCBServer?.GetCurrentPCBBoard();
if (board == null)
    return;

var report = new List<string>();
IPCB_BoardIterator iterator = board.BoardIterator_Create();
iterator.AddFilter_ObjectSet(new PCB.TObjectSet { TObjectId.eClassObject });
iterator.AddFilter_AllLayers();
iterator.AddFilter_Method(TIterationMethod.eProcessAll);
for (var objectClass = iterator.FirstPCBObject() as IPCB_ObjectClass; objectClass != null; objectClass = iterator.NextPCBObject() as IPCB_ObjectClass)
{
    if (objectClass.GetState_SuperClass())
    {
        // This is a super class.
        switch (objectClass.GetState_MemberKind())
        {
            case TClassMemberKind.eClassMemberKind_Net: report.Add("All Nets"); break;
            case TClassMemberKind.eClassMemberKind_Component: report.Add("All Components"); break;
            case TClassMemberKind.eClassMemberKind_FromTo: report.Add("All FromTos"); break;
            case TClassMemberKind.eClassMemberKind_Pad: report.Add("All Pads"); break;
            case TClassMemberKind.eClassMemberKind_Layer: report.Add("All Layers"); break;
        }
    }
}
board.BoardIterator_Destroy(ref iterator);

DXP.Utils.ShowInfo(string.Join("\r\n", report), "Super Classes");
```

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

## Methods

| Method | Returns | Description |
| --- | --- | --- |
| [AddLayerMember](#addlayermember) | `void` | Adds a layer to a layer class. |
| [AddMember](#addmember) | `void` | Adds a design object to the class. |
| [AddMemberByName](#addmemberbyname) | `void` | Adds a member to the class by its name, such as a net name or a component designator. |
| [IsLayerMember](#islayermember) | `bool` | Returns whether a layer belongs to a layer class. |
| [IsMember](#ismember) | `bool` | Returns whether a name, such as a net name or a component designator, is a member of the class. |
| [IsValidObjectKind](#isvalidobjectkind) | `bool` | Returns whether a design object is of the kind this class holds, as set by [`MemberKind`](#memberkind). |
| [RemoveAllMembers](#removeallmembers) | `void` | Removes all the members of the class. |
| [RemoveLayerMember](#removelayermember) | `void` | Removes a layer from a layer class. |
| [RemoveMember](#removemember) | `void` | Removes a design object from the class. |

### AddLayerMember

Adds a layer to a layer class.

```csharp
void AddLayerMember(TV6_Layer argL);
void AddLayerMember(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_ObjectClassHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The layer is stored as a member name. The call does nothing unless [`MemberKind`](#memberkind) is `TClassMemberKind.eClassMemberKind_Layer`.

### AddMember

Adds a design object to the class.

```csharp
void AddMember(IPCB_Primitive argP);
void AddMember(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_ObjectClassHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The object's `Identifier` is stored as a member name. The call does nothing when the object is null or when [`IsValidObjectKind`](#isvalidobjectkind) returns false for it, so set [`MemberKind`](#memberkind) before adding members. A class that holds other classes cannot be added to itself.

### AddMemberByName

Adds a member to the class by its name, such as a net name or a component designator.

```csharp
void AddMemberByName(string argName);
```

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

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

The name is not checked against the objects on the board, and a name that is already a member is added again. [`IsMember`](#ismember) compares names case-sensitively, so the name must match the object's name exactly.

**Example:** Create a net class that contains the GND net on the current board.

```csharp
using PCB;

IPCB_ServerInterface pcbServer = PCB.GlobalVars.PCBServer;
IPCB_Board board = pcbServer?.GetCurrentPCBBoard();
if (board == null)
    return;

pcbServer.PreProcess();
IPCB_ObjectClass netClass = pcbServer.PCBClassFactoryByClassMember(TClassMemberKind.eClassMemberKind_Net);
netClass.SetState_SuperClass(false);
netClass.SetState_Name("NetGndClass");
netClass.AddMemberByName("GND");
board.AddPCBObject(netClass);
pcbServer.PostProcess();
```

### IsLayerMember

Returns whether a layer belongs to a layer class.

```csharp
bool IsLayerMember(TV6_Layer argL);
bool IsLayerMember(int argL);
```

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

**Returns:** `bool`

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

For a super class ([`SuperClass`](#superclass) is true) the result depends on `Name`: the class "All Layers" contains every layer, the classes "Electrical Layers", "Signal Layers" and "Component Layers" contain the electrical, signal and component layers, and for any other name the result is false. For any other class the result is true when the layer was added with [`AddLayerMember`](#addlayermember).

### IsMember

Returns whether a name, such as a net name or a component designator, is a member of the class.

```csharp
bool IsMember(string argS);
```

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

**Returns:** `bool`

For a super class ([`SuperClass`](#superclass) is true) the result is true for every name. Otherwise the name is compared with the stored member names; the comparison is case-sensitive. Automatically generated component classes, such as the classes of the components on the top or the bottom side, are an exception: they decide membership from the component on the board instead. The SDK examples test whether an xSignal belongs to a class of kind `TClassMemberKind.eClassMemberKind_Signal` by passing the pin pair's [`IPCB_PinPair.Name`](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_PinPair.md#name).

### IsValidObjectKind

Returns whether a design object is of the kind this class holds, as set by [`MemberKind`](#memberkind).

```csharp
bool IsValidObjectKind(IPCB_Primitive argP);
bool IsValidObjectKind(object argP);
```

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

**Returns:** `bool`

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

Returns false for null. Nets are accepted by a class of nets or xNets, components, from-tos, pads, differential pairs and polygons by a class of that kind, pin pairs by a class of xSignals, and component classes by a class of design channels. A class of layers or split planes accepts no object; layers are added with [`AddLayerMember`](#addlayermember). A class that holds other classes accepts any class object. [`AddMember`](#addmember) and [`RemoveMember`](#removemember) use this check.

### RemoveAllMembers

Removes all the members of the class.

```csharp
void RemoveAllMembers();
```

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

`Name`, [`MemberKind`](#memberkind) and [`SuperClass`](#superclass) do not change.

### RemoveLayerMember

Removes a layer from a layer class.

```csharp
void RemoveLayerMember(TV6_Layer argL);
void RemoveLayerMember(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_ObjectClassHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The call does nothing unless [`MemberKind`](#memberkind) is `TClassMemberKind.eClassMemberKind_Layer`.

### RemoveMember

Removes a design object from the class.

```csharp
void RemoveMember(IPCB_Primitive argP);
void RemoveMember(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_ObjectClassHelper` (`using PCB;`) with typed parameters; the second is declared by the interface.

The object's `Identifier` is removed from the member names. The call does nothing when the object is null or when [`IsValidObjectKind`](#isvalidobjectkind) returns false for it.

## 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

[IPCB_ServerInterface.PCBClassFactory](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbclassfactory), [IPCB_ServerInterface.PCBClassFactoryByClassMember](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_ServerInterface.md#pcbclassfactorybyclassmember)

## Accepted by

[IPCB_Board.ClassNameIsUnique](https://altiumdeveloper.github.io/ad-sdk-docs/reference/pcb/IPCB_Board.md#classnameisunique)
