# Grasshopper2.UI.Skinning namespace

Assembly: [Grasshopper2](https://developer.rhino3d.com/api/gh2/assembly/grasshopper2.md)

## Classes

- [Binding](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.binding.md): The assignment of a skin property. Either set outright, or inherited from another property through zero or more modifiers.
- [CanvasSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.canvasskin.md): Immutable collection of canvas skin settings.
- [EdgeDescription](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.edgedescription.md): Immutable skin descriptor for edges (aka pens).
- [Fades](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.fades.md): A collection of related zoom-linked fading states. These typically are assigned from scratch for each drawing operation, and are thus not specified as a user setting.
- [GridSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.gridskin.md): A collection of visual properties for canvas grids.
- [GripSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.gripskin.md): Immutable collection of plug skin settings.
- [GripsSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.gripsskin.md): A collection of grip properties.
- [IconsSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.iconsskin.md): The icon part of a skin: the palette icons are drawn with, and the filter every icon colour passes through on its way to the screen. The filter is a stack of colour modifiers; by the time it arrives here any property references in it have been resolved, so it can run without a definition at hand. Results are memoised per input colour, since icons reuse a small set of colours many times per frame.
- [MessagingSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.messagingskin.md): Maintains messaging skin properties.
- [Modifier](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.md): A step applied to an inherited value on its way from the source property to the property that inherits it. Colour modifiers work in Oklab, so equal amounts look like equal changes. Amounts are integer percentages (or whole degrees for hue), which is as fine as the UI needs. The set of modifiers is closed; the nested types are all there are.
- [Modifier.Contrast](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.contrast.md): Stretches lightness away from mid-grey, or squeezes it towards mid-grey for negative percentages. Light colours get lighter and dark ones darker, so the order of a set of shades is kept; at -100% every colour has the same lightness. Chroma is left alone, that is what [Modifier.Saturation](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.saturation.md) is for.
- [Modifier.CopyHue](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.copyhue.md): Keeps the lightness and chroma of a colour but takes its hue from another colour. A neutral source has no hue to give, so it leaves the colour alone.
- [Modifier.Foreground](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.foreground.md): Produces a foreground colour that reads against the incoming colour: white for dark colours, black for light ones, moved by the given percentage. At 100% the result is pure black or white.
- [Modifier.Hue](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.hue.md): Rotates the hue of a colour by a whole number of degrees.
- [Modifier.Luminance](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.luminance.md): Lightens or darkens a colour. Negative percentages move the Oklab lightness towards black by that fraction, positive ones move it towards white.
- [Modifier.Mix](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.mix.md): Mixes a colour towards another colour, in Oklab, by a percentage.
- [Modifier.Offset](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.offset.md): Adds a number of canvas pixels, which may be fractional. Results never drop below zero.
- [Modifier.Opacity](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.opacity.md): Sets the opacity of a colour outright.
- [Modifier.Saturation](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.saturation.md): Scales the chroma of a colour. -100% makes it neutral, +50% makes it half again as saturated.
- [Modifier.Scale](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.modifier.scale.md): Multiplies a number by a percentage; 150% makes it half again as large.
- [Shade](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.shade.md): Immutable collection of shading colours for shapes.
- [Shades](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.shades.md): A collection of related shades.
- [Shape](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.shape.md): A collection of geometric properties for shapes.
- [Skin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skin.md): Represents a collection of immutable UI skinning settings.
- [SkinDefinition](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skindefinition.md): The editable source of a [Skin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skin.md). Every property of the skin is either set outright, inherited from another property through modifiers, or left unbound and taken from the built-in default. The Lit and Dim skins live in one definition and may inherit from each other; an unbound icon property does so on its own, following its twin in the other mode before it resorts to the built-in default. A definition compiles to a [Skin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skin.md) with [SkinDefinition.ToSkin(PropertyId)](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skindefinition/toskin.md).
- [SkinDefinitionText](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skindefinitiontext.md): The text form of a skin definition. One property per line: `// comment Lit.Shades.Apex.Normal = #E2E2E2 Lit.Shades.Slab.Normal = Lit.Shades.Apex.Normal | Luminance -20% Lit.Shape.Corners = 3 Lit.Icons.Filter = Saturation -70% | Mix Lit.Canvas.Paper 10% Lit.Wires.Dash.Null = 4 1` Colour literals use CSS notation: hex, oklch(), oklab() or rgb(), with an optional alpha after a slash. A filter is a bare stack of colour modifiers, or None. A dash pattern is dash and gap lengths in multiples of the wire width, or Solid. Everything else is this format's own.
- [SkinEditorCanvas](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skineditorcanvas.md): The skin editor's canvas: specimen capsules and wires drawn from the primitives with the skin a definition compiles to, under a layer of widgets that sit on the properties they control. Drawn straight to the control every frame, like the real canvas.
- [SkinEditorForm](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skineditorform.md): The window that hosts the skin editor canvas. One instance at a time. It edits one stored skin, named by the text box in the bar; Save writes it to the skins folder and, if the canvas uses that skin, re-applies it at once.
- [SkinProperties](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skinproperties.md): Static knowledge about skin properties: which combinations of [PropertyId](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.propertyid.md) bits exist, what kind of value each holds, and how identifiers are written as text.
- [SkinPropertyText](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skinpropertytext.md): Human wording for skin properties: a short title such as "Normal Edge" and a sentence saying what the property affects. Tokens are for files; these are for people.
- [SkinServer](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skinserver.md): The skins folder and everything that touches it. A skin is a text definition in [Folders.SkinsFolder](https://developer.rhino3d.com/api/gh2/type/grasshopper2.folders/skinsfolder.md), and its name is its file name; the canvas picks a skin by that name through [Settings.CanvasSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.settings/canvasskin.md), with an empty name meaning the built-in default. Files may be imported from and exported to anywhere. The skins shipped with Grasshopper, other than the default, are copied into the folder the first time it is used, and from then on are files like any other.
- [WireColours](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wirecolours.md): The colours of one wire group. The glow behind selected wires is shared by every group and lives on [WiresSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wiresskin.md).
- [WireEdges](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wireedges.md): The strokes of one kind of wire: the outer stroke and an optional lighter core.
- [WireSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wireskin.md): The look of one kind of wire: colours and strokes. Colours are shared between kinds by [WiresSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wiresskin.md); this is the resolved view for a single kind.
- [WiresSkin](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wiresskin.md): The look of every wire. Strokes are set per [WireKind](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wirekind.md), colours per [WireGroup](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wiregroup.md): item, list and tree wires always share one set of colours, while empty, disabled and tentative wires each have their own. The glow behind selected wires is one colour for all of them.

## Structs

- [ColourOperand](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.colouroperand.md): Either a literal colour or a reference to a colour property; the second operand of a mix.
- [FillDescription](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.filldescription.md): Immutable skin descriptor for brushes.
- [SkinValue](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skinvalue.md): The value of a skin property: a colour, a number, a filter or a dash pattern, never more than one.

## Enums

- [GripKind](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.gripkind.md): Enumerates the types of defined grip skins.
- [PropertyId](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.propertyid.md): Identifies a single property of a skin. An identifier is composed of one mode bit, one family bit, one role bit and zero or more variant bits, so the selected, hidden and disabled versions of a property share a role rather than being duplicated. Not every combination exists; the set of real properties is enumerated by [SkinProperties.All](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.skinproperties/all.md), and each role below says which families use it.
- [PropertyType](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.propertytype.md): The kind of value a skin property holds.
- [ShadeKind](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.shadekind.md): Enumerates the types of defined shading schemes.
- [WireGroup](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wiregroup.md): The groups of wires that share colours. Item, list and tree wires all carry data and look alike; only empty, disabled and tentative wires may deviate.
- [WireKind](https://developer.rhino3d.com/api/gh2/type/grasshopper2.ui.skinning.wirekind.md): Enumerates the types of defined wire skins.
