# SubDEdgeSharpness struct

Namespace: [Rhino.Geometry](https://developer.rhino3d.com/api/rhinocommon/namespace/rhino.geometry.md) · Assembly: [RhinoCommon](https://developer.rhino3d.com/api/rhinocommon/assembly/rhinocommon.md)

```cs
[StructLayout(LayoutKind.Sequential, Pack = 4, Size = 8)]
[DebuggerDisplay("{m_sharpness0}, {m_sharpness1}")]
public struct SubDEdgeSharpness : IEquatable<SubDEdgeSharpness>
```

Sharpness values for the two ends of a SubD edge.

A sharp SubD edge is an edge where the limit surface makes a tighter "fillet radius" around the edge than a smooth edge would, while still staying smooth, unlike a crease edge. It is achieved by applying the crease edge subdivision rules for the number of subdivisions given by the sharpness value, and the smooth edge subdivision rules after that. Sharpness can differ at the two ends of an edge.

**Remarks:** This is a value type wrapping two floats, and the default value is [SubDEdgeSharpness.Smooth](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/smooth.md). It is passed to and from the unmanaged library by value.

## Constructors

- [SubDEdgeSharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/ctor.md): (3 overloads) Creates a sharpness with the same value at both ends.

## Fields

- [CreaseValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/creasevalue.md): (static) The value used to indicate that an edge is a crease, [SubDEdgeSharpness.MaximumValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/maximumvalue.md) + 1.0. This is deliberately not a valid sharpness value: a crease edge is not a sharp edge. It exists because it is often convenient to use a single value to describe both.
- [MaximumValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/maximumvalue.md): (static) The largest valid sharpness value, 4.0. Valid SubD edge sharpness values are between 0.0 and MaximumValue.
- [SmoothValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/smoothvalue.md): (static) The sharpness value of a smooth edge, 0.0.
- [Tolerance](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/tolerance.md): (static) If a sharpness is within Tolerance of an integer value, it is snapped to that integer value. See [SubDEdgeSharpness.Sanitize(double)](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/sanitize.md).

## Properties

- [Average](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/average.md): Gets the average of the two end sharpness values.
- [Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md): (static) A sharpness of [SubDEdgeSharpness.CreaseValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/creasevalue.md) at both ends, used to indicate that an edge is a crease rather than a sharp edge. [SubDEdgeSharpness.IsValid](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvalid.md) is false for this value; see [SubDEdgeSharpness.IsValidOrCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvalidorcrease.md).
- [Delta](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/delta.md): Gets [EndSharpness(1)](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/endsharpness.md) - EndSharpness(0), or NaN if this is neither valid nor a crease.
- [IsConstant](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isconstant.md): Gets true if both ends have the same valid sharpness value. [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md) and [SubDEdgeSharpness.Nan](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/nan.md) are both false; see [SubDEdgeSharpness.IsConstantOrCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isconstantorcrease.md).
- [IsConstantOrCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isconstantorcrease.md): Gets true if both ends have the same valid sharpness value, or if this is [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md).
- [IsCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/iscrease.md): Gets true if this is [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md).
- [IsCreaseOrSharp](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/iscreaseorsharp.md): Gets ([SubDEdgeSharpness.IsCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/iscrease.md) || [SubDEdgeSharpness.IsSharp](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/issharp.md)).
- [IsDecreasing](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isdecreasing.md): Gets true if [EndSharpness(0)](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/endsharpness.md) is greater than EndSharpness(1).
- [IsIncreasing](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isincreasing.md): Gets true if [EndSharpness(0)](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/endsharpness.md) is less than EndSharpness(1).
- [IsNotValid](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isnotvalid.md): Gets the opposite of [SubDEdgeSharpness.IsValid](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvalid.md). [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md) and [SubDEdgeSharpness.Nan](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/nan.md) are both true.
- [IsNotValidNorCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isnotvalidnorcrease.md): Gets the opposite of [SubDEdgeSharpness.IsValidOrCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvalidorcrease.md). [SubDEdgeSharpness.Nan](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/nan.md) is true and [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md) is false.
- [IsSharp](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/issharp.md): Gets true if both ends are valid and at least one is greater than 0.0. [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md) and [SubDEdgeSharpness.Nan](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/nan.md) are both false: a crease edge is not a sharp edge.
- [IsValid](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvalid.md): Gets true if both ends are between 0.0 and [SubDEdgeSharpness.MaximumValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/maximumvalue.md). [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md) and [SubDEdgeSharpness.Nan](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/nan.md) are both false; see [SubDEdgeSharpness.IsValidOrCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvalidorcrease.md).
- [IsValidOrCrease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvalidorcrease.md): Gets true if both ends are between 0.0 and [SubDEdgeSharpness.MaximumValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/maximumvalue.md), or if this is [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md).
- [IsVariable](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvariable.md): Gets true if this is valid and the two ends differ. [SubDEdgeSharpness.Crease](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/crease.md) and [SubDEdgeSharpness.Nan](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/nan.md) are both false.
- [IsZero](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/iszero.md): Gets true if both ends are 0.0, which is the sharpness of a smooth edge.
- [Maximum](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/maximum.md): (static) A sharpness of [SubDEdgeSharpness.MaximumValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/maximumvalue.md) at both ends. This is the sharpest an edge can be without being a crease.
- [MaximumEndSharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/maximumendsharpness.md): Gets the larger of the two end sharpness values.
- [MinimumEndSharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/minimumendsharpness.md): Gets the smaller of the two end sharpness values.
- [Nan](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/nan.md): (static) A sharpness whose ends are both NaN. This is what the factory methods return when their input is not valid.
- [Smooth](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/smooth.md): (static) A sharpness of 0.0 at both ends, which is what a smooth edge has. This is also the default value of a [SubDEdgeSharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness.md).
- [Trend](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/trend.md): Gets +1 if the sharpness increases along the edge, -1 if it decreases, and 0 if it is constant. Returns [RhinoMath.UnsetIntIndex](https://developer.rhino3d.com/api/rhinocommon/type/rhino.rhinomath/unsetintindex.md) if this is not valid.

## Indexers

- [this[]](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/item.md): Gets the sharpness at the start or the end of the edge.

## Methods

- [CreateEdgeChainSharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/createedgechainsharpness.md): (static) Builds a sequence of evenly changing sharpnesses for the edges of a chain.
- [EndSharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/endsharpness.md): Gets the sharpness at the start or the end of the edge.
- [EqualDelta](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/equaldelta.md): (static) Determines whether two sharpnesses have the same [SubDEdgeSharpness.Delta](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/delta.md) and meet with the same value.
- [EqualEndSharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/equalendsharpness.md): (static) Determines whether two sharpnesses meet with the same value, that is, whether s0.[EndSharpness(1)](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/endsharpness.md) equals s1.EndSharpness(0).
- [Equals](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/equals.md): (2 overloads) Determines whether an object is a sharpness with the same end values as this one.
- [EqualTrend](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/equaltrend.md): (static) Determines whether two sharpnesses have the same [SubDEdgeSharpness.Trend](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/trend.md) and meet with the same value.
- [FromConstantPercentage](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/fromconstantpercentage.md): (static) Creates a sharpness with the same value at both ends, from a percentage. This is useful in user interface code that expresses sharpness as a percentage.
- [FromIntervalPercentage](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/fromintervalpercentage.md): (2 overloads, static) Creates a sharpness that varies from one end of the edge to the other, from percentages. This is useful in user interface code that expresses sharpness as a percentage.
- [GetHashCode](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/gethashcode.md): Gets a hash code for this sharpness.
- [IsValidValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/isvalidvalue.md): (static) Determines whether a value can be used as an edge end sharpness.
- [Reversed](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/reversed.md): Gets this sharpness with its two end values swapped.
- [Sanitize](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/sanitize.md): (2 overloads, static) Verifies that sharpness is between 0.0 and [SubDEdgeSharpness.MaximumValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/maximumvalue.md), and snaps it to an integer when it is within [SubDEdgeSharpness.Tolerance](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/tolerance.md) of one.
- [SharpnessFromNormalizedValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/sharpnessfromnormalizedvalue.md): (static) Converts a normalized slider value to an edge end sharpness value.
- [SharpnessFromSliderValue](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/sharpnessfromslidervalue.md): (static) Converts a user facing slider value to an edge end sharpness value.
- [Subdivided](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/subdivided.md): Gets the sharpness this edge would have after one subdivision.
- [ToPercentage](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/topercentage.md): (static) Converts a sharpness value to a percentage between 0.0 and 100.0.
- [ToPercentageText](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/topercentagetext.md): (2 overloads) Describes this sharpness as a percentage, for user interface code. A constant sharpness gives a single percentage, a variable one gives a range, and an invalid one gives a warning sign.
- [ToString](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/tostring.md): Returns a string that represents this sharpness as a percentage.
- [Union](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/union.md): (static) Gets the union of two sharpness ranges, ignoring the ones that are zero, a crease, or not valid.
- [VertexSharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/vertexsharpness.md): (static) Calculates the sharpness of a vertex from the sharp edges attached to it. Vertices tagged as corners always have a sharpness of 0.0.

## Operators

- [operator ==](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/op-equality.md): (static) Determines whether two sharpnesses have the same end values.
- [operator !=](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedgesharpness/op-inequality.md): (static) Determines whether two sharpnesses have different end values.

## See Also

- [SubDEdge.Sharpness](https://developer.rhino3d.com/api/rhinocommon/type/rhino.geometry.subdedge/sharpness.md)
