# Revit Utils Extensions

> >

- **Type:** Skill
- **Install:** `agentstack add skill-nice3point-revit-skills-revit-utils-extensions`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Nice3point](https://agentstack.voostack.com/s/nice3point)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Nice3point](https://github.com/Nice3point)
- **Source:** https://github.com/Nice3point/revit-skills/tree/main/plugins/revit-api/skills/revit-utils-extensions

## Install

```sh
agentstack add skill-nice3point-revit-skills-revit-utils-extensions
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Revit Utils Extensions

`Nice3point.Revit.Extensions` turns the Revit API into fluent, receiver-first calls of two kinds.
**Facades** re-express verbose `*Utils` static classes and `*Manager` getters as a call on the natural receiver — same behavior, read more clearly. Replace the raw call with the facade.
**Conveniences** add what the raw API has no single call for — enum/id/color converters, unit and numeric helpers, safe casts. Use them directly; there is nothing to replace.
A missing member means the `Nice3point.Revit.Extensions` package is not referenced.

## When to use

- Reaching for any `SomeUtils.Operation(document, id, …)` static call or a verbose `*Manager` getter.
- Converting a `BuiltInParameter`/`BuiltInCategory`/`ForgeTypeId`, formatting or parsing a unit, or reading a color as hex or RGB.

## When not to use

- Finding a set of elements in the model — use `revit-element-collector`.
- Reading or writing a parameter on an element you already hold — use `revit-element-and-parameter-access`.

## Recognize and replace

When the raw call is `SomeUtils.Operation(document, element.Id, …)` or a long getter, the facade is a method on the natural receiver.

```csharp
ElementTransformUtils.MoveElement(document, element.Id, new XYZ(1, 1, 0)); // raw
element.Move(1, 1, 0); // facade

LabelUtils.GetLabelFor(BuiltInParameter.WALL_TOP_OFFSET); // raw
BuiltInParameter.WALL_TOP_OFFSET.ToLabel(); // facade

UnitUtils.ConvertToInternalUnits(69, UnitTypeId.Millimeters); // raw
69d.FromMillimeters(); // facade

SolidUtils.SplitVolumes(solid); // raw
solid.SplitVolumes(); // facade
```

Many members are conveniences with no raw equivalent — use them directly rather than hand-writing the conversion:

```csharp
ElementId wallsId = BuiltInCategory.OST_Walls.ToElementId(); // enum -> id
Category category = BuiltInCategory.OST_Walls.ToCategory(document); // enum -> object
string hex = color.ToHex(); // Color -> "#RRGGBB"
```

## References

Each reference lists its domain's extensions in full — member, purpose, and a grounded example on the real receiver — with the raw
`*Utils` class named in each section heading. Load the one that matches the task instead of guessing a signature.

- [references/transforms-and-modeling.md](references/transforms-and-modeling.md) — **Load when:** moving, copying, joining, or cutting elements, or working with families, hosts, parts, assemblies, adaptive components, or masses.
- [references/geometry.md](references/geometry.md) — **Load when:** building or querying solids, bounding boxes, curves, points, tessellation, or view geometry.
- [references/units-labels-forge.md](references/units-labels-forge.md) — **Load when:** converting or formatting units, producing user-visible labels, or inspecting a `ForgeTypeId` spec, unit, or parameter.
- [references/converters-and-helpers.md](references/converters-and-helpers.md) — **Load when:** converting an enum to an id or object, reading a color representation, or reaching for numeric, string, cast, or application-capability helpers.
- [references/document-and-storage.md](references/document-and-storage.md) — **Load when:** reading the document version, getting a manager, working with global or project parameters, filtering parameters, or using extensible storage.
- [references/disciplines-and-interop.md](references/disciplines-and-interop.md) — **Load when:** working with MEP, structure, or analytical elements, or with model paths, worksharing, coordination models, export, external references, or DirectContext3D.

A newer Extensions package may expose members not shown here.
If the Utils wrapper not found, read the package [README](https://raw.githubusercontent.com/Nice3point/RevitExtensions/refs/heads/main/README.md).

## Validation

- [ ] Raw `*Utils` static calls and `*Manager` getters are replaced by the receiver-first facade.
- [ ] Behavior is unchanged — facades add no new logic.
- [ ] Unit and label conversions use the extensions, not manual `UnitUtils`/`LabelUtils` calls.
- [ ] Converters and helpers (`ToElementId`, `ToHex`, `Round`, …) replace hand-written equivalents.

## Common Pitfalls

| Pitfall                                              | Correct approach                                                                  |
|------------------------------------------------------|-----------------------------------------------------------------------------------|
| `ElementTransformUtils.MoveElement(document, id, v)` | `element.Move(x, y, z)`.                                                          |
| `LabelUtils.GetLabelFor(parameter)`                  | `parameter.ToLabel()`.                                                            |
| `document.Format(spec, value, forEditing)`           | `Format` lives on `Units`: `document.GetUnits().Format(spec, value, forEditing)`. |
| Assuming a facade changes behavior                   | Facades only re-express the raw API; semantics match.                             |
| Hand-writing an id, color, or unit converter         | Use the built-in `ToElementId`/`ToHex`/`FromMillimeters` conveniences.            |
| Extension not found                                  | The `Nice3point.Revit.Extensions` package is not referenced.                      |

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Nice3point](https://github.com/Nice3point)
- **Source:** [Nice3point/revit-skills](https://github.com/Nice3point/revit-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-nice3point-revit-skills-revit-utils-extensions
- Seller: https://agentstack.voostack.com/s/nice3point
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
