# SurfaceLocus class

Namespace: [Grasshopper2.Types.Shapes](https://developer.rhino3d.com/api/gh2/namespace/grasshopper2.types.shapes.md) · Assembly: [Grasshopper2](https://developer.rhino3d.com/api/gh2/assembly/grasshopper2.md)

```cs
[IoId("00000000-c694-461a-80c6-88f84488325b")]
public sealed class SurfaceLocus : IStorable, IEquatable<SurfaceLocus>, IComparable<SurfaceLocus>
```

Represents a parameter or locus on or near a surface. This type replaces the simple (u,v) surface parameters as used in RhinoCommon and Grasshopper 1.0 with a more flexible and forgiving approach.

The [SurfaceLocus.Kind](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/kind.md) says exactly how the coordinates and the indices are to be read; no meaning is hidden inside the index array. Every parametric locus stores two coordinates and every point three. Kinds which need fewer, SubD edges and vertices, pad the remainder with zeroes so that [SurfaceLocus.UV](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/uv.md) means something no matter which kind it is asked of.

## Constructors

- [SurfaceLocus](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/ctor.md): (2 overloads)

## Fields

- [Unset](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/unset.md): (static) The unset locus.

## Properties

- [CoordinateCount](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/coordinatecount.md): Gets the number of coordinates embedded in this locus.
- [IndexCount](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/indexcount.md): Gets the number of indices embedded in this locus.
- [IsValid](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/isvalid.md): Gets whether the locus is valid.
- [Kind](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/kind.md): Gets the kind of locus this is. The value may be one which this version of Grasshopper does not know, either because it was defined by a plug-in or because it was written by a newer version.
- [UV](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/uv.md): Gets the UV coordinate embedded in this locus. This is only meaningful if [SurfaceLocus.Kind](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/kind.md) is a parametric kind.
- [XYZ](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/xyz.md): Gets the 3D coordinate embedded in this locus. This is only meaningful if [SurfaceLocus.Kind](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/kind.md) equals [SurfaceLocusKind.Point](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocuskind.md).

## Methods

- [CompareTo](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/compareto.md)
- [Coordinate](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/coordinate.md): Gets the specified coordinate. If the index exceeds the coordinate array, zero will be returned.
- [Equals](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/equals.md): (2 overloads)
- [FromIntrinsic](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/fromintrinsic.md): (2 overloads, static) Create a surface locus from a uv parameter pair measured in the parameter space of a single indexed face.
- [FromMeshFacet](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/frommeshfacet.md): (static) Create a surface locus from a barycentric coordinate on a mesh face.
- [FromNormalised](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/fromnormalised.md): (2 overloads, static) Create a surface locus from a uv parameter pair in the normalised (0,1) space of a single indexed face.
- [FromPoint](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/frompoint.md): (static) Create a surface locus from a 3D point on or near a surface.
- [FromSubDParameter](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/fromsubdparameter.md): (static) Create a surface locus from a native SubD surface parameter. SubDs have no global (u,v) parameterisation, so a SubD locus addresses a face, an edge or a vertex by id, and stores whatever parameters that component needs.
- [GetHashCode](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/gethashcode.md)
- [IStorable.Store](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/grasshopperio-istorable-store.md)
- [IndexAt](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/indexat.md): Gets the specified index. If the index exceeds the index array, -1 will be returned.
- [ResolveToParameter](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/resolvetoparameter.md): (7 overloads)
- [ToString](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/tostring.md): (2 overloads)
- [TryParse](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/tryparse.md): (static)

## Convertors

- [operator implicit](https://developer.rhino3d.com/api/gh2/type/grasshopper2.types.shapes.surfacelocus/op-implicit.md): (2 overloads, static) Create a surface locus from a parameter.
