major-ai-skills
Version:
Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.
140 lines (106 loc) • 7.97 kB
Markdown
name: rhino
description: "Automate Rhino modeling through RhinoCommon, work with Grasshopper data trees, and configure Rhino.Compute workflows."
category: cad
risk: safe
source: self
source_type: self
date_added: "2026-08-26"
tags: ["rhino", "rhino-8", "grasshopper", "rhinocommon", "nurbs", "rhino-inside", "claude"]
tools: ["claude", "cursor", "gemini", "codex"]
# McNeel Rhinoceros (Rhino 8) AI Skill Guide (Claude)
## Overview & Engine Architecture
Robert McNeel & Associates Rhinoceros (Rhino 8) is the industry standard for mathematical NURBS modeling, SubD organic design, and Grasshopper parametric computation across architecture, marine engineering, and industrial design. Claude operates as a Senior Computational Designer and Geometry Pipeline Engineer, specializing in **RhinoCommon .NET/Python 3 APIs (`Rhino.Geometry`)**, **Grasshopper Data Tree optimization**, **NURBS surface continuity analysis (G0-G3)**, and **headless `compute.rhino3d` microservices**.
### Rhino 8 Engine Architecture & Computational Stack
```
┌─────────────────────────────────────────────────────────────┐
│ Rhino 8 Core Architecture │
│ │
│ Geometry Core (OpenNURBS Kernel) │
│ ├── NURBS Curves, Breps (Polysurfaces), SubD, and Meshes │
│ ├── Document Units & Absolute Tolerance Verification │
│ └── Grasshopper Visual Programming (Data Trees & Clusters) │
│ │
│ Automation & Headless Subsystems │
│ ├── RhinoCommon API (Native C# / Python 3.9 Runtime) │
│ ├── `rhinoscriptsyntax` & IronPython Legacy Wrappers │
│ ├── Rhino.Inside (Embed Rhino inside Revit, Unity, Python) │
│ └── Rhino.Compute (Headless Cloud Geometry Web Service) │
└─────────────────────────────────────────────────────────────┘
```
## Operational Capabilities & Agent Directives
1. **RhinoCommon & Python 3 Scripting**: Author high-performance Python scripts using `Rhino.Geometry` and `rhinoscriptsyntax` for procedural Brep booleans, bounding box nesting, and batch transformation.
2. **NURBS & Polysurface Boolean Diagnostics**: Remediate solid boolean failures by identifying naked edges, overlapping coplanar faces, and self-intersections relative to absolute document tolerance ($0.001\text{ mm}$).
3. **Grasshopper Data Tree Optimization**: Structure Grasshopper definitions to eliminate exponential data branch matching (`{A;B;C}`), using `Flatten`, `Graft`, `Simplify`, and `Path Mapper`.
4. **Headless Cloud Automation**: Construct command-line batch pipelines using `Rhino.exe -runscript` and REST payloads for `compute.rhino3d` servers.
## Production Python Automation: Batch Solid Boolean & STEP Exporter
Save this script and execute inside Rhino Python 3 editor or via `-runscript` to automate solid unioning, manifold edge checks, and STEP export:
```python
"""
Rhino 8 Automation: Batch Solid Union & Manifold STEP Exporter
Compatible with Rhino 8 CPython 3 and IronPython runtimes.
"""
import os
import rhinoscriptsyntax as rs
import scriptcontext as sc
import Rhino
def process_and_export_solids(output_step_path: str):
# 1. Select all Polysurfaces / Breps in Document
brep_ids = rs.ObjectsByType(rs.filter.polysurface | rs.filter.surface)
if not brep_ids:
print("Error: No surfaces or polysurfaces found in document.")
return
print(f"Found {len(brep_ids)} Brep objects. Validating solid status...")
# 2. Check for Non-Manifold / Naked Edges
solid_ids = []
for obj_id in brep_ids:
if rs.IsPolysurfaceClosed(obj_id):
solid_ids.append(obj_id)
else:
print(f"Warning: Object {obj_id} is an OPEN polysurface (Naked Edges detected).")
if not solid_ids:
print("No valid closed solids to process.")
return
# 3. Perform Solid Boolean Union
print(f"Executing Boolean Union on {len(solid_ids)} closed solids...")
union_result = rs.BooleanUnion(solid_ids, delete_input=False)
export_target_ids = union_result if union_result else solid_ids
# 4. Export Selected Geometry to STEP
os.makedirs(os.path.dirname(os.path.abspath(output_step_path)), exist_ok=True)
rs.SelectObjects(export_target_ids)
# Execute Silent CLI Export Command
cmd = f'-_Export "{output_step_path}" _Enter _Enter'
rs.Command(cmd, echo=False)
print(f"Successfully exported geometry to STEP: {output_step_path}")
if __name__ == "__main__":
process_and_export_solids("C:/Export/Assembled_Model.step")
```
## Technical Troubleshooting Matrix
| Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway |
| :--- | :--- | :--- |
| **`Boolean Difference Failed` on Closed Solids** | Input solids share coincident coplanar faces or intersection curve falls within document tolerance ($10^{-4}$). | 1. Run `ShowEdges` with **Naked Edges** selected.<br>2. Shift one solid by a micro-offset ($0.01\text{ mm}$) to break coincident face alignment.<br>3. Run `Intersect` to manually inspect the generated intersection curves for gaps. |
| **Grasshopper Freezes / High Memory on Tree Operations** | Unequal branch path depths (e.g. `{0;0}` matching against `{0;0;0}`) causing combinatorial explosion ($N \times M$ computations). | 1. Attach a **Simplify** or **Shift Paths** component to normalize data tree depths.<br>2. Enable **Grasshopper Profiler** (*Display $\rightarrow$ Canvas Widgets $\rightarrow$ Profiler*) to spot slow nodes.<br>3. Lock solvers (`F5`) before editing heavy definition networks. |
| **SubD to NURBS (`ToNURBS`) Yields Distorted Topology** | High-valence extraordinary vertices ($>6$ star points) in SubD cage producing tight knot spacing in Brep faces. | 1. In SubD edit mode, re-route edge loops to ensure all interior vertices have valence 4.<br>2. Set `ToNURBS` option `PackSubDFaces=True` to merge quad patches.<br>3. Check curvature with `Zebra` command. |
| **Rhino 3DM File Size Exceeds Hundreds of Megabytes** | Render mesh caches stored inside the file for dense polysurfaces. | 1. Run `ClearAllMeshes` command before saving.<br>2. Save with **Save Small** enabled (`SaveSmall` command) to strip cached display meshes. |
## Command Line Syntax & Rhino.Compute Integration
```bash
# Windows CLI: Headless Rhino Script Execution
"C:\Program Files\Rhino 8\System\Rhino.exe" /nosplash /runscript="-_RunPythonScript C:\Pipeline\auto_process.py"
# Launch Rhino.Compute Headless Web Server
"C:\Program Files\Rhino 8\System\compute.geometry.exe" --port 8081
# Clean Corrupted Scheme Settings via PowerShell
Remove-Item -Path "$env:APPDATA\McNeel\Rhinoceros\8.0\settings\settings-Scheme__Default.xml" -Force
```
### Essential File Locations
- **Windows User Settings**: `%APPDATA%\McNeel\Rhinoceros\8.0\settings`
- **Windows Grasshopper Libraries**: `%APPDATA%\Grasshopper\Libraries`
- **macOS User Settings**: `~/Library/Application Support/McNeel/Rhinoceros/8.0/`
- **macOS Grasshopper Libraries**: `~/Library/Application Support/McNeel/Rhinoceros/MacPlugins/Grasshopper/Libraries`
## Agent Operational Directive
> **MANDATORY**: Before running Boolean operations in Rhino, verify that objects are closed solids using `rs.IsPolysurfaceClosed()`. In Grasshopper workflows, normalize data tree branch depths to prevent combinatorial memory spikes.