{"id":"dd787917-b0d2-4e79-ac2a-703eea37cf6f","entityType":"agent","slug":"clawhub-jhauga-rhino3d-scripts","name":"Rhino 3D Scripts","canonicalUrl":"https://www.xpersona.co/agent/clawhub-jhauga-rhino3d-scripts","canonicalPath":"/agent/clawhub-jhauga-rhino3d-scripts","generatedAt":"2026-10-11T16:01:07.394Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T13:51:48.859Z","emptyReason":null},"description":"Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom... Skill: Rhino 3D Scripts Owner: jhauga Summary: Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom... Tags: latest:1.1.1 Version history: v1.1.1 | 2026-05-29T00:25:40.570Z | user - Removed the file: skill-card.md - Updated documentation to add new troubleshooting and gotcha notes, including details about Rhino.Rh","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17ch25466qc0g2bcymk2dr8zx83pfny:rhino3d-scripts","sourceUrl":"https://clawhub.ai/jhauga/rhino3d-scripts","homepage":"https://clawhub.ai/jhauga/skills/rhino3d-scripts","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/jhauga/rhino3d-scripts","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/jhauga/skills/rhino3d-scripts","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T13:51:48.859Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T13:51:48.859Z","emptyReason":null},"stars":null,"forks":null,"downloads":1054,"packageName":null,"latestVersion":"1.1.1","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T13:51:48.791Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T13:51:48.859Z","lastCrawledAt":"2026-10-11T13:51:48.791Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T13:51:48.791Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.1","createdAt":"2026-05-29T00:25:40.570Z","changelog":"- Removed the file: skill-card.md - Updated documentation to add new troubleshooting and gotcha notes, including details about `Rhino.RhinoApp.IsHeadless`, `RhinoMath` location, object ID return values for `AddBrep()`, `rhinoscriptsyntax` type stubs, and script naming cautions. - No new features or behavior changes; maintenance and clarification update.","fileCount":9,"zipByteSize":36931},{"version":"1.1.0","createdAt":"2026-05-14T22:47:18.895Z","changelog":"- Added new reference documentation: `methods-and-functions.md` and `vbscript-methods.md` - Expanded the References section to include additional VBScript and core method documentation - Minor update to Troubleshooting: clarified behavior when running scripts at startup","fileCount":9,"zipByteSize":34721},{"version":"1.0.0","createdAt":"2026-05-14T01:52:46.027Z","changelog":"Initial release of the Rhino3D scripting skill: - Author and debug scripts for Rhino 3D using RhinoPython, RhinoScript (VBScript), and RhinoCommon (C#/Python) APIs. - Covers scripting with rhinoscriptsyntax, scriptcontext, and direct access to Rhino’s .NET namespaces (Rhino.Geometry, etc.). - Provides guidance on automating Rhino tasks, writing macros, manipulating geometry and document objects, and integrating with the Rhino 8 Script Editor. - Includes best practices, core patterns in Python and VBScript, bulk automation workflows, and troubleshooting common scripting issues. - Guidance included for sharing, running, and troubleshooting scripts in various Rhino environments.","fileCount":6,"zipByteSize":10962}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17ch25466qc0g2bcymk2dr8zx83pfny:rhino3d-scripts","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T16:01:07.390Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T13:51:48.859Z","emptyReason":null},"readme":"Skill: Rhino 3D Scripts\n\nOwner: jhauga\n\nSummary: Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom...\n\nTags: latest:1.1.1\n\nVersion history:\n\nv1.1.1 | 2026-05-29T00:25:40.570Z | user\n\n- Removed the file: skill-card.md\n- Updated documentation to add new troubleshooting and gotcha notes, including details about `Rhino.RhinoApp.IsHeadless`, `RhinoMath` location, object ID return values for `AddBrep()`, `rhinoscriptsyntax` type stubs, and script naming cautions.\n- No new features or behavior changes; maintenance and clarification update.\n\nv1.1.0 | 2026-05-14T22:47:18.895Z | user\n\n- Added new reference documentation: `methods-and-functions.md` and `vbscript-methods.md`\n- Expanded the References section to include additional VBScript and core method documentation\n- Minor update to Troubleshooting: clarified behavior when running scripts at startup\n\nv1.0.0 | 2026-05-14T01:52:46.027Z | user\n\nInitial release of the Rhino3D scripting skill:\n\n- Author and debug scripts for Rhino 3D using RhinoPython, RhinoScript (VBScript), and RhinoCommon (C#/Python) APIs.\n- Covers scripting with rhinoscriptsyntax, scriptcontext, and direct access to Rhino’s .NET namespaces (Rhino.Geometry, etc.).\n- Provides guidance on automating Rhino tasks, writing macros, manipulating geometry and document objects, and integrating with the Rhino 8 Script Editor.\n- Includes best practices, core patterns in Python and VBScript, bulk automation workflows, and troubleshooting common scripting issues.\n- Guidance included for sharing, running, and troubleshooting scripts in various Rhino environments.\n\nArchive index:\n\nArchive v1.1.1: 9 files, 36931 bytes\n\nFiles: references/macros-and-loading.md (5129b), references/methods-and-functions.md (219880b), references/rhinocommon-map.md (3832b), references/rhinoscriptsyntax-cheatsheet.md (3402b), references/vbscript-methods.md (14016b), references/vbscript-quirks.md (3326b), skill-card.md (2896b), SKILL.md (11972b), _meta.json (134b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: rhino3d-scripts\ndescription: 'Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCommon-based scripts; automate Rhino modeling tasks; build command macros; manipulate Rhino geometry, layers, blocks, or document objects; pick objects from the viewport; control redraw and undo; or load and run scripts from the Rhino Script Editor. Covers `rhinoscriptsyntax`, `scriptcontext`, the `Rhino.*` RhinoCommon namespaces (`Rhino.Geometry`, `Rhino.DocObjects`, `Rhino.Input`, `Rhino.UI`, `Rhino.Display`, `Rhino.FileIO`), and the Rhino 8 unified Script Editor.'\n---\n\n# Rhino 3D Scripting Skill\n\nWrite production-quality scripts for Rhinoceros 3D. Covers the three scripting surfaces (RhinoScript/VBScript, RhinoPython, direct RhinoCommon .NET) and the Rhino 8+ Script Editor.\n\n## When to Use This Skill\n\n- User asks to write, edit, or debug a `.rvb`, `.vbs`, or `.py` Rhino script\n- User wants a Rhino **command macro** or wants to automate a sequence of Rhino commands\n- User wants to manipulate geometry, layers, blocks, materials, viewports, or annotations from code\n- User mentions `rhinoscriptsyntax`, `scriptcontext`, `RhinoCommon`, `Rhino.Geometry`, `RhinoDoc`, or the Script Editor\n- User wants to pick objects, prompt for input, or build a small UI inside Rhino\n- User asks how to load, run, or distribute a script (startup scripts, aliases, toolbar buttons)\n\n## Choosing a Scripting Surface\n\nPick the surface based on the task, not preference. Recommend Python by default for new work.\n\n| Surface | When to choose | File ext |\n|---|---|---|\n| **RhinoPython** (`rhinoscriptsyntax` + RhinoCommon) | Default for new scripts. Best ecosystem, readable, full RhinoCommon access. | `.py` |\n| **RhinoScript** (VBScript) | Maintaining legacy `.rvb`/`.vbs` files; integrating with VBA/COM. | `.rvb`, `.vbs` |\n| **RhinoCommon (C#/.NET) via Script Editor** | Performance-critical loops, complex geometry, leveraging .NET libraries. | `.cs` |\n| **Command macro** | Pure sequence of existing Rhino commands; no logic. | toolbar/alias |\n\nA macro is **not** a script — it is a string of command-line input (e.g. `! _-Line 0,0,0 10,0,0 _Enter`). Use a script the moment you need a variable, loop, or conditional.\n\n## Prerequisites\n\n- Rhino 7 or later (Rhino 8 strongly recommended — unified Script Editor supports Python 3, VB, and C# in one window).\n- Script Editor: type `_ScriptEditor` (Rhino 8) or `_EditPythonScript` / `_EditScript` (older).\n- Run a saved file from the command line with `_-RunPythonScript` or `_LoadScript` + `_RunScript`.\n\n## Core Patterns\n\n### Python: minimal scaffold\n\n```python\nimport rhinoscriptsyntax as rs\nimport scriptcontext as sc\nimport Rhino\n\ndef main():\n    obj_id = rs.GetObject(\"Select a curve\", filter=rs.filter.curve, preselect=True)\n    if not obj_id:\n        return\n    length = rs.CurveLength(obj_id)\n    print(\"Length: {0:.4f}\".format(length))\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Python: working with RhinoCommon directly\n\n```python\nimport Rhino\nimport scriptcontext as sc\n\ndoc = sc.doc  # Rhino.RhinoDoc.ActiveDoc\ntol = doc.ModelAbsoluteTolerance\n\ncircle = Rhino.Geometry.Circle(Rhino.Geometry.Point3d(0, 0, 0), 5.0)\ncurve_id = doc.Objects.AddCircle(circle)\ndoc.Views.Redraw()\n```\n\n### VBScript: minimal scaffold\n\n```vbscript\nOption Explicit\n\nCall Main()\n\nSub Main()\n    Dim strObject\n    strObject = Rhino.GetObject(\"Select a curve\", 4)  ' 4 = curve filter\n    If IsNull(strObject) Then Exit Sub\n    Rhino.Print \"Length: \" & Rhino.CurveLength(strObject)\nEnd Sub\n```\n\n### Picking objects with a custom filter (Python, RhinoCommon)\n\n```python\nimport Rhino\nimport scriptcontext as sc\n\ngo = Rhino.Input.Custom.GetObject()\ngo.SetCommandPrompt(\"Select breps\")\ngo.GeometryFilter = Rhino.DocObjects.ObjectType.Brep\ngo.SubObjectSelect = False\ngo.GetMultiple(1, 0)\nif go.CommandResult() != Rhino.Commands.Result.Success:\n    pass\nelse:\n    ids = [go.Object(i).ObjectId for i in range(go.ObjectCount)]\n```\n\n## Step-by-Step Workflows\n\n### Bulk-modify many objects fast\n\n1. Disable redraw: `rs.EnableRedraw(False)`.\n2. Wrap mutations in a single undo record: `undo = doc.BeginUndoRecord(\"My Op\")` … `doc.EndUndoRecord(undo)`.\n3. Use RhinoCommon directly inside the loop (skip `rhinoscriptsyntax` overhead).\n4. Re-enable redraw and call `doc.Views.Redraw()` in a `try`/`finally` so a crash never leaves the viewport frozen.\n\n### Distribute a script to a teammate\n\n1. Save the `.py` / `.rvb` somewhere on disk.\n2. Add the folder to `Options → Files → Search paths` so Rhino can find it by name.\n3. Create a toolbar button or alias whose macro is:\n   - Python: `! _-RunPythonScript \"MyScript.py\"`\n   - RhinoScript: `! _-LoadScript \"MyScript.rvb\" _-RunScript MySubName`\n4. The leading `!` cancels any running command; `-` runs the command in script (no-dialog) mode.\n\n### Run code at Rhino startup\n\n1. Place a `.rvb`/`.py` in a search path.\n2. `Tools → Options → RhinoScript` (or `Python`) → add to **Startup** list. The file executes once per session.\n\n## Gotchas\n\n- **`rhinoscriptsyntax` returns GUIDs, RhinoCommon returns objects.** Mixing them is fine, but `doc.Objects.Find(guid)` is the bridge from a `rs.*` id to a `RhinoObject`.\n- **Coordinates differ by surface.** Python uses `(x, y, z)` tuples *or* `Rhino.Geometry.Point3d`; VBScript uses 3-element `Array(x, y, z)`. Never pass a Python list to a VBScript helper through COM.\n- **`Option Explicit` is off by default in VBScript.** Typos silently create new variables. Always add `Option Explicit` at the top of `.rvb` files.\n- **VBScript has no block scope.** All `Dim`s inside a `Sub` are hoisted to the top of the procedure. Loop counters leak.\n- **`Nothing`, `Empty`, and `Null` are different** in VBScript. Use `IsNull` for `Rhino.GetObject` failure, `IsEmpty` for uninitialized `Variant`, `Is Nothing` for object refs.\n- **Parentheses change calling semantics in VBScript.** `Call Foo(a, b)` and `Foo a, b` are valid; `Foo(a, b)` (no `Call`, with parens) is **not** a call to a Sub — it’s a syntax error for multi-arg subs and a forced `ByVal` for single-arg.\n- **Tolerance is per-document.** Always read `doc.ModelAbsoluteTolerance` rather than hardcoding `0.001`; users work in mm, m, inches, etc.\n- **Long loops should poll `Rhino.RhinoApp.EscapeKeyPressed`** so the user can cancel. Otherwise Rhino appears frozen.\n- **GUID strings vs `System.Guid`.** `rhinoscriptsyntax` accepts either; RhinoCommon wants `System.Guid`. Convert with `System.Guid(str_id)` if needed.\n- **Don’t call `doc.Views.Redraw()` inside a tight loop.** Toggle redraw once outside the loop.\n- **`.rvb` is just `.vbs` renamed** with a Rhino-specific extension so Rhino’s `LoadScript` recognizes it. Same VBScript engine.\n- **`Rhino.RhinoApp.IsHeadless` may not exist on older Rhino 8 builds.** Use `getattr(Rhino.RhinoApp, \"IsHeadless\", None)` and check for `None` before using. Fall back to a heuristic (e.g. `sc.doc.Views.Count == 0`) or assume GUI present.\n- **`RhinoMath` is at `Rhino.RhinoMath`, not `Rhino.DocObjects.RhinoMath`.** Accessing `Rhino.DocObjects.RhinoMath` raises `AttributeError`.\n- **`doc.Objects.AddBrep()` returns `System.Guid.Empty` on failure.** In Rhino 8 CPython the `System` namespace may not be directly importable; check the return value as a string: `str(obj_id) == \"00000000-0000-0000-0000-000000000000\"`.\n- **`rhinoscriptsyntax` has no type stubs.** Static analysers (Pylance/Pyright) flag `import rhinoscriptsyntax as rs` as unresolvable. Suppress with `# type: ignore` on the import line; the module is always available at Rhino runtime.\n- **Never name a script after a Python standard-library module** (e.g. `random.py`, `math.py`, `os.py`). IronPython 2.7 (`_-RunPythonScript`) resolves the script directory before stdlib, so any `import random` inside the stdlib (e.g. `tempfile` imports `random` internally) will find your file instead and fail with `Cannot import name <X>`. CPython 3 (`rhinocode`) is unaffected because it resolves stdlib first. Rename the script or avoid importing modules that pull in the shadowed name.\n- **Em dashes and other non-ASCII characters silently break `_-RunPythonScript` (IronPython 2.7).** `rhinocode script` uses CPython 3 (UTF-8 by default) so the same file works there, making the failure non-obvious. IronPython 2.7 raises `SyntaxError: Non-ASCII character '\\xe2'` at the first offending byte. The most common culprit is the **em dash** (`--` auto-converted to `--` by many editors). Add `# -*- coding: utf-8 -*-` as line 1 of every script that must run under both runtimes, and replace typographic characters with ASCII equivalents: em dash `--`, arrow `->`, multiplication `x`.\n\n## Troubleshooting\n\n| Symptom | Fix |\n|---|---|\n| `rs.GetObject` returns `None` immediately | The user pressed Escape, or your `filter` excludes everything. Re-check `rs.filter.*` flags. |\n| “Unable to find script” when running by name | The folder isn’t in `Options → Files → Search paths`. |\n| VBScript `Type mismatch` on coordinates | You passed a 2-element array. Rhino requires 3-element `Array(x, y, z)`. |\n| Python `ImportError: No module named Rhino` | You’re running CPython outside Rhino. RhinoCommon is only available in Rhino’s embedded Python (or via `rhino3dm` for read-only file work). |\n| Created geometry doesn’t appear | You forgot `doc.Views.Redraw()`, or `rs.EnableRedraw(False)` was never re-enabled. |\n| Undo undoes only the last object of a batch | Wrap the batch in `BeginUndoRecord` / `EndUndoRecord`. |\n| Script works alone but fails as a startup script | Startup runs before any document is open — return early or skip document-dependent work when `sc.doc is None`. |\n| `rs.Command(\"...\")` returns `False` | The macro string is malformed. Prefix with `!` and `-`, end every prompt with `_Enter` or a value. |\n| `AttributeError: type object 'RhinoApp' has no attribute 'IsHeadless'` | Property added in a later Rhino 8 build. Use `getattr(Rhino.RhinoApp, \"IsHeadless\", None)` and guard against `None`. |\n| `rhinocode script` ignores arguments after the script path | rhinocode concatenates extra tokens onto the file URI. Pass data via a temp file or a Rhino dialog instead. See `references/macros-and-loading.md`. |\n| `Cannot import name <X>` inside stdlib (e.g. `tempfile`, `os`) when using `_-RunPythonScript` | Script filename shadows a stdlib module (e.g. `random.py` shadows `random`). IronPython 2.7 searches the script directory before stdlib. Rename the script, or remove the `import` that pulls in the shadowed module and replace it with a direct alternative (e.g. read `%TEMP%` via `os.environ` instead of `import tempfile`). |\n| `SyntaxError: Non-ASCII character '\\xe2' ... but no encoding declared` | IronPython 2.7 (`_-RunPythonScript`) hit an em dash or similar character. Add `# -*- coding: utf-8 -*-` as line 1, or replace the character: em dash `--`, arrow `->`. The same file runs fine under `rhinocode` (CPython 3), which hides the problem. |\n\n## References\n\n- [references/rhinoscriptsyntax-cheatsheet.md](references/rhinoscriptsyntax-cheatsheet.md) — most-used `rs.*` functions by category.\n- [references/rhinocommon-map.md](references/rhinocommon-map.md) — which namespace to import for which task.\n- [references/macros-and-loading.md](references/macros-and-loading.md) — command-line macro syntax, `LoadScript` / `RunScript`, search paths.\n- [references/vbscript-quirks.md](references/vbscript-quirks.md) — VBScript-only traps relevant to RhinoScript.\n\n### Upstream docs\n\n- RhinoScript landing: <https://docs.mcneel.com/rhino/8/help/en-us/information/rhinoscripting.htm>\n- Developer hub: <https://developer.rhino3d.com/>\n- RhinoCommon API index: <https://mcneel.github.io/rhinocommon-api-docs/api/RhinoCommon/html/R_Project_RhinoCommon.htm>\n- Example scripts repo: <https://github.com/mcneel/rhino-developer-samples/tree/8/rhinoscript>\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn71kvdba3t2jfkk6nbgnytg0s81617g\",\n  \"slug\": \"rhino3d-scripts\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1780014340570\n}\n\nFile v1.1.1:references/macros-and-loading.md\n\n# Macros, Loading, and Running Scripts\n\n## Command Macros (no script needed)\n\nA macro is a string of command-line input. Anywhere Rhino accepts a command (alias, toolbar button, `_ReadCommandFile`), you can place a macro.\n\n### Syntax rules\n\n| Token | Meaning |\n|---|---|\n| `!` | **Cancel** any currently running command before this one starts. Always start macros with `!`. |\n| `_` | Use the **English** (invariant) command name, so the macro works in any locale. |\n| `-` | Run the command in **script mode** — suppress dialogs, accept input from the macro string. |\n| `_Enter` | Press Enter at the current prompt. |\n| `Pause` | Stop and wait for the user to supply this input interactively. |\n| `;` | Comment to end of line. |\n| Newline | Same as a space — a separator between tokens, not a command terminator. |\n\n### Example macros\n\n```text\n! _-Line 0,0,0 10,0,0\n! _-Circle 0,0,0 5 _Enter\n! _SelAll _Delete\n! _-Properties _Object _Name \"MyObject\" _EnterEnd _Enter\n! _-RunPythonScript \"MyScript.py\"\n```\n\n## Running Saved Scripts\n\n### Python (`.py`)\n\n```text\n_-RunPythonScript \"C:\\Users\\example\\Scripts\\MyScript.py\"\n```\n\nOr, with the script folder on the search path:\n\n```text\n_-RunPythonScript \"MyScript.py\"\n```\n\n`_EditPythonScript` opens the legacy editor; `_ScriptEditor` (Rhino 8) opens the unified editor with Python 3, VB, and C#.\n\n### RhinoScript (`.rvb`, `.vbs`)\n\nTwo steps: **load** the file (registers its subs/functions), then **run** a named sub.\n\n```text\n_-LoadScript \"MyScript.rvb\"\n_-RunScript MyMainSub\n```\n\nA single `.rvb` can hold many subs; `_RunScript` chooses which to invoke.\n\n### Search Paths\n\n`Options → Files → Search paths` — folders listed here are scanned when you reference a script by bare filename. Without this, you must give a full path.\n\n### Startup Scripts\n\n`Options → RhinoScript → Startup` (and `Options → Python → Startup`) — files in these lists run once when Rhino opens. Useful for registering custom commands or aliases.\n\n**Guard against missing document** in startup code:\n\n```python\nimport scriptcontext as sc\n\ndef startup():\n    if sc.doc is None:\n        return\n\nstartup()\n```\n\n## Toolbar Buttons & Aliases\n\nA toolbar button’s **Command** field is just a macro. To make a button that runs your script:\n\n```text\n! _-RunPythonScript \"MyScript.py\"\n```\n\nSet the **Tooltip** to a short description; set the icon via the button editor.\n\nTo create an alias: `Options → Aliases → New`. The alias name becomes a typed command; its value is the macro.\n\n## Invoking Macros From a Script\n\n```python\nimport rhinoscriptsyntax as rs\nrs.Command(\"! _-Line 0,0,0 10,0,0\", echo=False)\n```\n\n`echo=False` suppresses command-history output but does **not** suppress prompts — always use `-` and complete every prompt within the macro string.\n\n## rhinocode CLI (Rhino 8)\n\n`rhinocode` is the Rhino 8 command-line tool for running scripts and commands against a running Rhino instance from an external terminal.\n\n### Basic commands\n\n```text\nrhinocode script \"C:\\path\\to\\MyScript.py\"            # run a Python script\nrhinocode command \"_Circle 0,0,0 5 _Enter\"           # run a Rhino command\nrhinocode --rhino <instance-id> script \"MyScript.py\" # target a specific instance\n```\n\n`<instance-id>` looks like `rhinocode_remotepipe_75029`. Find the ID in Rhino's title bar or\nby running `StartScriptServer` in Rhino, which prints the pipe name to the command line.\n\n### Architecture — pipe server\n\nrhinocode does **not** spawn a new Rhino process. It connects to a persistent server that Rhino\nexposes (`StartScriptServer`). Scripts execute inside that server process, which means:\n\n- **Environment variables are isolated.** Variables set in the calling shell (`set FOO=bar`)\n  are NOT visible inside the script via `os.environ`. The server was started before your shell.\n- **`os.getcwd()` is the server's working directory**, not the directory you called rhinocode\n  from. Do not rely on it for output paths; pass the path explicitly.\n- **`print()` output IS piped back** to the calling terminal — use it freely for status messages.\n\n### Passing data into a script\n\nrhinocode does not support positional arguments after the script path — any extra tokens are\nconcatenated onto the file URI, causing a \"file does not exist\" error. Workarounds:\n\n|Channel|How|Notes|\n|---|---|---|\n|Temp file|Caller writes a file to a known location; script reads and deletes it.|Use a path derived from `__file__` (see below), not `%TEMP%` — the server may resolve a different temp dir.|\n|Rhino dialog|Script calls `rhinoscriptsyntax.ListBox` / `GetString`|Always works; user sees a prompt in Rhino.|\n\n### `__file__` is a URI\n\nWhen running via rhinocode, `__file__` is set as a `file:///` URI with URL-encoded characters\n(spaces become `%20`). Decode it before using it as a filesystem path:\n\n```python\nimport os, sys, urllib.parse\n\ndef _script_dir():\n    raw = __file__\n    if raw.startswith(\"file:///\"):\n        raw = urllib.parse.unquote(raw[len(\"file:///\"):])\n        if sys.platform == \"win32\":\n            raw = raw.replace(\"/\", os.sep)\n    return os.path.dirname(os.path.abspath(raw))\n```\n\nFile v1.1.1:references/methods-and-functions.md\n\n# Methods and Functions\r\n\r\n> [!NOTE]\r\n> The `rhinoscriptsyntax` (Python) and `RhinoScript` (VBScript) APIs nearly 100% mirrors.\r\n> Function names match; only the call syntax differs. Many studios, firms, and individual users have\r\n> years of accumulated RhinoScript code they haven't bothered to port.\r\n\r\n- Function names match; only the call syntax differs\r\n- `RhinoScript` (*VBScript*) has 3 method/function and property categories not included in\r\n `rhinoscriptsyntax` (*Python*)\r\n  - See [vbscript-methods.md](vbscript-methods.md) for VBScript exclusive methods and properties\r\n\r\n> [!IMPORTANT]\r\n> `RhinoScript` is exclusive to Windows.\r\n\r\n## Application\r\n\r\n- **Python**: [AddSearchPath](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AddSearchPath)\r\n- **VBScript**: [AddSearchPath](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/addsearchpath.htm)\r\n- **Python**: [AliasCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasCount)\r\n- **VBScript**: [AliasCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliascount.htm)\r\n- **Python**: [AliasMacro](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasMacro)\r\n- **VBScript**: [AliasMacro](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliasmacro.htm)\r\n- **Python**: [AliasNames](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasNames)\r\n- **VBScript**: [AliasNames](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliasnames.htm)\r\n- **Python**: [AppearanceColor](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AppearanceColor)\r\n- **VBScript**: [AppearanceColor](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/appearancecolor.htm)\r\n- **Python**: [AutosaveFile](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AutosaveFile)\r\n- **VBScript**: [AutosaveFile](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/autosavefile.htm)\r\n- **Python**: [AutosaveInterval](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AutosaveInterval)\r\n- **VBScript**: [AutosaveInterval](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/autosaveinterval.htm)\r\n- **Python**: [BuildDate](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-BuildDate)\r\n- **VBScript**: [BuildDate](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/builddate.htm)\r\n- **Python**: [ClearCommandHistory](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ClearCommandHistory)\r\n- **VBScript**: [ClearCommandHistory](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/clearcommandhistory.htm)\r\n- **Python**: [Command](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Command)\r\n- **VBScript**: [Command](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/command.htm)\r\n- **Python**: [CommandHistory](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-CommandHistory)\r\n- **VBScript**: [CommandHistory](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/commandhistory.htm)\r\n- **Python**: [DefaultRenderer](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-DefaultRenderer)\r\n- **VBScript**: [DefaultRenderer](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/defaultrenderer.htm)\r\n- **Python**: [DeleteAlias](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-DeleteAlias)\r\n- **VBScript**: [DeleteAlias](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/deletealias.htm)\r\n- **Python**: [DeleteSearchPath](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-DeleteSearchPath)\r\n- **VBScript**: [DeleteSearchPath](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/deletesearchpath.htm)\r\n- **Python**: [DisplayOleAlerts](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-DisplayOleAlerts)\r\n- **VBScript**: [DisplayOleAlerts](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/displayolealerts.htm)\r\n- **Python**: [EdgeAnalysisColor](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-EdgeAnalysisColor)\r\n- **VBScript**: [EdgeAnalysisColor](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/edgeanalysiscolor.htm)\r\n- **Python**: [EdgeAnalysisMode](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-EdgeAnalysisMode)\r\n- **VBScript**: [EdgeAnalysisMode](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/edgeanalysismode.htm)\r\n- **Python**: [EnableAutosave](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-EnableAutosave)\r\n- **VBScript**: [EnableAutosave](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/enableautosave.htm)\r\n- **Python**: [EnablePlugIn](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-EnablePlugIn)\r\n- **VBScript**: [EnablePlugIn](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/enableplugin.htm)\r\n- **Python**: [ExeFolder](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ExeFolder)\r\n- **VBScript**: [ExeFolder](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exefolder.htm)\r\n- **Python**: [ExePlatform](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ExePlatform)\r\n- **VBScript**: [ExePlatform](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exeplatform.htm)\r\n- **Python**: [ExeServiceRelease](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ExeServiceRelease)\r\n- **VBScript**: [ExeServiceRelease](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exeservicerelease.htm)\r\n- **Python**: [ExeVersion](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ExeVersion)\r\n- **VBScript**: [ExeVersion](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exeversion.htm)\r\n- **Python**: [Exit](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Exit)\r\n- **VBScript**: [Exit](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exit.htm)\r\n- **Python**: [FindFile](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-FindFile)\r\n- **VBScript**: [FindFile](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/findfile.htm)\r\n- **Python**: [GetPlugInObject](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-GetPlugInObject)\r\n- **VBScript**: [GetPlugInObject](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/getpluginobject.htm)\r\n- **Python**: [InCommand](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-InCommand)\r\n- **VBScript**: [InCommand](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/incommand.htm)\r\n- **Python**: [InstallFolder](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-InstallFolder)\r\n- **VBScript**: [InstallFolder](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/installfolder.htm)\r\n- **Python**: [IsAlias](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-IsAlias)\r\n- **VBScript**: [IsAlias](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/isalias.htm)\r\n- **Python**: [IsCommand](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-IsCommand)\r\n- **VBScript**: [IsCommand](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/iscommand.htm)\r\n- **Python**: [IsPlugIn](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-IsPlugIn)\r\n- **VBScript**: [IsPlugIn](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/isplugin.htm)\r\n- **Python**: [IsRunningOnWindows](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-IsRunningOnWindows)\r\n- **VBScript**: [IsRunningOnWindows](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/isrunningonwindows.htm)\r\n- **Python**: [LastCommandName](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-LastCommandName)\r\n- **VBScript**: [LastCommandName](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/lastcommandname.htm)\r\n- **Python**: [LastCommandResult](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-LastCommandResult)\r\n- **VBScript**: [LastCommandResult](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/lastcommandresult.htm)\r\n- **Python**: [LocaleID](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-LocaleID)\r\n- **VBScript**: [LocaleID](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/localeid.htm)\r\n- **Python**: [Ortho](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Ortho)\r\n- **VBScript**: [Ortho](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/ortho.htm)\r\n- **Python**: [Osnap](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Osnap)\r\n- **VBScript**: [Osnap](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/osnap.htm)\r\n- **Python**: [OsnapDialog](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-OsnapDialog)\r\n- **VBScript**: [OsnapDialog](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/osnapdialog.htm)\r\n- **Python**: [OsnapMode](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-OsnapMode)\r\n- **VBScript**: [OsnapMode](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/osnapmode.htm)\r\n- **Python**: [Planar](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Planar)\r\n- **VBScript**: [Planar](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/planar.htm)\r\n- **Python**: [PlugInId](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-PlugInId)\r\n- **VBScript**: [PlugInId](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/pluginid.htm)\r\n- **Python**: [PlugIns](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-PlugIns)\r\n- **VBScript**: [PlugIns](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/plugins.htm)\r\n- **Python**: [ProjectOsnaps](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ProjectOsnaps)\r\n- **VBScript**: [ProjectOsnaps](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/projectosnaps.htm)\r\n- **Python**: [Prompt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Prompt)\r\n- **VBScript**: [Prompt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/prompt.htm)\r\n- **Python**: [ScreenSize](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ScreenSize)\r\n- **VBScript**: [ScreenSize](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/screensize.htm)\r\n- **Python**: [SdkVersion](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-SdkVersion)\r\n- **VBScript**: [SdkVersion](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/sdkversion.htm)\r\n- **Python**: [SearchPathCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-SearchPathCount)\r\n- **VBScript**: [SearchPathCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/searchpathcount.htm)\r\n- **Python**: [SearchPathList](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-SearchPathList)\r\n- **VBScript**: [SearchPathList](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/searchpathlist.htm)\r\n- **Python**: [SendKeystrokes](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-SendKeystrokes)\r\n- **VBScript**: [SendKeystrokes](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/sendkeystrokes.htm)\r\n- **Python**: [Snap](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Snap)\r\n- **VBScript**: [Snap](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/snap.htm)\r\n- **Python**: [StatusBarDistance](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarDistance)\r\n- **VBScript**: [StatusBarDistance](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbardistance.htm)\r\n- **Python**: [StatusBarMessage](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarMessage)\r\n- **VBScript**: [StatusBarMessage](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarmessage.htm)\r\n- **Python**: [StatusBarPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarPoint)\r\n- **VBScript**: [StatusBarPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarpoint.htm)\r\n- **Python**: [StatusBarProgressMeterShow](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarProgressMeterShow)\r\n- **VBScript**: [StatusBarProgressMeterShow](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarprogressmetershow.htm)\r\n- **Python**: [StatusBarProgressMeterUpdate](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarProgressMeterUpdate)\r\n- **VBScript**: [StatusBarProgressMeterUpdate](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarprogressmeterupdate.htm)\r\n- **Python**: [StatusBarProgressMeterHide](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarProgressMeterHide)\r\n- **VBScript**: [StatusBarProgressMeterHide](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarprogressmeterhide.htm)\r\n- **Python**: [TemplateFile](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-TemplateFile)\r\n- **VBScript**: [TemplateFile](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/templatefile.htm)\r\n- **Python**: [TemplateFolder](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-TemplateFolder)\r\n- **VBScript**: [TemplateFolder](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/templatefolder.htm)\r\n- **Python**: [WindowHandle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-WindowHandle)\r\n- **VBScript**: [WindowHandle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/windowhandle.htm)\r\n- **Python**: [WorkingFolder](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-WorkingFolder)\r\n- **VBScript**: [WorkingFolder](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/workingfolder.htm)\r\n\r\n## Block\r\n\r\n- **Python**: [AddBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-AddBlock)\r\n- **VBScript**: [AddBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/addblock.htm)\r\n- **Python**: [BlockContainerCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockContainerCount)\r\n- **VBScript**: [BlockContainerCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockcontainercount.htm)\r\n- **Python**: [BlockContainers](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockContainers)\r\n- **VBScript**: [BlockContainers](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockcontainers.htm)\r\n- **Python**: [BlockCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockCount)\r\n- **VBScript**: [BlockCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockcount.htm)\r\n- **Python**: [BlockDescription](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockDescription)\r\n- **VBScript**: [BlockDescription](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockdescription.htm)\r\n- **Python**: [BlockInstanceCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstanceCount)\r\n- **VBScript**: [BlockInstanceCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstancecount.htm)\r\n- **Python**: [BlockInstanceInsertPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstanceInsertPoint)\r\n- **VBScript**: [BlockInstanceInsertPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstanceinsertpoint.htm)\r\n- **Python**: [BlockInstanceName](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstanceName)\r\n- **VBScript**: [BlockInstanceName](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstancename.htm)\r\n- **Python**: [BlockInstances](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstances)\r\n- **VBScript**: [BlockInstances](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstances.htm)\r\n- **Python**: [BlockInstanceXform](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstanceXform)\r\n- **VBScript**: [BlockInstanceXform](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstancexform.htm)\r\n- **Python**: [BlockNames](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockNames)\r\n- **VBScript**: [BlockNames](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blocknames.htm)\r\n- **Python**: [BlockObjectCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockObjectCount)\r\n- **VBScript**: [BlockObjectCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockobjectcount.htm)\r\n- **Python**: [BlockObjects](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockObjects)\r\n- **VBScript**: [BlockObjects](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockobjects.htm)\r\n- **Python**: [BlockPath](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockPath)\r\n- **VBScript**: [BlockPath](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockpath.htm)\r\n- **Python**: [BlockStatus](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockStatus)\r\n- **VBScript**: [BlockStatus](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockstatus.htm)\r\n- **Python**: [DeleteBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-DeleteBlock)\r\n- **VBScript**: [DeleteBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/deleteblock.htm)\r\n- **Python**: [ExplodeBlockInstance](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-ExplodeBlockInstance)\r\n- **VBScript**: [ExplodeBlockInstance](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/explodeblockinstance.htm)\r\n- **Python**: [InsertBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-InsertBlock)\r\n- **VBScript**: [InsertBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/insertblock.htm)\r\n- **Python**: [InsertBlock2](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-InsertBlock2)\r\n- **VBScript**: [InsertBlock2](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/insertblock2.htm)\r\n- **Python**: [IsBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlock)\r\n- **VBScript**: [IsBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblock.htm)\r\n- **Python**: [IsBlockEmbedded](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlockEmbedded)\r\n- **VBScript**: [IsBlockEmbedded](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblockembedded.htm)\r\n- **Python**: [IsBlockInstance](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlockInstance)\r\n- **VBScript**: [IsBlockInstance](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblockinstance.htm)\r\n- **Python**: [IsBlockInUse](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlockInUse)\r\n- **VBScript**: [IsBlockInUse](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblockinuse.htm)\r\n- **Python**: [IsBlockReference](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlockReference)\r\n- **VBScript**: [IsBlockReference](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblockreference.htm)\r\n- **Python**: [RenameBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-RenameBlock)\r\n- **VBScript**: [RenameBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/renameblock.htm)\r\n\r\n## Curve\r\n\r\n- **Python**: [AddArc](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddArc)\r\n- **VBScript**: [AddArc](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addarc.htm)\r\n- **Python**: [AddArc3Pt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddArc3Pt)\r\n- **VBScript**: [AddArc3Pt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addarc3pt.htm)\r\n- **Python**: [AddArcPtTanPt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddArcPtTanPt)\r\n- **VBScript**: [AddArcPtTanPt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addarcpttanpt.htm)\r\n- **Python**: [AddBlendCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddBlendCurve)\r\n- **VBScript**: [AddBlendCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addblendcurve.htm)\r\n- **Python**: [AddCircle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddCircle)\r\n- **VBScript**: [AddCircle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addcircle.htm)\r\n- **Python**: [AddCircle3Pt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddCircle3Pt)\r\n- **VBScript**: [AddCircle3Pt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addcircle3pt.htm)\r\n- **Python**: [AddCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddCurve)\r\n- **VBScript**: [AddCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addcurve.htm)\r\n- **Python**: [AddEllipse](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddEllipse)\r\n- **VBScript**: [AddEllipse](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addellipse.htm)\r\n- **Python**: [AddEllipse3Pt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddEllipse3Pt)\r\n- **VBScript**: [AddEllipse3Pt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addellipse3pt.htm)\r\n- **Python**: [AddFilletCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddFilletCurve)\r\n- **VBScript**: [AddFilletCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addfilletcurve.htm)\r\n- **Python**: [AddInterpCrvOnSrf](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddInterpCrvOnSrf)\r\n- **VBScript**: [AddInterpCrvOnSrf](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addinterpcrvonsrf.htm)\r\n- **Python**: [AddInterpCrvOnSrfUV](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddInterpCrvOnSrfUV)\r\n- **VBScript**: [AddInterpCrvOnSrfUV](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addinterpcrvonsrfuv.htm)\r\n- **Python**: [AddInterpCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddInterpCurve)\r\n- **VBScript**: [AddInterpCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addinterpcurve.htm)\r\n- **Python**: [AddLine](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddLine)\r\n- **VBScript**: [AddLine](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addline.htm)\r\n- **Python**: [AddNurbsCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddNurbsCurve)\r\n- **VBScript**: [AddNurbsCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addnurbscurve.htm)\r\n- **Python**: [AddPolyline](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddPolyline)\r\n- **VBScript**: [AddPolyline](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addpolyline.htm)\r\n- **Python**: [AddRectangle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddRectangle)\r\n- **VBScript**: [AddRectangle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addrectangle.htm)\r\n- **Python**: [AddSpiral](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddSpiral)\r\n- **VBScript**: [AddSpiral](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addspiral.htm)\r\n- **Python**: [AddSubCrv](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddSubCrv)\r\n- **VBScript**: [AddSubCrv](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addsubcrv.htm)\r\n- **Python**: [ArcAngle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ArcAngle)\r\n- **VBScript**: [ArcAngle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/arcangle.htm)\r\n- **Python**: [ArcCenterPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ArcCenterPoint)\r\n- **VBScript**: [ArcCenterPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/arccenterpoint.htm)\r\n- **Python**: [ArcMidPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ArcMidPoint)\r\n- **VBScript**: [ArcMidPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/arcmidpoint.htm)\r\n- **Python**: [ArcRadius](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ArcRadius)\r\n- **VBScript**: [ArcRadius](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/arcradius.htm)\r\n- **Python**: [CircleCenterPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CircleCenterPoint)\r\n- **VBScript**: [CircleCenterPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/circlecenterpoint.htm)\r\n- **Python**: [CircleCircumference](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CircleCircumference)\r\n- **VBScript**: [CircleCircumference](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/circlecircumference.htm)\r\n- **Python**: [CircleRadius](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CircleRadius)\r\n- **VBScript**: [CircleRadius](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/circleradius.htm)\r\n- **Python**: [CloseCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CloseCurve)\r\n- **VBScript**: [CloseCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/closecurve.htm)\r\n- **Python**: [ClosedCurveOrientation](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ClosedCurveOrientation)\r\n- **VBScript**: [ClosedCurveOrientation](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/closedcurveorientation.htm)\r\n- **Python**: [ConvertCurveToPolyline](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ConvertCurveToPolyline)\r\n- **VBScript**: [ConvertCurveToPolyline](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/convertcurvetopolyline.htm)\r\n- **Python**: [CurveArcLengthPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveArcLengthPoint)\r\n- **VBScript**: [CurveArcLengthPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvearclengthpoint.htm)\r\n- **Python**: [CurveArea](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveArea)\r\n- **VBScript**: [CurveArea](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvearea.htm)\r\n- **Python**: [CurveAreaCentroid](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveAreaCentroid)\r\n- **VBScript**: [CurveAreaCentroid](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveareacentroid.htm)\r\n- **Python**: [CurveArrows](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveArrows)\r\n- **VBScript**: [CurveArrows](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvearrows.htm)\r\n- **Python**: [CurveBooleanDifference](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveBooleanDifference)\r\n- **VBScript**: [CurveBooleanDifference](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvebooleandifference.htm)\r\n- **Python**: [CurveBooleanIntersection](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveBooleanIntersection)\r\n- **VBScript**: [CurveBooleanIntersection](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvebooleanintersection.htm)\r\n- **Python**: [CurveBooleanUnion](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveBooleanUnion)\r\n- **VBScript**: [CurveBooleanUnion](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvebooleanunion.htm)\r\n- **Python**: [CurveBrepIntersect](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveBrepIntersect)\r\n- **VBScript**: [CurveBrepIntersect](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvebrepintersect.htm)\r\n- **Python**: [CurveClosestObject](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveClosestObject)\r\n- **VBScript**: [CurveClosestObject](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveclosestobject.htm)\r\n- **Python**: [CurveClosestPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveClosestPoint)\r\n- **VBScript**: [CurveClosestPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveclosestpoint.htm)\r\n- **Python**: [CurveContourPoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveContourPoints)\r\n- **VBScript**: [CurveContourPoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvecontourpoints.htm)\r\n- **Python**: [CurveCurvature](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveCurvature)\r\n- **VBScript**: [CurveCurvature](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvecurvature.htm)\r\n- **Python**: [CurveCurveIntersection](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveCurveIntersection)\r\n- **VBScript**: [CurveCurveIntersection](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvecurveintersection.htm)\r\n- **Python**: [CurveDegree](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDegree)\r\n- **VBScript**: [CurveDegree](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedegree.htm)\r\n- **Python**: [CurveDeviation](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDeviation)\r\n- **VBScript**: [CurveDeviation](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedeviation.htm)\r\n- **Python**: [CurveDim](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDim)\r\n- **VBScript**: [CurveDim](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedim.htm)\r\n- **Python**: [CurveDirectionsMatch](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDirectionsMatch)\r\n- **VBScript**: [CurveDirectionsMatch](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedirectionsmatch.htm)\r\n- **Python**: [CurveDiscontinuity](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDiscontinuity)\r\n- **VBScript**: [CurveDiscontinuity](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvediscontinuity.htm)\r\n- **Python**: [CurveDomain](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDomain)\r\n- **VBScript**: [CurveDomain](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedomain.htm)\r\n- **Python**: [CurveEditPoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveEditPoints)\r\n- **VBScript**: [CurveEditPoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveeditpoints.htm)\r\n- **Python**: [CurveEndPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveEndPoint)\r\n- **VBScript**: [CurveEndPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveendpoint.htm)\r\n- **Python**: [CurveFilletPoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveFilletPoints)\r\n- **VBScript**: [CurveFilletPoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvefilletpoints.htm)\r\n- **Python**: [CurveFrame](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveFrame)\r\n- **VBScript**: [CurveFrame](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveframe.htm)\r\n- **Python**: [CurveKnotCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveKnotCount)\r\n- **VBScript**: [CurveKnotCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveknotcount.htm)\r\n- **Python**: [CurveKnots](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveKnots)\r\n- **VBScript**: [CurveKnots](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveknots.htm)\r\n- **Python**: [CurveLength](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveLength)\r\n- **VBScript**: [CurveLength](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvelength.htm)\r\n- **Python**: [CurveMidPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveMidPoint)\r\n- **VBScript**: [CurveMidPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvemidpoint.htm)\r\n- **Python**: [CurveNormal](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveNormal)\r\n- **VBScript**: [CurveNormal](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvenormal.htm)\r\n- **Python**: [CurveNormalizedParameter](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveNormalizedParameter)\r\n- **VBScript**: [CurveNormalizedParameter](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvenormalizedparameter.htm)\r\n- **Python**: [CurveParameter](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveParameter)\r\n- **VBScript**: [CurveParameter](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveparameter.htm)\r\n- **Python**: [CurvePerpFrame](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurvePerpFrame)\r\n- **VBScript**: [CurvePerpFrame](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveperpframe.htm)\r\n- **Python**: [CurvePlane](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurvePlane)\r\n- **VBScript**: [CurvePlane](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveplane.htm)\r\n- **Python**: [CurvePointCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurvePointCount)\r\n- **VBScript**: [CurvePointCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvepointcount.htm)\r\n- **Python**: [CurvePoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurvePoints)\r\n- **VBScript**: [CurvePoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvepoints.htm)\r\n- **Python**: [CurveRadius](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveRadius)\r\n- **VBScript**: [CurveRadius](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveradius.htm)\r\n- **Python**: [CurveSeam](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveSeam)\r\n- **VBScript**: [CurveSeam](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveseam.htm)\r\n- **Python**: [CurveStartPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveStartPoint)\r\n- **VBScript**: [CurveStartPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvestartpoint.htm)\r\n- **Python**: [CurveSurfaceIntersection](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveSurfaceIntersection)\r\n- **VBScript**: [CurveSurfaceIntersection](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvesurfaceintersection.htm)\r\n- **Python**: [CurveTangent](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveTangent)\r\n- **VBScript**: [CurveTangent](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvetangent.htm)\r\n- **Python**: [CurveWeights](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveWeights)\r\n- **VBScript**: [CurveWeights](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveweights.htm)\r\n- **Python**: [DivideCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-DivideCurve)\r\n- **VBScript**: [DivideCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/dividecurve.htm)\r\n- **Python**: [DivideCurveEquidistant](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-DivideCurveEquidistant)\r\n- **VBScript**: [DivideCurveEquidistant](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/dividecurveequidistant.htm)\r\n- **Python**: [DivideCurveLength](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-DivideCurveLength)\r\n- **VBScript**: [DivideCurveLength](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/dividecurvelength.htm)\r\n- **Python**: [EllipseCenterPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-EllipseCenterPoint)\r\n- **VBScript**: [EllipseCenterPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/ellipsecenterpoint.htm)\r\n- **Python**: [EllipseQuadPoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-EllipseQuadPoints)\r\n- **VBScript**: [EllipseQuadPoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/ellipsequadpoints.htm)\r\n- **Python**: [EvaluateCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-EvaluateCurve)\r\n- **VBScript**: [EvaluateCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/evaluatecurve.htm)\r\n- **Python**: [ExplodeCurves](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ExplodeCurves)\r\n- **VBScript**: [ExplodeCurves](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/explodecurves.htm)\r\n- **Python**: [ExtendCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ExtendCurve)\r\n- **VBScript**: [ExtendCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/extendcurve.htm)\r\n- **Python**: [ExtendCurveLength](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ExtendCurveLength)\r\n- **VBScript**: [ExtendCurveLength](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/extendcurvelength.htm)\r\n- **Python**: [ExtendCurvePoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ExtendCurvePoint)\r\n- **VBScript**: [ExtendCurvePoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/extendcurvepoint.htm)\r\n- **Python**: [FairCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-FairCurve)\r\n- **VBScript**: [FairCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/faircurve.htm)\r\n- **Python**: [FitCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-FitCurve)\r\n- **VBScript**: [FitCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/fitcurve.htm)\r\n- **Python**: [InsertCurveKnot](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-InsertCurveKnot)\r\n- **VBScript**: [InsertCurveKnot](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/insertcurveknot.htm)\r\n- **Python**: [IsArc](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsArc)\r\n- **VBScript**: [IsArc](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/isarc.htm)\r\n- **Python**: [IsCircle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCircle)\r\n- **VBScript**: [IsCircle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscircle.htm)\r\n- **Python**: [IsCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCurve)\r\n- **VBScript**: [IsCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscurve.htm)\r\n- **Python**: [IsCurveClosable](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCurveClosable)\r\n- **VBScript**: [IsCurveClosable](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscurveclosable.htm)\r\n- **Python**: [IsCurveClosed](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCurveClosed)\r\n- **VBScript**: [IsCurveClosed](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscurveclosed.htm)\r\n- **Python**: [IsCurveInPlane](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCurveInPlane)\r\n- **VBScript**: [IsCurveInPlane](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscurveinplane.htm)\r\n- **Python**: [IsCurveLinear](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCurveLinear)\r\n- **VBScript**: [IsCurveLinear](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscurvelinear.htm)\r\n- **Python**: [IsCurvePeriodic](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCurvePeriodic)\r\n- **VBScript**: [IsCurvePeriodic](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscurveperiodic.htm)\r\n- **Python**: [IsCurvePlanar](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCurvePlanar)\r\n- **VBScript**: [IsCurvePlanar](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscurveplanar.htm)\r\n- **Python**: [IsCurveRational](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsCurveRational)\r\n- **VBScript**: [IsCurveRational](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/iscurverational.htm)\r\n- **Python**: [IsEllipse](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsEllipse)\r\n- **VBScript**: [IsEllipse](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/isellipse.htm)\r\n- **Python**: [IsLine](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsLine)\r\n- **VBScript**: [IsLine](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/isline.htm)\r\n- **Python**: [IsPointOnCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsPointOnCurve)\r\n- **VBScript**: [IsPointOnCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/ispointoncurve.htm)\r\n- **Python**: [IsPolyCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsPolyCurve)\r\n- **VBScript**: [IsPolyCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/ispolycurve.htm)\r\n- **Python**: [IsPolyline](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-IsPolyline)\r\n- **VBScript**: [IsPolyline](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/ispolyline.htm)\r\n- **Python**: [JoinCurves](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-JoinCurves)\r\n- **VBScript**: [JoinCurves](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/joincurves.htm)\r\n- **Python**: [LineFitFromPoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-LineFitFromPoints)\r\n- **VBScript**: [LineFitFromPoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/linefitfrompoints.htm)\r\n- **Python**: [MakeCurveNonPeriodic](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-MakeCurveNonPeriodic)\r\n- **VBScript**: [MakeCurveNonPeriodic](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/makecurvenonperiodic.htm)\r\n- **Python**: [MeanCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-MeanCurve)\r\n- **VBScript**: [MeanCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/meancurve.htm)\r\n- **Python**: [MeshPolyline](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-MeshPolyline)\r\n- **VBScript**: [MeshPolyline](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/meshpolyline.htm)\r\n- **Python**: [OffsetCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-OffsetCurve)\r\n- **VBScript**: [OffsetCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/offsetcurve.htm)\r\n- **Python**: [OffsetCurveOnSurface](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-OffsetCurveOnSurface)\r\n- **VBScript**: [OffsetCurveOnSurface](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/offsetcurveonsurface.htm)\r\n- **Python**: [PlanarClosedCurveContainment](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-PlanarClosedCurveContainment)\r\n- **VBScript**: [PlanarClosedCurveContainment](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/planarclosedcurvecontainment.htm)\r\n- **Python**: [PlanarCurveCollision](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-PlanarCurveCollision)\r\n- **VBScript**: [PlanarCurveCollision](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/planarcurvecollision.htm)\r\n- **Python**: [PointInPlanarClosedCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-PointInPlanarClosedCurve)\r\n- **VBScript**: [PointInPlanarClosedCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/pointinplanarclosedcurve.htm)\r\n- **Python**: [PolyCurveCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-PolyCurveCount)\r\n- **VBScript**: [PolyCurveCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/polycurvecount.htm)\r\n- **Python**: [PolylineVertices](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-PolylineVertices)\r\n- **VBScript**: [PolylineVertices](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/polylinevertices.htm)\r\n- **Python**: [ProjectCurveToMesh](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ProjectCurveToMesh)\r\n- **VBScript**: [ProjectCurveToMesh](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/projectcurvetomesh.htm)\r\n- **Python**: [ProjectCurveToSurface](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ProjectCurveToSurface)\r\n- **VBScript**: [ProjectCurveToSurface](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/projectcurvetosurface.htm)\r\n- **Python**: [RebuildCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-RebuildCurve)\r\n- **VBScript**: [RebuildCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/rebuildcurve.htm)\r\n- **Python**: [RemoveCurveKnot](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-RemoveCurveKnot)\r\n- **VBScript**: [RemoveCurveKnot](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/removecurveknot.htm)\r\n- **Python**: [ReverseCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ReverseCurve)\r\n- **VBScript**: [ReverseCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/reversecurve.htm)\r\n- **Python**: [SimplifyCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-SimplifyCurve)\r\n- **VBScript**: [SimplifyCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/simplifycurve.htm)\r\n- **Python**: [SplitCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-SplitCurve)\r\n- **VBScript**: [SplitCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/splitcurve.htm)\r\n- **Python**: [TrimCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-TrimCurve)\r\n- **VBScript**: [TrimCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/trimcurve.htm)\r\n- **Python**: [ChangeCurveDegree](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ChangeCurveDegree)\r\n- **VBScript**: [ChangeCurveDegree](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/changecurvedegree.htm)\r\n- **Python**: [AddTweenCurves](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddTweenCurves)\r\n- **VBScript**: [AddTweenCurves](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addtweencurves.htm)\r\n\r\n## Dimension\r\n\r\n- **Python**: [AddAlignedDimension](https://developer.rhino3d.com/api/RhinoScriptSyntax/#dimension-AddAlignedDimension)\r\n- **VBScript**: [AddAlignedDimension](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/dimension_methods/addaligneddimension.htm)\r\n- **Python**: [AddDimStyle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#dimension-AddDimStyle)\r\n- **VBScript**: [AddDimStyle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/dimension_methods/adddimstyle.htm)\r\n- **Python**: [AddLeader](https://developer.rhino3d.com/api/RhinoScriptSyntax/#dimension-AddLeader)\r\n- **VBScript**: [AddLeader](https://mcneel.github.io/rhinoscript-api-docs\n\nFile v1.1.1:references/rhinocommon-map.md\n\n# RhinoCommon Namespace Map\n\nUse this to decide which `Rhino.*` namespace to import for a task. All of these are accessible from Python with `import Rhino`.\n\n## Document & Object Model\n\n| Need | Namespace | Key types |\n|---|---|---|\n| The active document, units, tolerances, undo | `Rhino` | `RhinoDoc`, `RhinoApp` |\n| Reading/writing objects in the doc | `Rhino.DocObjects` | `RhinoObject`, `ObjectAttributes`, `Layer`, `ObjectType` |\n| Tables (layers, materials, blocks, dim styles) | `Rhino.DocObjects.Tables` | `LayerTable`, `InstanceDefinitionTable`, `MaterialTable` |\n| Custom per-object user data | `Rhino.DocObjects.Custom` | `UserData` |\n| File I/O (.3dm, import/export) | `Rhino.FileIO` | `File3dm`, `File3dmObject` |\n\n## Geometry\n\n| Need | Namespace | Key types |\n|---|---|---|\n| Points, vectors, transforms | `Rhino.Geometry` | `Point3d`, `Vector3d`, `Transform`, `Plane`, `BoundingBox` |\n| Curves | `Rhino.Geometry` | `Curve`, `NurbsCurve`, `PolylineCurve`, `LineCurve`, `ArcCurve` |\n| Surfaces & breps | `Rhino.Geometry` | `Surface`, `NurbsSurface`, `Brep`, `BrepFace`, `Extrusion` |\n| Meshes | `Rhino.Geometry` | `Mesh`, `MeshFace`, `MeshNgon` |\n| SubD | `Rhino.Geometry` | `SubD`, `SubDFace`, `SubDEdge` |\n| Geometry collections (vertices, edges, faces lists) | `Rhino.Geometry.Collections` | `MeshVertexList`, `BrepEdgeList` |\n| Intersections | `Rhino.Geometry.Intersect` | `Intersection`, `CurveIntersections` |\n| Mesh refinement | `Rhino.Geometry.MeshRefinements` | |\n| Space morphs (bend, twist, etc.) | `Rhino.Geometry.Morphs` | `BendSpaceMorph`, `TwistSpaceMorph` |\n\n## User Interaction\n\n| Need | Namespace | Key types |\n|---|---|---|\n| Prompts, getters, command results | `Rhino.Input` / `Rhino.Input.Custom` | `RhinoGet`, `GetObject`, `GetPoint`, `GetOption` |\n| Commands (when building a plugin) | `Rhino.Commands` | `Command`, `Result` |\n| Forms, dialogs, panels | `Rhino.UI` | `Dialog`, `Panels`, `RhinoEtoExtensions` |\n| UI controls / data sources | `Rhino.UI.Controls` | |\n| Gumball | `Rhino.UI.Gumball` | |\n\n## Display & Rendering\n\n| Need | Namespace | Key types |\n|---|---|---|\n| Viewports, display conduits, draw overlays | `Rhino.Display` | `DisplayPipeline`, `DisplayConduit`, `RhinoViewport` |\n| Render content (materials, environments) | `Rhino.Render` | `RenderContent`, `RenderMaterial`, `RenderTexture` |\n| Render mesh customization | `Rhino.Render.CustomRenderMeshes` | |\n| Post effects | `Rhino.Render.PostEffects` | |\n\n## Runtime & Plugins\n\n| Need | Namespace | Key types |\n|---|---|---|\n| Plugin lifecycle, settings | `Rhino.PlugIns` | `PlugIn`, `FileImportPlugIn`, `FileExportPlugIn` |\n| In-process Rhino (run Rhino from external .NET) | `Rhino.Runtime.InProcess` | `RhinoCore` |\n| Native interop (pointers, marshalling) | `Rhino.Runtime.InteropWrappers` | |\n| User notifications (toasts) | `Rhino.Runtime.Notifications` | |\n\n## Common Patterns\n\n```python\nimport Rhino\nimport scriptcontext as sc\nimport System.Drawing\n\ndoc = sc.doc                                          # Rhino.RhinoDoc\ntol = doc.ModelAbsoluteTolerance                      # float\nview = doc.Views.ActiveView                           # Rhino.Display.RhinoView\nlayer_index = doc.Layers.Add(\"MyLayer\", System.Drawing.Color.Red)\n\n# Find a Rhino object from a rhinoscriptsyntax GUID\nrhobj = doc.Objects.Find(guid)                        # Rhino.DocObjects.RhinoObject\ngeom  = rhobj.Geometry                                # Rhino.Geometry.GeometryBase\n\n# Add geometry with attributes\nattrs = Rhino.DocObjects.ObjectAttributes()\nattrs.LayerIndex = layer_index\nattrs.Name = \"example\"\nnew_id = doc.Objects.AddCurve(curve, attrs)\n```\n\n## Undo\n\n```python\nundo_serial = doc.BeginUndoRecord(\"Batch Op\")\ntry:\n    # ... many doc.Objects.* calls ...\n    pass\nfinally:\n    doc.EndUndoRecord(undo_serial)\n    doc.Views.Redraw()\n```\n\nFile v1.1.1:references/rhinoscriptsyntax-cheatsheet.md\n\n# `rhinoscriptsyntax` Cheatsheet\n\n```python\nimport rhinoscriptsyntax as rs\n```\n\n## User Input\n\n| Function | Returns |\n|---|---|\n| `rs.GetObject(message, filter, preselect, select)` | GUID or `None` |\n| `rs.GetObjects(message, filter)` | list of GUIDs |\n| `rs.GetPoint(message, base_point)` | `Point3d` or `None` |\n| `rs.GetString(message, default, strings)` | str |\n| `rs.GetInteger`, `rs.GetReal` | int / float |\n| `rs.GetBoolean(message, items, defaults)` | list of bools |\n\nCommon `rs.filter.*` flags (OR them together):\n\n```\npoint=1, point_cloud=2, curve=4, surface=8, polysurface=16,\nmesh=32, light=256, annotation=512, instance_reference=4096,\ntext_dot=8192, grip=16384, detail=32768, hatch=65536,\nmorph_control=131072, sub_d=262144\n```\n\n## Creating Geometry\n\n| Function | Notes |\n|---|---|\n| `rs.AddPoint(point)` | |\n| `rs.AddLine(start, end)` | |\n| `rs.AddPolyline(points)` | `points` is a list of 3-tuples |\n| `rs.AddCircle(plane_or_center, radius)` | |\n| `rs.AddArc(plane, radius, angle_deg)` | angle in **degrees** |\n| `rs.AddCurve(points, degree=3)` | NURBS through control points |\n| `rs.AddInterpCurve(points, degree=3)` | NURBS through points |\n| `rs.AddSphere(center, radius)` | |\n| `rs.AddBox(corners)` | `corners` = 8 points |\n| `rs.AddPlanarSrf(curves)` | returns list |\n| `rs.AddLoftSrf(curves, ...)` | returns list of GUIDs |\n| `rs.AddExtrusion(profile, path)` / `rs.ExtrudeCurveStraight` | |\n\n## Object Properties\n\n| Function | Purpose |\n|---|---|\n| `rs.ObjectLayer(id [, layer])` | get/set |\n| `rs.ObjectColor(id [, color])` | RGB tuple |\n| `rs.ObjectName(id [, name])` | |\n| `rs.ObjectType(id)` | int matching `rs.filter.*` |\n| `rs.IsCurve / IsSurface / IsBrep / IsMesh / IsPoint(id)` | |\n| `rs.DeleteObject(id)` / `rs.DeleteObjects(ids)` | |\n| `rs.CopyObject(id, translation)` | |\n| `rs.MoveObject(id, translation)` | |\n| `rs.RotateObject(id, center, angle, axis=None, copy=False)` | angle in degrees |\n| `rs.ScaleObject(id, origin, scale)` | scale is a 3-tuple |\n\n## Curves\n\n| Function | |\n|---|---|\n| `rs.CurveLength(id)` | |\n| `rs.CurveDomain(id)` | `(t0, t1)` |\n| `rs.EvaluateCurve(id, t)` | `Point3d` |\n| `rs.CurveStartPoint / CurveEndPoint(id)` | |\n| `rs.CurveClosestPoint(id, point)` | parameter `t` |\n| `rs.DivideCurve(id, segments, create_points=False, return_points=True)` | |\n| `rs.IsCurveClosed / IsCurvePlanar(id)` | |\n\n## Layers\n\n| Function | |\n|---|---|\n| `rs.AddLayer(name, color=None, visible=True, locked=False, parent=None)` | |\n| `rs.CurrentLayer([layer])` | |\n| `rs.LayerNames()` | list |\n| `rs.LayerVisible(name [, visible])` | |\n| `rs.DeleteLayer(name)` | |\n| `rs.ObjectsByLayer(name)` | list of GUIDs |\n\n## Document & View\n\n| Function | |\n|---|---|\n| `rs.UnitAbsoluteTolerance()` | |\n| `rs.UnitSystem()` | int (`rs.unit_system_*`) |\n| `rs.EnableRedraw(enable)` | **toggle this around bulk ops** |\n| `rs.Redraw()` | force one redraw |\n| `rs.ViewNames()` / `rs.CurrentView([name])` | |\n| `rs.ZoomExtents(view=None, all=False)` | |\n\n## Selection\n\n| Function | |\n|---|---|\n| `rs.SelectedObjects()` | list |\n| `rs.SelectObject(id)` / `rs.SelectObjects(ids)` | |\n| `rs.UnselectAllObjects()` | |\n| `rs.InvertSelectedObjects()` | |\n\n## Macros from Script\n\n`rs.Command(command_string, echo=True)` runs a macro exactly as if typed at the command line. Always prefix `!` (cancel) and `-` (no dialog):\n\n```python\nrs.Command(\"! _-Line 0,0,0 10,0,0\", echo=False)\n```\n\nFile v1.1.1:references/vbscript-methods.md\n\n# VBScript Methods\r\n\r\nThis reference file is an extension of [methods-and-functions.md](methods-and-functions.md). It contains methods and properties exclusive to VBScript's `RhinoScript` API.\r\n\r\n## Layer State Methods\r\n\r\nRhino's **LayerStateManager** command allows you to save the states of layers and restore them at a\r\nlater time. The command is implemented in the Rhino Bonus Tools plug-in, or *RhinoBonusTools.rhp*.\r\nBecause the **LayerStateManager** command resides in a plug-in, you will first need to get the\r\nplug-in's scriptable object, using\r\n[GetPlugInObject](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/getpluginobject.htm),\r\nbefore you can call any of these methods.\r\n\r\n### Example\r\n\r\n```vb\r\nSub TestLayerStates\r\n  Dim objPlugIn\r\n  On Error Resume Next\r\n  Set objPlugIn = Rhino.GetPluginObject(\"Rhino Bonus Tools\")\r\n  If Err Then\r\n    MsgBox Err.Description\r\n    Exit Sub\r\n  End If\r\n  'TODO: call a layer state method...\r\nEnd Sub\r\n```\r\n\r\n| Method | Description |\r\n| --- | --- |\r\n| [DeleteLayerState](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/deletelayerstate.htm) | Deletes a layer state. |\r\n| [ExportLayerStates](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/exportlayerstates.htm) | Exports layer states to a file. |\r\n| [ImportLayerStates](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/importlayerstates.htm) | Import layer states from a file. |\r\n| [IsLayerState](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/islayerstate.htm) | Verifies that a layer state exists. |\r\n| [LayerStateCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/layerstatecount.htm) | Returns the number of layer states. |\r\n| [LayerStateNames](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/layerstatenames.htm) | Returns layer state names. |\r\n| [RenameLayerStates](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/renamelayerstate.htm) | Renames a layer state. |\r\n| [RestoreLayerStates](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/restorelayerstate.htm) | Restores a saved layer state. |\r\n| [SaveLayerState](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/layer_state_methods/savelayerstate.htm) | Saves a layer state. |\r\n\r\n## Math Methods\r\n\r\nThe following is a list of functions and operators that are provided by native VBScript:\r\n\r\n| Function | Description |\r\n| :-- | :-- |\r\n| `^` | Raises a number to the power of an exponent. |\r\n| `*` | Multiplies two numbers. |\r\n| `/` | Divides two numbers and returns a floating-point result. |\r\n| `\\` | Divides two numbers and returns an integer result. |\r\n| `Mod` | Divides two numbers and returns only the remainder. |\r\n| `+` | Sums two numbers. |\r\n| `-` | Finds the difference between two numbers or indicates the negative value of a numeric expression. |\r\n| `&` | Forces string concatenation of two expressions. |\r\n| `Abs` | Returns the absolute value of a number. |\r\n| `Atn` | Returns the arctangent of a number. |\r\n| `Cos` | Returns the cosine of an angle. |\r\n| `Exp` | Returns e (the base of natural logarithms) raised to a power. |\r\n| `Int` | Returns the integer portion of a number. |\r\n| `Fix` | Returns the integer portion of a number. |\r\n| `Log` | Returns the natural logarithm of a number. |\r\n| `Rnd` | Returns a random number. |\r\n| `Sgn` | Returns an integer indicating the sign of a number. |\r\n| `Sin` | Returns the sine of an angle. |\r\n| `Sqr` | Returns the square root of a number. |\r\n| `Tan` | Returns the tangent of an angle. |\r\n\r\nRhinoScript extents the math capabilities of VBScript by adding the following methods:\r\n\r\n| Method | Description |\r\n| :-- | :-- |\r\n| [`ACos`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/acos\\E.htm) | Returns the inverse cosine of a number. |\r\n| [`ACosH`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/acosh.htm) | Returns the inverse hyperbolic cosine of a number. |\r\n| [`Angle`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/angle.htm) | Measures the angle between two points. |\r\n| [`Angle2`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/angle2.htm) | Measures the angle between two lines. |\r\n| [`ASin`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/asin.htm) | Returns the inverse sine of a number. |\r\n| [`ASinH`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/asinh.htm) | Returns the inverse hyperbolic sine of a number. |\r\n| [`ATan2`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/atan2.htm) | Returns the angle from the X axis to a point (y,x). |\r\n| [`ATanH`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/atanh.htm) | Returns the inverse hyperbolic tangent of a number. |\r\n| [`Ceil`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/ceil.htm) | Returns the ceiling of a number. |\r\n| [`CosH`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/cosh.htm) | Returns the hyperbolic cosine of an angle. |\r\n| [`Deviation`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/deviation.htm) | Returns the standard deviation from an array of numbers. |\r\n| [`Distance`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/distance.htm) | Returns the distance between two points. |\r\n| [`E`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/e.htm) | Returns the value of the base of the natural system of logarithms (e). |\r\n| [`Floor`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/floor.htm) | Returns the floor of a number. |\r\n| [`FMod`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/fmod.htm) | Returns the floating-point remainder. |\r\n| [`Hypot`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/hypot.htm) | Calculates the hypotenuse. |\r\n| [`Log10`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/log10.htm) | Returns the base 10 logarithm of a specified number. |\r\n| [`Max`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/max.htm) | Returns the maximum number from an array of numbers. |\r\n| [`Mean`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/mean.htm) | Returns the mean, or average, value from an array of numbers. |\r\n| [`Median`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/median.htm) | Return the median value from an array of numbers. |\r\n| [`Min`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/min.htm) | Returns the minimum number from an array of numbers. |\r\n| [`PI`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/pi.htm) | Returns the PI constant. |\r\n| [`Polar`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/polar.htm) | Returns a point at an angle and distance from the point. |\r\n| [`Rnd`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/rnd.htm) | Returns a random number. |\r\n| [`SinH`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/sinh.htm) | Returns the hyperbolic sine of an angle. |\r\n| [`SolveQuadratic`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/solvequadratic.htm) | Solves a quadratic equation. |\r\n| [`Sum`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/sum.htm) | Returns the sum number from an array of numbers. |\r\n| [`TanH`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/tanh.htm) | Returns the hyperbolic tangent of an angle. |\r\n| [`ToDegrees`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/todegrees.htm) | Converts an angle in radians to degrees. |\r\n| [`ToRadians`](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/math_methods/toradians.htm) | Converts an angle in degrees to radians. |\r\n\r\n> [!NOTE]\r\n> the following non-intrinsic math functions can be derived from the intrinsic math functions:\r\n\r\n| Function | Derived Equivalent |\r\n| :-- | :-- |\r\n| `Secant` | `Sec(X) = 1 / Cos(X)` |\r\n| `Cosecant` | `Cosec(X) = 1 / Sin(X)` |\r\n| `Cotangent` | `Cotan(X) = 1 / Tan(X)` |\r\n| `Inverse Sine` | `Arcsin(X) = Atn(X / Sqr(-X * X + 1))` |\r\n| `Inverse Cosine` | `Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)` |\r\n| `Inverse Secant` | `Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) -1) * (2 * Atn(1))` |\r\n| `Inverse Cosecant` | `Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))` |\r\n| `Inverse Cotangent` | `Arccotan(X) = Atn(X) + 2 * Atn(1)` |\r\n| `Hyperbolic Sine` | `HSin(X) = (Exp(X) - Exp(-X)) / 2` |\r\n| `Hyperbolic Cosine` | `HCos(X) = (Exp(X) + Exp(-X)) / 2` |\r\n| `Hyperbolic Tangent` | `HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))` |\r\n| `Hyperbolic Secant` | `HSec(X) = 2 / (Exp(X) + Exp(-X))` |\r\n| `Hyperbolic Cosecant` | `HCosec(X) = 2 / (Exp(X) - Exp(-X))` |\r\n| `Hyperbolic Cotangent` | `HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))` |\r\n| `Inverse Hyperbolic Sine` | `HArcsin(X) = Log(X + Sqr(X * X + 1))` |\r\n| `Inverse Hyperbolic Cosine` | `HArccos(X) = Log(X + Sqr(X * X - 1))` |\r\n| `Inverse Hyperbolic Tangent` | `HArctan(X) = Log((1 + X) / (1 - X)) / 2` |\r\n| `Inverse Hyperbolic Secant` | `HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)` |\r\n| `Inverse Hyperbolic Cosecant` | `HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) +1) / X)` |\r\n| `Inverse Hyperbolic Cotangent` | `HArccotan(X) = Log((X + 1) / (X - 1)) / 2` |\r\n| `Logarithm to base N` | `LogN(X) = Log(X) / Log(N)` |\r\n\r\n## Named Position Methods\r\n\r\nRhino's **NamedPosition** command allows you to save the locations of objects and restore them at a\r\nlater time. The command is implemented in the Named Positions plug-in, or *NamedPositions.rhp*.\r\nBecause the **NamedPosition** command resides in a plug-in, you will first need to get the plug-in's\r\nscriptable object, using\r\n[GetPlugInObject](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/getpluginobject.htm),\r\nbefore you can call any of these methods.\r\n\r\n### Example\r\n\r\n```vb\r\nSub TestNamedPositions\r\n  Dim objPlugIn\r\n  On Error Resume Next\r\n  Set objPlugIn = Rhino.GetPluginObject(\"Named Position\")\r\n  If Err Then\r\n    MsgBox Err.Description\r\n    Exit Sub\r\n  End If\r\n  'TODO: call a named position method...\r\nEnd Sub\r\n```\r\n\r\n| Method | Description |\r\n| --- | --- |\r\n| [AppendNamedPosition](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/appendnamedposition.htm) | Adds objects to an existing named position.. |\r\n| [DeleteNamedPosition](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/deletenamedposition.htm) | Deletes a named position. |\r\n| [NamedPositionCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/namedpositioncount.htm) | Returns the number of named positions. |\r\n| [NamedPositions](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/namedpositions.htm) | Returns the names of the named positions. |\r\n| [RenameNamedPosition](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/renamenamedposition.htm) | Renames an existing named position. |\r\n| [RestoreNamedPosition](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/restorenamedposition.htm) | Restores an existing named position. |\r\n| [SaveNamedPosition](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/savenamedposition.htm) | Saves a new named position. |\r\n| [SelectObjectsOfNamedPosition](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/selectobjectsofnamedposition.htm) | Select the objects of a named position. |\r\n| [UpdateNamedPosition](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/named_position_methods/updatenamedposition.htm) | Updates an existing named position. |\r\n\r\n## Rhino Properties & Methods\r\n\r\nThe following methods and properties are available on the Rhino automation (COM) objects, both\r\n**Rhino.Application** and **Rhino.Interface**. The Rhino automation objects are used when\r\n[automating Rhino externally](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/introduction/external_access.htm).\r\n\r\n| Methods | Description |\r\n| --- | --- |\r\n| [BringToTop](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/rhino_properties_methods/bringtotop.htm) | Brings Rhino into the foreground and activates the window. |\r\n| [GetPlugInObject](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/rhino_properties_methods/getpluginobject.htm) | Retrieves an automation (COM) object from a plug-in. |\r\n| [GetScriptObject](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/rhino_properties_methods/getscriptobject.htm) | Retrieves the RhinoScript automation (COM) object. |\r\n| [IsInitialized](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/rhino_properties_methods/isinitialized.htm) | Verifies that Rhino is initialized and ready for use. |\r\n| [RunScript](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/rhino_properties_methods/runscript.htm) | Runs a Rhino command script |\r\n\r\n| Properties | Description |\r\n| --- | --- |\r\n| [ReleaseWithoutClosing](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/rhino_properties_methods/releasewithoutclosing.htm) | Releases the Rhino object without closing the Rhino application. |\r\n| [Visible](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/rhino_properties_methods/visible.htm) | Shows or hides the Rhino application window. |\n\nFile v1.1.1:references/vbscript-quirks.md\n\n# VBScript Quirks for RhinoScript\n\nThings that bite when writing `.rvb` / `.vbs` files and aren’t obvious to anyone whose mental model is C-family or Python.\n\n## Always Start With `Option Explicit`\n\nWithout it, mistyping a variable name silently creates a new `Variant` set to `Empty`. Every `.rvb` file should begin:\n\n```vbscript\nOption Explicit\n```\n\n## No Block Scope\n\nAll `Dim` declarations inside a `Sub`/`Function` are hoisted to the top. A `Dim` inside an `If` block is visible after the `If` ends. Loop counters survive the loop.\n\n## `Nothing` vs `Empty` vs `Null`\n\n| Sentinel | Test with | Meaning |\n|---|---|---|\n| `Empty` | `IsEmpty(x)` | `Dim`’d but never assigned |\n| `Null` | `IsNull(x)` | Explicit “no value” — what `Rhino.GetObject` returns on cancel |\n| `Nothing` | `x Is Nothing` | An **object** reference that points to nothing — only for `Set` variables |\n\nWrong sentinel → silently false.\n\n## Parentheses Change Semantics\n\n```vbscript\nFoo a, b              ' Call a Sub or Function (return value discarded)\nCall Foo(a, b)        ' Call a Sub or Function (return value discarded)\nx = Foo(a, b)         ' Call a Function and capture the return\nFoo(a, b)             ' SYNTAX ERROR for multi-arg subs\n\nFoo(x)                ' Calls Foo passing x BY VALUE, even if Foo declares ByRef\nFoo x                 ' Honors Foo's ByRef declaration\n```\n\nIf a Sub modifies its argument and your change isn’t taking effect — you wrapped the argument in parentheses.\n\n## `ByRef` Is the Default\n\nUnlike most languages, VBScript passes arguments **by reference by default**. Functions can mutate their callers’ variables. Be explicit:\n\n```vbscript\nSub Increment(ByRef n)\n    n = n + 1\nEnd Sub\n```\n\n## Arrays Are 0-Based But Have `UBound`, Not `Length`\n\n```vbscript\nDim arr(2)            ' Three elements: arr(0), arr(1), arr(2)\nFor i = 0 To UBound(arr)\n    arr(i) = i * 10\nNext\n```\n\n`Dim arr(n)` creates `n+1` elements. `ReDim Preserve arr(newSize)` resizes (only the last dimension of a multi-dim array).\n\n## `Set` Is Required for Object Assignment\n\n```vbscript\nSet fso = CreateObject(\"Scripting.FileSystemObject\")    ' correct\nfso = CreateObject(\"Scripting.FileSystemObject\")        ' RUNTIME ERROR\n```\n\nAny time the right-hand side is an object (COM object, RegExp, Dictionary), you must use `Set`.\n\n## Error Handling Is Manual\n\n```vbscript\nOn Error Resume Next\nRhino.AddCircle Array(0,0,0), -1\nIf Err.Number <> 0 Then\n    Rhino.Print \"Failed: \" & Err.Description\n    Err.Clear\nEnd If\nOn Error GoTo 0           ' Restore normal error behavior\n```\n\n`On Error Resume Next` suppresses **all** errors until `On Error GoTo 0`. Forgetting to restore is a common bug.\n\n## Points Are 3-Element Arrays\n\nRhino expects `Array(x, y, z)`. A 2-element array (`Array(x, y)`) raises a type-mismatch error.\n\n```vbscript\nDim pt\npt = Array(1.0, 2.0, 3.0)\nRhino.AddPoint pt\n```\n\n## String Concatenation Uses `&`, Not `+`\n\n`+` on strings works only if **both** sides are strings. If one side is a number, `+` does numeric addition and throws a type-mismatch. Always use `&`:\n\n```vbscript\nRhino.Print \"Count: \" & n\n```\n\n## `For Each` Needs a `Variant`\n\n```vbscript\nDim item\nFor Each item In someCollection\n    ' ...\nNext\n```\n\nThe loop variable must be `Variant`. You cannot `Dim item As Long` (VBScript has no typed `Dim`).\n\nFile v1.1.1:skill-card.md\n\n## Description:\n\nAuthoring and debugging scripts for Rhinoceros 3D, including RhinoScript, RhinoPython, RhinoCommon scripts, command macros, geometry and document automation, viewport selection, redraw, undo, and Script Editor workflows.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[jhauga](https://clawhub.ai/user/jhauga)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, designers, and technical artists use this skill to draft, review, and troubleshoot Rhino automation for modeling workflows, including scripts, command macros, object manipulation, RhinoCommon usage, loading, startup, and distribution patterns.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Generated Rhino macros or scripts can modify or delete model content.\n\nMitigation: Review proposed automation before running it, save work first, and test destructive commands on disposable copies.\n\nRisk: Startup scripts, aliases, and search paths can persist automation across Rhino sessions.\n\nMitigation: Install only from trusted locations and audit startup entries, aliases, and search paths after changes.\n\nRisk: Temp-file based workflows can leave stale inputs or outputs behind.\n\nMitigation: Use explicit file paths, validate the expected input before execution, and clean temporary files after use.\n\n## Reference(s):\n\n- [rhinoscriptsyntax Cheatsheet](references/rhinoscriptsyntax-cheatsheet.md)\n- [RhinoCommon Namespace Map](references/rhinocommon-map.md)\n- [Macros, Loading, and Running Scripts](references/macros-and-loading.md)\n- [VBScript Quirks for RhinoScript](references/vbscript-quirks.md)\n- [Methods and Functions](references/methods-and-functions.md)\n- [VBScript Methods](references/vbscript-methods.md)\n- [RhinoScript landing](https://docs.mcneel.com/rhino/8/help/en-us/information/rhinoscripting.htm)\n- [Rhino Developer Hub](https://developer.rhino3d.com/)\n- [RhinoCommon API Index](https://mcneel.github.io/rhinocommon-api-docs/api/RhinoCommon/html/R_Project_RhinoCommon.htm)\n- [Rhino Developer Samples: RhinoScript](https://github.com/mcneel/rhino-developer-samples/tree/8/rhinoscript)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown with code blocks, command macro snippets, and concise troubleshooting guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include RhinoPython, RhinoScript/VBScript, C# RhinoCommon snippets, Rhino command macros, loading instructions, and review notes.]\n\n## Skill Version(s):\n\n1.1.1 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.0: 9 files, 34721 bytes\n\nFiles: references/macros-and-loading.md (2793b), references/methods-and-functions.md (219880b), references/rhinocommon-map.md (3832b), references/rhinoscriptsyntax-cheatsheet.md (3402b), references/vbscript-methods.md (14016b), references/vbscript-quirks.md (3326b), skill-card.md (3070b), SKILL.md (8882b), _meta.json (134b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: rhino3d-scripts\ndescription: 'Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCommon-based scripts; automate Rhino modeling tasks; build command macros; manipulate Rhino geometry, layers, blocks, or document objects; pick objects from the viewport; control redraw and undo; or load and run scripts from the Rhino Script Editor. Covers `rhinoscriptsyntax`, `scriptcontext`, the `Rhino.*` RhinoCommon namespaces (`Rhino.Geometry`, `Rhino.DocObjects`, `Rhino.Input`, `Rhino.UI`, `Rhino.Display`, `Rhino.FileIO`), and the Rhino 8 unified Script Editor.'\n---\n\n# Rhino 3D Scripting Skill\n\nWrite production-quality scripts for Rhinoceros 3D. Covers the three scripting surfaces (RhinoScript/VBScript, RhinoPython, direct RhinoCommon .NET) and the Rhino 8+ Script Editor.\n\n## When to Use This Skill\n\n- User asks to write, edit, or debug a `.rvb`, `.vbs`, or `.py` Rhino script\n- User wants a Rhino **command macro** or wants to automate a sequence of Rhino commands\n- User wants to manipulate geometry, layers, blocks, materials, viewports, or annotations from code\n- User mentions `rhinoscriptsyntax`, `scriptcontext`, `RhinoCommon`, `Rhino.Geometry`, `RhinoDoc`, or the Script Editor\n- User wants to pick objects, prompt for input, or build a small UI inside Rhino\n- User asks how to load, run, or distribute a script (startup scripts, aliases, toolbar buttons)\n\n## Choosing a Scripting Surface\n\nPick the surface based on the task, not preference. Recommend Python by default for new work.\n\n| Surface | When to choose | File ext |\n|---|---|---|\n| **RhinoPython** (`rhinoscriptsyntax` + RhinoCommon) | Default for new scripts. Best ecosystem, readable, full RhinoCommon access. | `.py` |\n| **RhinoScript** (VBScript) | Maintaining legacy `.rvb`/`.vbs` files; integrating with VBA/COM. | `.rvb`, `.vbs` |\n| **RhinoCommon (C#/.NET) via Script Editor** | Performance-critical loops, complex geometry, leveraging .NET libraries. | `.cs` |\n| **Command macro** | Pure sequence of existing Rhino commands; no logic. | toolbar/alias |\n\nA macro is **not** a script — it is a string of command-line input (e.g. `! _-Line 0,0,0 10,0,0 _Enter`). Use a script the moment you need a variable, loop, or conditional.\n\n## Prerequisites\n\n- Rhino 7 or later (Rhino 8 strongly recommended — unified Script Editor supports Python 3, VB, and C# in one window).\n- Script Editor: type `_ScriptEditor` (Rhino 8) or `_EditPythonScript` / `_EditScript` (older).\n- Run a saved file from the command line with `_-RunPythonScript` or `_LoadScript` + `_RunScript`.\n\n## Core Patterns\n\n### Python: minimal scaffold\n\n```python\nimport rhinoscriptsyntax as rs\nimport scriptcontext as sc\nimport Rhino\n\ndef main():\n    obj_id = rs.GetObject(\"Select a curve\", filter=rs.filter.curve, preselect=True)\n    if not obj_id:\n        return\n    length = rs.CurveLength(obj_id)\n    print(\"Length: {0:.4f}\".format(length))\n\nif __name__ == \"__main__\":\n    main()\n```\n\n### Python: working with RhinoCommon directly\n\n```python\nimport Rhino\nimport scriptcontext as sc\n\ndoc = sc.doc  # Rhino.RhinoDoc.ActiveDoc\ntol = doc.ModelAbsoluteTolerance\n\ncircle = Rhino.Geometry.Circle(Rhino.Geometry.Point3d(0, 0, 0), 5.0)\ncurve_id = doc.Objects.AddCircle(circle)\ndoc.Views.Redraw()\n```\n\n### VBScript: minimal scaffold\n\n```vbscript\nOption Explicit\n\nCall Main()\n\nSub Main()\n    Dim strObject\n    strObject = Rhino.GetObject(\"Select a curve\", 4)  ' 4 = curve filter\n    If IsNull(strObject) Then Exit Sub\n    Rhino.Print \"Length: \" & Rhino.CurveLength(strObject)\nEnd Sub\n```\n\n### Picking objects with a custom filter (Python, RhinoCommon)\n\n```python\nimport Rhino\nimport scriptcontext as sc\n\ngo = Rhino.Input.Custom.GetObject()\ngo.SetCommandPrompt(\"Select breps\")\ngo.GeometryFilter = Rhino.DocObjects.ObjectType.Brep\ngo.SubObjectSelect = False\ngo.GetMultiple(1, 0)\nif go.CommandResult() != Rhino.Commands.Result.Success:\n    pass\nelse:\n    ids = [go.Object(i).ObjectId for i in range(go.ObjectCount)]\n```\n\n## Step-by-Step Workflows\n\n### Bulk-modify many objects fast\n\n1. Disable redraw: `rs.EnableRedraw(False)`.\n2. Wrap mutations in a single undo record: `undo = doc.BeginUndoRecord(\"My Op\")` … `doc.EndUndoRecord(undo)`.\n3. Use RhinoCommon directly inside the loop (skip `rhinoscriptsyntax` overhead).\n4. Re-enable redraw and call `doc.Views.Redraw()` in a `try`/`finally` so a crash never leaves the viewport frozen.\n\n### Distribute a script to a teammate\n\n1. Save the `.py` / `.rvb` somewhere on disk.\n2. Add the folder to `Options → Files → Search paths` so Rhino can find it by name.\n3. Create a toolbar button or alias whose macro is:\n   - Python: `! _-RunPythonScript \"MyScript.py\"`\n   - RhinoScript: `! _-LoadScript \"MyScript.rvb\" _-RunScript MySubName`\n4. The leading `!` cancels any running command; `-` runs the command in script (no-dialog) mode.\n\n### Run code at Rhino startup\n\n1. Place a `.rvb`/`.py` in a search path.\n2. `Tools → Options → RhinoScript` (or `Python`) → add to **Startup** list. The file executes once per session.\n\n## Gotchas\n\n- **`rhinoscriptsyntax` returns GUIDs, RhinoCommon returns objects.** Mixing them is fine, but `doc.Objects.Find(guid)` is the bridge from a `rs.*` id to a `RhinoObject`.\n- **Coordinates differ by surface.** Python uses `(x, y, z)` tuples *or* `Rhino.Geometry.Point3d`; VBScript uses 3-element `Array(x, y, z)`. Never pass a Python list to a VBScript helper through COM.\n- **`Option Explicit` is off by default in VBScript.** Typos silently create new variables. Always add `Option Explicit` at the top of `.rvb` files.\n- **VBScript has no block scope.** All `Dim`s inside a `Sub` are hoisted to the top of the procedure. Loop counters leak.\n- **`Nothing`, `Empty`, and `Null` are different** in VBScript. Use `IsNull` for `Rhino.GetObject` failure, `IsEmpty` for uninitialized `Variant`, `Is Nothing` for object refs.\n- **Parentheses change calling semantics in VBScript.** `Call Foo(a, b)` and `Foo a, b` are valid; `Foo(a, b)` (no `Call`, with parens) is **not** a call to a Sub — it’s a syntax error for multi-arg subs and a forced `ByVal` for single-arg.\n- **Tolerance is per-document.** Always read `doc.ModelAbsoluteTolerance` rather than hardcoding `0.001`; users work in mm, m, inches, etc.\n- **Long loops should poll `Rhino.RhinoApp.EscapeKeyPressed`** so the user can cancel. Otherwise Rhino appears frozen.\n- **GUID strings vs `System.Guid`.** `rhinoscriptsyntax` accepts either; RhinoCommon wants `System.Guid`. Convert with `System.Guid(str_id)` if needed.\n- **Don’t call `doc.Views.Redraw()` inside a tight loop.** Toggle redraw once outside the loop.\n- **`.rvb` is just `.vbs` renamed** with a Rhino-specific extension so Rhino’s `LoadScript` recognizes it. Same VBScript engine.\n\n## Troubleshooting\n\n| Symptom | Fix |\n|---|---|\n| `rs.GetObject` returns `None` immediately | The user pressed Escape, or your `filter` excludes everything. Re-check `rs.filter.*` flags. |\n| “Unable to find script” when running by name | The folder isn’t in `Options → Files → Search paths`. |\n| VBScript `Type mismatch` on coordinates | You passed a 2-element array. Rhino requires 3-element `Array(x, y, z)`. |\n| Python `ImportError: No module named Rhino` | You’re running CPython outside Rhino. RhinoCommon is only available in Rhino’s embedded Python (or via `rhino3dm` for read-only file work). |\n| Created geometry doesn’t appear | You forgot `doc.Views.Redraw()`, or `rs.EnableRedraw(False)` was never re-enabled. |\n| Undo undoes only the last object of a batch | Wrap the batch in `BeginUndoRecord` / `EndUndoRecord`. |\n| Script works alone but fails as a startup script | Startup runs before any document is open — return early or skip document-dependent work when `sc.doc is None`. |\n| `rs.Command(\"...\")` returns `False` | The macro string is malformed. Prefix with `!` and `-`, end every prompt with `_Enter` or a value. |\n\n## References\n\n- [references/rhinoscriptsyntax-cheatsheet.md](references/rhinoscriptsyntax-cheatsheet.md) — most-used `rs.*` functions by category.\n- [references/rhinocommon-map.md](references/rhinocommon-map.md) — which namespace to import for which task.\n- [references/macros-and-loading.md](references/macros-and-loading.md) — command-line macro syntax, `LoadScript` / `RunScript`, search paths.\n- [references/vbscript-quirks.md](references/vbscript-quirks.md) — VBScript-only traps relevant to RhinoScript.\n\n### Upstream docs\n\n- RhinoScript landing: <https://docs.mcneel.com/rhino/8/help/en-us/information/rhinoscripting.htm>\n- Developer hub: <https://developer.rhino3d.com/>\n- RhinoCommon API index: <https://mcneel.github.io/rhinocommon-api-docs/api/RhinoCommon/html/R_Project_RhinoCommon.htm>\n- Example scripts repo: <https://github.com/mcneel/rhino-developer-samples/tree/8/rhinoscript>\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn71kvdba3t2jfkk6nbgnytg0s81617g\",\n  \"slug\": \"rhino3d-scripts\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1778798838895\n}\n\nFile v1.1.0:references/macros-and-loading.md\n\n# Macros, Loading, and Running Scripts\n\n## Command Macros (no script needed)\n\nA macro is a string of command-line input. Anywhere Rhino accepts a command (alias, toolbar button, `_ReadCommandFile`), you can place a macro.\n\n### Syntax rules\n\n| Token | Meaning |\n|---|---|\n| `!` | **Cancel** any currently running command before this one starts. Always start macros with `!`. |\n| `_` | Use the **English** (invariant) command name, so the macro works in any locale. |\n| `-` | Run the command in **script mode** — suppress dialogs, accept input from the macro string. |\n| `_Enter` | Press Enter at the current prompt. |\n| `Pause` | Stop and wait for the user to supply this input interactively. |\n| `;` | Comment to end of line. |\n| Newline | Same as a space — a separator between tokens, not a command terminator. |\n\n### Example macros\n\n```text\n! _-Line 0,0,0 10,0,0\n! _-Circle 0,0,0 5 _Enter\n! _SelAll _Delete\n! _-Properties _Object _Name \"MyObject\" _EnterEnd _Enter\n! _-RunPythonScript \"MyScript.py\"\n```\n\n## Running Saved Scripts\n\n### Python (`.py`)\n\n```text\n_-RunPythonScript \"C:\\Users\\example\\Scripts\\MyScript.py\"\n```\n\nOr, with the script folder on the search path:\n\n```text\n_-RunPythonScript \"MyScript.py\"\n```\n\n`_EditPythonScript` opens the legacy editor; `_ScriptEditor` (Rhino 8) opens the unified editor with Python 3, VB, and C#.\n\n### RhinoScript (`.rvb`, `.vbs`)\n\nTwo steps: **load** the file (registers its subs/functions), then **run** a named sub.\n\n```text\n_-LoadScript \"MyScript.rvb\"\n_-RunScript MyMainSub\n```\n\nA single `.rvb` can hold many subs; `_RunScript` chooses which to invoke.\n\n### Search Paths\n\n`Options → Files → Search paths` — folders listed here are scanned when you reference a script by bare filename. Without this, you must give a full path.\n\n### Startup Scripts\n\n`Options → RhinoScript → Startup` (and `Options → Python → Startup`) — files in these lists run once when Rhino opens. Useful for registering custom commands or aliases.\n\n**Guard against missing document** in startup code:\n\n```python\nimport scriptcontext as sc\n\ndef startup():\n    if sc.doc is None:\n        return\n\nstartup()\n```\n\n## Toolbar Buttons & Aliases\n\nA toolbar button’s **Command** field is just a macro. To make a button that runs your script:\n\n```text\n! _-RunPythonScript \"MyScript.py\"\n```\n\nSet the **Tooltip** to a short description; set the icon via the button editor.\n\nTo create an alias: `Options → Aliases → New`. The alias name becomes a typed command; its value is the macro.\n\n## Invoking Macros From a Script\n\n```python\nimport rhinoscriptsyntax as rs\nrs.Command(\"! _-Line 0,0,0 10,0,0\", echo=False)\n```\n\n`echo=False` suppresses command-history output but does **not** suppress prompts — always use `-` and complete every prompt within the macro string.\n\nFile v1.1.0:references/methods-and-functions.md\n\n# Methods and Functions\r\n\r\n> [!NOTE]\r\n> The `rhinoscriptsyntax` (Python) and `RhinoScript` (VBScript) APIs nearly 100% mirrors.\r\n> Function names match; only the call syntax differs. Many studios, firms, and individual users have\r\n> years of accumulated RhinoScript code they haven't bothered to port.\r\n\r\n- Function names match; only the call syntax differs\r\n- `RhinoScript` (*VBScript*) has 3 method/function and property categories not included in\r\n `rhinoscriptsyntax` (*Python*)\r\n  - See [vbscript-methods.md](vbscript-methods.md) for VBScript exclusive methods and properties\r\n\r\n> [!IMPORTANT]\r\n> `RhinoScript` is exclusive to Windows.\r\n\r\n## Application\r\n\r\n- **Python**: [AddSearchPath](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AddSearchPath)\r\n- **VBScript**: [AddSearchPath](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/addsearchpath.htm)\r\n- **Python**: [AliasCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasCount)\r\n- **VBScript**: [AliasCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliascount.htm)\r\n- **Python**: [AliasMacro](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasMacro)\r\n- **VBScript**: [AliasMacro](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliasmacro.htm)\r\n- **Python**: [AliasNames](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasNames)\r\n- **VBScript**: [AliasNames](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliasnames.htm)\r\n- **Python**: [AppearanceColor](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AppearanceColor)\r\n- **VBScript**: [AppearanceColor](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/appearancecolor.htm)\r\n- **Python**: [AutosaveFile](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AutosaveFile)\r\n- **VBScript**: [AutosaveFile](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/autosavefile.htm)\r\n- **Python**: [AutosaveInterval](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AutosaveInterval)\r\n- **VBScript**: [AutosaveInterval](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/autosaveinterval.htm)\r\n- **Python**: [BuildDate](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-BuildDate)\r\n- **VBScript**: [BuildDate](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/builddate.htm)\r\n- **Python**: [ClearCommandHistory](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ClearCommandHistory)\r\n- **VBScript**: [ClearCommandHistory](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/clearcommandhistory.htm)\r\n- **Python**: [Command](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Command)\r\n- **VBScript**: [Command](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/command.htm)\r\n- **Python**: [CommandHistory](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-CommandHistory)\r\n- **VBScript**: [CommandHistory](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/commandhistory.htm)\r\n- **Python**: [DefaultRenderer](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-DefaultRenderer)\r\n- **VBScript**: [DefaultRenderer](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/defaultrenderer.htm)\r\n- **Python**: [DeleteAlias](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-DeleteAlias)\r\n- **VBScript**: [DeleteAlias](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/deletealias.htm)\r\n- **Python**: [DeleteSearchPath](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-DeleteSearchPath)\r\n- **VBScript**: [DeleteSearchPath](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/deletesearchpath.htm)\r\n- **Python**: [DisplayOleAlerts](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-DisplayOleAlerts)\r\n- **VBScript**: [DisplayOleAlerts](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/displayolealerts.htm)\r\n- **Python**: [EdgeAnalysisColor](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-EdgeAnalysisColor)\r\n- **VBScript**: [EdgeAnalysisColor](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/edgeanalysiscolor.htm)\r\n- **Python**: [EdgeAnalysisMode](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-EdgeAnalysisMode)\r\n- **VBScript**: [EdgeAnalysisMode](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/edgeanalysismode.htm)\r\n- **Python**: [EnableAutosave](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-EnableAutosave)\r\n- **VBScript**: [EnableAutosave](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/enableautosave.htm)\r\n- **Python**: [EnablePlugIn](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-EnablePlugIn)\r\n- **VBScript**: [EnablePlugIn](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/enableplugin.htm)\r\n- **Python**: [ExeFolder](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ExeFolder)\r\n- **VBScript**: [ExeFolder](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exefolder.htm)\r\n- **Python**: [ExePlatform](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ExePlatform)\r\n- **VBScript**: [ExePlatform](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exeplatform.htm)\r\n- **Python**: [ExeServiceRelease](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ExeServiceRelease)\r\n- **VBScript**: [ExeServiceRelease](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exeservicerelease.htm)\r\n- **Python**: [ExeVersion](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ExeVersion)\r\n- **VBScript**: [ExeVersion](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exeversion.htm)\r\n- **Python**: [Exit](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Exit)\r\n- **VBScript**: [Exit](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/exit.htm)\r\n- **Python**: [FindFile](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-FindFile)\r\n- **VBScript**: [FindFile](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/findfile.htm)\r\n- **Python**: [GetPlugInObject](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-GetPlugInObject)\r\n- **VBScript**: [GetPlugInObject](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/getpluginobject.htm)\r\n- **Python**: [InCommand](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-InCommand)\r\n- **VBScript**: [InCommand](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/incommand.htm)\r\n- **Python**: [InstallFolder](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-InstallFolder)\r\n- **VBScript**: [InstallFolder](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/installfolder.htm)\r\n- **Python**: [IsAlias](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-IsAlias)\r\n- **VBScript**: [IsAlias](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/isalias.htm)\r\n- **Python**: [IsCommand](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-IsCommand)\r\n- **VBScript**: [IsCommand](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/iscommand.htm)\r\n- **Python**: [IsPlugIn](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-IsPlugIn)\r\n- **VBScript**: [IsPlugIn](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/isplugin.htm)\r\n- **Python**: [IsRunningOnWindows](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-IsRunningOnWindows)\r\n- **VBScript**: [IsRunningOnWindows](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/isrunningonwindows.htm)\r\n- **Python**: [LastCommandName](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-LastCommandName)\r\n- **VBScript**: [LastCommandName](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/lastcommandname.htm)\r\n- **Python**: [LastCommandResult](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-LastCommandResult)\r\n- **VBScript**: [LastCommandResult](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/lastcommandresult.htm)\r\n- **Python**: [LocaleID](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-LocaleID)\r\n- **VBScript**: [LocaleID](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/localeid.htm)\r\n- **Python**: [Ortho](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Ortho)\r\n- **VBScript**: [Ortho](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/ortho.htm)\r\n- **Python**: [Osnap](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Osnap)\r\n- **VBScript**: [Osnap](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/osnap.htm)\r\n- **Python**: [OsnapDialog](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-OsnapDialog)\r\n- **VBScript**: [OsnapDialog](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/osnapdialog.htm)\r\n- **Python**: [OsnapMode](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-OsnapMode)\r\n- **VBScript**: [OsnapMode](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/osnapmode.htm)\r\n- **Python**: [Planar](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Planar)\r\n- **VBScript**: [Planar](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/planar.htm)\r\n- **Python**: [PlugInId](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-PlugInId)\r\n- **VBScript**: [PlugInId](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/pluginid.htm)\r\n- **Python**: [PlugIns](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-PlugIns)\r\n- **VBScript**: [PlugIns](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/plugins.htm)\r\n- **Python**: [ProjectOsnaps](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ProjectOsnaps)\r\n- **VBScript**: [ProjectOsnaps](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/projectosnaps.htm)\r\n- **Python**: [Prompt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Prompt)\r\n- **VBScript**: [Prompt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/prompt.htm)\r\n- **Python**: [ScreenSize](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ScreenSize)\r\n- **VBScript**: [ScreenSize](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/screensize.htm)\r\n- **Python**: [SdkVersion](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-SdkVersion)\r\n- **VBScript**: [SdkVersion](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/sdkversion.htm)\r\n- **Python**: [SearchPathCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-SearchPathCount)\r\n- **VBScript**: [SearchPathCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/searchpathcount.htm)\r\n- **Python**: [SearchPathList](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-SearchPathList)\r\n- **VBScript**: [SearchPathList](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/searchpathlist.htm)\r\n- **Python**: [SendKeystrokes](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-SendKeystrokes)\r\n- **VBScript**: [SendKeystrokes](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/sendkeystrokes.htm)\r\n- **Python**: [Snap](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Snap)\r\n- **VBScript**: [Snap](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/snap.htm)\r\n- **Python**: [StatusBarDistance](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarDistance)\r\n- **VBScript**: [StatusBarDistance](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbardistance.htm)\r\n- **Python**: [StatusBarMessage](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarMessage)\r\n- **VBScript**: [StatusBarMessage](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarmessage.htm)\r\n- **Python**: [StatusBarPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarPoint)\r\n- **VBScript**: [StatusBarPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarpoint.htm)\r\n- **Python**: [StatusBarProgressMeterShow](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarProgressMeterShow)\r\n- **VBScript**: [StatusBarProgressMeterShow](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarprogressmetershow.htm)\r\n- **Python**: [StatusBarProgressMeterUpdate](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarProgressMeterUpdate)\r\n- **VBScript**: [StatusBarProgressMeterUpdate](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarprogressmeterupdate.htm)\r\n- **Python**: [StatusBarProgressMeterHide](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-StatusBarProgressMeterHide)\r\n- **VBScript**: [StatusBarProgressMeterHide](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/statusbarprogressmeterhide.htm)\r\n- **Python**: [TemplateFile](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-TemplateFile)\r\n- **VBScript**: [TemplateFile](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/templatefile.htm)\r\n- **Python**: [TemplateFolder](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-TemplateFolder)\r\n- **VBScript**: [TemplateFolder](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/templatefolder.htm)\r\n- **Python**: [WindowHandle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-WindowHandle)\r\n- **VBScript**: [WindowHandle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/windowhandle.htm)\r\n- **Python**: [WorkingFolder](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-WorkingFolder)\r\n- **VBScript**: [WorkingFolder](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/workingfolder.htm)\r\n\r\n## Block\r\n\r\n- **Python**: [AddBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-AddBlock)\r\n- **VBScript**: [AddBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/addblock.htm)\r\n- **Python**: [BlockContainerCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockContainerCount)\r\n- **VBScript**: [BlockContainerCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockcontainercount.htm)\r\n- **Python**: [BlockContainers](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockContainers)\r\n- **VBScript**: [BlockContainers](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockcontainers.htm)\r\n- **Python**: [BlockCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockCount)\r\n- **VBScript**: [BlockCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockcount.htm)\r\n- **Python**: [BlockDescription](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockDescription)\r\n- **VBScript**: [BlockDescription](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockdescription.htm)\r\n- **Python**: [BlockInstanceCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstanceCount)\r\n- **VBScript**: [BlockInstanceCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstancecount.htm)\r\n- **Python**: [BlockInstanceInsertPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstanceInsertPoint)\r\n- **VBScript**: [BlockInstanceInsertPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstanceinsertpoint.htm)\r\n- **Python**: [BlockInstanceName](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstanceName)\r\n- **VBScript**: [BlockInstanceName](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstancename.htm)\r\n- **Python**: [BlockInstances](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstances)\r\n- **VBScript**: [BlockInstances](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstances.htm)\r\n- **Python**: [BlockInstanceXform](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockInstanceXform)\r\n- **VBScript**: [BlockInstanceXform](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockinstancexform.htm)\r\n- **Python**: [BlockNames](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockNames)\r\n- **VBScript**: [BlockNames](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blocknames.htm)\r\n- **Python**: [BlockObjectCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockObjectCount)\r\n- **VBScript**: [BlockObjectCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockobjectcount.htm)\r\n- **Python**: [BlockObjects](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockObjects)\r\n- **VBScript**: [BlockObjects](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockobjects.htm)\r\n- **Python**: [BlockPath](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockPath)\r\n- **VBScript**: [BlockPath](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockpath.htm)\r\n- **Python**: [BlockStatus](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-BlockStatus)\r\n- **VBScript**: [BlockStatus](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/blockstatus.htm)\r\n- **Python**: [DeleteBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-DeleteBlock)\r\n- **VBScript**: [DeleteBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/deleteblock.htm)\r\n- **Python**: [ExplodeBlockInstance](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-ExplodeBlockInstance)\r\n- **VBScript**: [ExplodeBlockInstance](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/explodeblockinstance.htm)\r\n- **Python**: [InsertBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-InsertBlock)\r\n- **VBScript**: [InsertBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/insertblock.htm)\r\n- **Python**: [InsertBlock2](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-InsertBlock2)\r\n- **VBScript**: [InsertBlock2](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/insertblock2.htm)\r\n- **Python**: [IsBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlock)\r\n- **VBScript**: [IsBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblock.htm)\r\n- **Python**: [IsBlockEmbedded](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlockEmbedded)\r\n- **VBScript**: [IsBlockEmbedded](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblockembedded.htm)\r\n- **Python**: [IsBlockInstance](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlockInstance)\r\n- **VBScript**: [IsBlockInstance](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblockinstance.htm)\r\n- **Python**: [IsBlockInUse](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlockInUse)\r\n- **VBScript**: [IsBlockInUse](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblockinuse.htm)\r\n- **Python**: [IsBlockReference](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-IsBlockReference)\r\n- **VBScript**: [IsBlockReference](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/isblockreference.htm)\r\n- **Python**: [RenameBlock](https://developer.rhino3d.com/api/RhinoScriptSyntax/#block-RenameBlock)\r\n- **VBScript**: [RenameBlock](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/block_methods/renameblock.htm)\r\n\r\n## Curve\r\n\r\n- **Python**: [AddArc](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddArc)\r\n- **VBScript**: [AddArc](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addarc.htm)\r\n- **Python**: [AddArc3Pt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddArc3Pt)\r\n- **VBScript**: [AddArc3Pt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addarc3pt.htm)\r\n- **Python**: [AddArcPtTanPt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddArcPtTanPt)\r\n- **VBScript**: [AddArcPtTanPt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addarcpttanpt.htm)\r\n- **Python**: [AddBlendCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddBlendCurve)\r\n- **VBScript**: [AddBlendCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addblendcurve.htm)\r\n- **Python**: [AddCircle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddCircle)\r\n- **VBScript**: [AddCircle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addcircle.htm)\r\n- **Python**: [AddCircle3Pt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddCircle3Pt)\r\n- **VBScript**: [AddCircle3Pt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addcircle3pt.htm)\r\n- **Python**: [AddCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddCurve)\r\n- **VBScript**: [AddCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addcurve.htm)\r\n- **Python**: [AddEllipse](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddEllipse)\r\n- **VBScript**: [AddEllipse](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addellipse.htm)\r\n- **Python**: [AddEllipse3Pt](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddEllipse3Pt)\r\n- **VBScript**: [AddEllipse3Pt](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addellipse3pt.htm)\r\n- **Python**: [AddFilletCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddFilletCurve)\r\n- **VBScript**: [AddFilletCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addfilletcurve.htm)\r\n- **Python**: [AddInterpCrvOnSrf](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddInterpCrvOnSrf)\r\n- **VBScript**: [AddInterpCrvOnSrf](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addinterpcrvonsrf.htm)\r\n- **Python**: [AddInterpCrvOnSrfUV](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddInterpCrvOnSrfUV)\r\n- **VBScript**: [AddInterpCrvOnSrfUV](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addinterpcrvonsrfuv.htm)\r\n- **Python**: [AddInterpCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddInterpCurve)\r\n- **VBScript**: [AddInterpCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addinterpcurve.htm)\r\n- **Python**: [AddLine](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddLine)\r\n- **VBScript**: [AddLine](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addline.htm)\r\n- **Python**: [AddNurbsCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddNurbsCurve)\r\n- **VBScript**: [AddNurbsCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addnurbscurve.htm)\r\n- **Python**: [AddPolyline](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddPolyline)\r\n- **VBScript**: [AddPolyline](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addpolyline.htm)\r\n- **Python**: [AddRectangle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddRectangle)\r\n- **VBScript**: [AddRectangle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addrectangle.htm)\r\n- **Python**: [AddSpiral](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddSpiral)\r\n- **VBScript**: [AddSpiral](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addspiral.htm)\r\n- **Python**: [AddSubCrv](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-AddSubCrv)\r\n- **VBScript**: [AddSubCrv](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/addsubcrv.htm)\r\n- **Python**: [ArcAngle](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ArcAngle)\r\n- **VBScript**: [ArcAngle](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/arcangle.htm)\r\n- **Python**: [ArcCenterPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ArcCenterPoint)\r\n- **VBScript**: [ArcCenterPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/arccenterpoint.htm)\r\n- **Python**: [ArcMidPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ArcMidPoint)\r\n- **VBScript**: [ArcMidPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/arcmidpoint.htm)\r\n- **Python**: [ArcRadius](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ArcRadius)\r\n- **VBScript**: [ArcRadius](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/arcradius.htm)\r\n- **Python**: [CircleCenterPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CircleCenterPoint)\r\n- **VBScript**: [CircleCenterPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/circlecenterpoint.htm)\r\n- **Python**: [CircleCircumference](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CircleCircumference)\r\n- **VBScript**: [CircleCircumference](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/circlecircumference.htm)\r\n- **Python**: [CircleRadius](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CircleRadius)\r\n- **VBScript**: [CircleRadius](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/circleradius.htm)\r\n- **Python**: [CloseCurve](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CloseCurve)\r\n- **VBScript**: [CloseCurve](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/closecurve.htm)\r\n- **Python**: [ClosedCurveOrientation](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ClosedCurveOrientation)\r\n- **VBScript**: [ClosedCurveOrientation](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/closedcurveorientation.htm)\r\n- **Python**: [ConvertCurveToPolyline](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-ConvertCurveToPolyline)\r\n- **VBScript**: [ConvertCurveToPolyline](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/convertcurvetopolyline.htm)\r\n- **Python**: [CurveArcLengthPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveArcLengthPoint)\r\n- **VBScript**: [CurveArcLengthPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvearclengthpoint.htm)\r\n- **Python**: [CurveArea](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveArea)\r\n- **VBScript**: [CurveArea](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvearea.htm)\r\n- **Python**: [CurveAreaCentroid](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveAreaCentroid)\r\n- **VBScript**: [CurveAreaCentroid](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveareacentroid.htm)\r\n- **Python**: [CurveArrows](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveArrows)\r\n- **VBScript**: [CurveArrows](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvearrows.htm)\r\n- **Python**: [CurveBooleanDifference](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveBooleanDifference)\r\n- **VBScript**: [CurveBooleanDifference](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvebooleandifference.htm)\r\n- **Python**: [CurveBooleanIntersection](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveBooleanIntersection)\r\n- **VBScript**: [CurveBooleanIntersection](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvebooleanintersection.htm)\r\n- **Python**: [CurveBooleanUnion](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveBooleanUnion)\r\n- **VBScript**: [CurveBooleanUnion](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvebooleanunion.htm)\r\n- **Python**: [CurveBrepIntersect](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveBrepIntersect)\r\n- **VBScript**: [CurveBrepIntersect](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvebrepintersect.htm)\r\n- **Python**: [CurveClosestObject](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveClosestObject)\r\n- **VBScript**: [CurveClosestObject](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveclosestobject.htm)\r\n- **Python**: [CurveClosestPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveClosestPoint)\r\n- **VBScript**: [CurveClosestPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveclosestpoint.htm)\r\n- **Python**: [CurveContourPoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveContourPoints)\r\n- **VBScript**: [CurveContourPoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvecontourpoints.htm)\r\n- **Python**: [CurveCurvature](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveCurvature)\r\n- **VBScript**: [CurveCurvature](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvecurvature.htm)\r\n- **Python**: [CurveCurveIntersection](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveCurveIntersection)\r\n- **VBScript**: [CurveCurveIntersection](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvecurveintersection.htm)\r\n- **Python**: [CurveDegree](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDegree)\r\n- **VBScript**: [CurveDegree](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedegree.htm)\r\n- **Python**: [CurveDeviation](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDeviation)\r\n- **VBScript**: [CurveDeviation](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedeviation.htm)\r\n- **Python**: [CurveDim](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDim)\r\n- **VBScript**: [CurveDim](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedim.htm)\r\n- **Python**: [CurveDirectionsMatch](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDirectionsMatch)\r\n- **VBScript**: [CurveDirectionsMatch](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedirectionsmatch.htm)\r\n- **Python**: [CurveDiscontinuity](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDiscontinuity)\r\n- **VBScript**: [CurveDiscontinuity](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvediscontinuity.htm)\r\n- **Python**: [CurveDomain](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveDomain)\r\n- **VBScript**: [CurveDomain](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvedomain.htm)\r\n- **Python**: [CurveEditPoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveEditPoints)\r\n- **VBScript**: [CurveEditPoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveeditpoints.htm)\r\n- **Python**: [CurveEndPoint](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveEndPoint)\r\n- **VBScript**: [CurveEndPoint](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveendpoint.htm)\r\n- **Python**: [CurveFilletPoints](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveFilletPoints)\r\n- **VBScript**: [CurveFilletPoints](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curvefilletpoints.htm)\r\n- **Python**: [CurveFrame](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveFrame)\r\n- **VBScript**: [CurveFrame](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/curve_methods/curveframe.htm)\r\n- **Python**: [CurveKnotCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#curve-CurveKnotCount)\r\n- **VBScript**: [CurveKnotCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/c\n\nArchive v1.0.0: 6 files, 10962 bytes\n\nFiles: references/macros-and-loading.md (2758b), references/rhinocommon-map.md (3810b), references/rhinoscriptsyntax-cheatsheet.md (3535b), references/vbscript-quirks.md (3326b), SKILL.md (8850b), _meta.json (134b)","readmeExcerpt":"Skill: Rhino 3D Scripts Owner: jhauga Summary: Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom... Tags: latest:1.1.1 Version history: v1.1.1 | 2026-05-29T00:25:40.570Z | user - Removed the file: skill-card.md - Updated documentation to add new troubleshooting and gotcha notes, including details about Rhino.Rh","codeSnippets":[],"executableExamples":[{"language":"python","snippet":"import rhinoscriptsyntax as rs\nimport scriptcontext as sc\nimport Rhino\n\ndef main():\n    obj_id = rs.GetObject(\"Select a curve\", filter=rs.filter.curve, preselect=True)\n    if not obj_id:\n        return\n    length = rs.CurveLength(obj_id)\n    print(\"Length: {0:.4f}\".format(length))\n\nif __name__ == \"__main__\":\n    main()"},{"language":"python","snippet":"import Rhino\nimport scriptcontext as sc\n\ndoc = sc.doc  # Rhino.RhinoDoc.ActiveDoc\ntol = doc.ModelAbsoluteTolerance\n\ncircle = Rhino.Geometry.Circle(Rhino.Geometry.Point3d(0, 0, 0), 5.0)\ncurve_id = doc.Objects.AddCircle(circle)\ndoc.Views.Redraw()"},{"language":"vbscript","snippet":"Option Explicit\n\nCall Main()\n\nSub Main()\n    Dim strObject\n    strObject = Rhino.GetObject(\"Select a curve\", 4)  ' 4 = curve filter\n    If IsNull(strObject) Then Exit Sub\n    Rhino.Print \"Length: \" & Rhino.CurveLength(strObject)\nEnd Sub"},{"language":"python","snippet":"import Rhino\nimport scriptcontext as sc\n\ngo = Rhino.Input.Custom.GetObject()\ngo.SetCommandPrompt(\"Select breps\")\ngo.GeometryFilter = Rhino.DocObjects.ObjectType.Brep\ngo.SubObjectSelect = False\ngo.GetMultiple(1, 0)\nif go.CommandResult() != Rhino.Commands.Result.Success:\n    pass\nelse:\n    ids = [go.Object(i).ObjectId for i in range(go.ObjectCount)]"},{"language":"text","snippet":"! _-Line 0,0,0 10,0,0\n! _-Circle 0,0,0 5 _Enter\n! _SelAll _Delete\n! _-Properties _Object _Name \"MyObject\" _EnterEnd _Enter\n! _-RunPythonScript \"MyScript.py\""},{"language":"text","snippet":"_-RunPythonScript \"C:\\Users\\example\\Scripts\\MyScript.py\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: rhino3d-scripts\ndescription: 'Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCommon-based scripts; automate Rhino modeling tasks; build command macros; manipulate Rhino geometry, layers, blocks, or document objects; pick objects from the viewport; control redraw and undo; or load and run scripts from the Rhino Script Editor. Covers `rhinoscriptsyntax`, `scriptcontext`, the `Rhino.*` RhinoCommon namespaces (`Rhino.Geometry`, `Rhino.DocObjects`, `Rhino.Input`, `Rhino.UI`, `Rhino.Display`, `Rhino.FileIO`), and the Rhino 8 unified Script Editor.'\n---\n\n# Rhino 3D Scripting Skill\n\nWrite production-quality scripts for Rhinoceros 3D. Covers the three scripting surfaces (RhinoScript/VBScript, RhinoPython, direct RhinoCommon .NET) and the Rhino 8+ Script Editor.\n\n## When to Use This Skill\n\n- User asks to write, edit, or debug a `.rvb`, `.vbs`, or `.py` Rhino script\n- User wants a Rhino **command macro** or wants to automate a sequence of Rhino commands\n- User wants to manipulate geometry, layers, blocks, materials, viewports, or annotations from code\n- User mentions `rhinoscriptsyntax`, `scriptcontext`, `RhinoCommon`, `Rhino.Geometry`, `RhinoDoc`, or the Script Editor\n- User wants to pick objects, prompt for input, or build a small UI inside Rhino\n- User asks how to load, run, or distribute a script (startup scripts, aliases, toolbar buttons)\n\n## Choosing a Scripting Surface\n\nPick the surface based on the task, not preference. Recommend Python by default for new work.\n\n| Surface | When to choose | File ext |\n|---|---|---|\n| **RhinoPython** (`rhinoscriptsyntax` + RhinoCommon) | Default for new scripts. Best ecosystem, readable, full RhinoCommon access. | `.py` |\n| **RhinoScript** (VBScript) | Maintaining legacy `.rvb`/`.vbs` files; integrating with VBA/COM. | `.rvb`, `.vbs` |\n| **RhinoCommon (C#/.NET) via Script Editor** | Performance-critical loops, complex geometry, leveraging .NET libraries. | `.cs` |\n| **Command macro** | Pure sequence of existing Rhino commands; no logic. | toolbar/alias |\n\nA macro is **not** a script — it is a string of command-line input (e.g. `! _-Line 0,0,0 10,0,0 _Enter`). Use a script the moment you need a variable, loop, or conditional.\n\n## Prerequisites\n\n- Rhino 7 or later (Rhino 8 strongly recommended — unified Script Editor supports Python 3, VB, and C# in one window).\n- Script Editor: type `_ScriptEditor` (Rhino 8) or `_EditPythonScript` / `_EditScript` (older).\n- Run a saved file from the command line with `_-RunPythonScript` or `_LoadScript` + `_RunScript`.\n\n## Core Patterns\n\n### Python: minimal scaffold\n\n```python\nimport rhinoscriptsyntax as rs\nimport scriptcontext as sc\nimport Rhino\n\ndef main():\n    obj_id = rs.GetObject(\"Select a curve\", filter=rs.filter.curve, preselect=True)\n    if not obj_id:\n        return\n    length = rs.CurveLength(obj_id)\n    print(\"Length: {0:.4f}\".format(length))\n\nif __name__ == "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71kvdba3t2jfkk6nbgnytg0s81617g\",\n  \"slug\": \"rhino3d-scripts\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1780014340570\n}"},{"path":"references/macros-and-loading.md","content":"# Macros, Loading, and Running Scripts\n\n## Command Macros (no script needed)\n\nA macro is a string of command-line input. Anywhere Rhino accepts a command (alias, toolbar button, `_ReadCommandFile`), you can place a macro.\n\n### Syntax rules\n\n| Token | Meaning |\n|---|---|\n| `!` | **Cancel** any currently running command before this one starts. Always start macros with `!`. |\n| `_` | Use the **English** (invariant) command name, so the macro works in any locale. |\n| `-` | Run the command in **script mode** — suppress dialogs, accept input from the macro string. |\n| `_Enter` | Press Enter at the current prompt. |\n| `Pause` | Stop and wait for the user to supply this input interactively. |\n| `;` | Comment to end of line. |\n| Newline | Same as a space — a separator between tokens, not a command terminator. |\n\n### Example macros\n\n```text\n! _-Line 0,0,0 10,0,0\n! _-Circle 0,0,0 5 _Enter\n! _SelAll _Delete\n! _-Properties _Object _Name \"MyObject\" _EnterEnd _Enter\n! _-RunPythonScript \"MyScript.py\"\n```\n\n## Running Saved Scripts\n\n### Python (`.py`)\n\n```text\n_-RunPythonScript \"C:\\Users\\example\\Scripts\\MyScript.py\"\n```\n\nOr, with the script folder on the search path:\n\n```text\n_-RunPythonScript \"MyScript.py\"\n```\n\n`_EditPythonScript` opens the legacy editor; `_ScriptEditor` (Rhino 8) opens the unified editor with Python 3, VB, and C#.\n\n### RhinoScript (`.rvb`, `.vbs`)\n\nTwo steps: **load** the file (registers its subs/functions), then **run** a named sub.\n\n```text\n_-LoadScript \"MyScript.rvb\"\n_-RunScript MyMainSub\n```\n\nA single `.rvb` can hold many subs; `_RunScript` chooses which to invoke.\n\n### Search Paths\n\n`Options → Files → Search paths` — folders listed here are scanned when you reference a script by bare filename. Without this, you must give a full path.\n\n### Startup Scripts\n\n`Options → RhinoScript → Startup` (and `Options → Python → Startup`) — files in these lists run once when Rhino opens. Useful for registering custom commands or aliases.\n\n**Guard against missing document** in startup code:\n\n```python\nimport scriptcontext as sc\n\ndef startup():\n    if sc.doc is None:\n        return\n\nstartup()\n```\n\n## Toolbar Buttons & Aliases\n\nA toolbar button’s **Command** field is just a macro. To make a button that runs your script:\n\n```text\n! _-RunPythonScript \"MyScript.py\"\n```\n\nSet the **Tooltip** to a short description; set the icon via the button editor.\n\nTo create an alias: `Options → Aliases → New`. The alias name becomes a typed command; its value is the macro.\n\n## Invoking Macros From a Script\n\n```python\nimport rhinoscriptsyntax as rs\nrs.Command(\"! _-Line 0,0,0 10,0,0\", echo=False)\n```\n\n`echo=False` suppresses command-history output but does **not** suppress prompts — always use `-` and complete every prompt within the macro string.\n\n## rhinocode CLI (Rhino 8)\n\n`rhinocode` is the Rhino 8 command-line tool for running scripts and commands against a running Rhino instance from an external terminal.\n\n### Basic commands\n\n```text\nrhinocode script \"C:\\path\\to\\MyScript.p"},{"path":"references/methods-and-functions.md","content":"# Methods and Functions\r\n\r\n> [!NOTE]\r\n> The `rhinoscriptsyntax` (Python) and `RhinoScript` (VBScript) APIs nearly 100% mirrors.\r\n> Function names match; only the call syntax differs. Many studios, firms, and individual users have\r\n> years of accumulated RhinoScript code they haven't bothered to port.\r\n\r\n- Function names match; only the call syntax differs\r\n- `RhinoScript` (*VBScript*) has 3 method/function and property categories not included in\r\n `rhinoscriptsyntax` (*Python*)\r\n  - See [vbscript-methods.md](vbscript-methods.md) for VBScript exclusive methods and properties\r\n\r\n> [!IMPORTANT]\r\n> `RhinoScript` is exclusive to Windows.\r\n\r\n## Application\r\n\r\n- **Python**: [AddSearchPath](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AddSearchPath)\r\n- **VBScript**: [AddSearchPath](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/addsearchpath.htm)\r\n- **Python**: [AliasCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasCount)\r\n- **VBScript**: [AliasCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliascount.htm)\r\n- **Python**: [AliasMacro](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasMacro)\r\n- **VBScript**: [AliasMacro](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliasmacro.htm)\r\n- **Python**: [AliasNames](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasNames)\r\n- **VBScript**: [AliasNames](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliasnames.htm)\r\n- **Python**: [AppearanceColor](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AppearanceColor)\r\n- **VBScript**: [AppearanceColor](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/appearancecolor.htm)\r\n- **Python**: [AutosaveFile](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AutosaveFile)\r\n- **VBScript**: [AutosaveFile](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/autosavefile.htm)\r\n- **Python**: [AutosaveInterval](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AutosaveInterval)\r\n- **VBScript**: [AutosaveInterval](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/autosaveinterval.htm)\r\n- **Python**: [BuildDate](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-BuildDate)\r\n- **VBScript**: [BuildDate](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/builddate.htm)\r\n- **Python**: [ClearCommandHistory](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ClearCommandHistory)\r\n- **VBScript**: [ClearCommandHistory](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/clearcommandhistory.htm)\r\n- **Python**: [Command](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Command)\r\n- **VBScript**: [Command](https://mcneel.githu"},{"path":"references/rhinocommon-map.md","content":"# RhinoCommon Namespace Map\n\nUse this to decide which `Rhino.*` namespace to import for a task. All of these are accessible from Python with `import Rhino`.\n\n## Document & Object Model\n\n| Need | Namespace | Key types |\n|---|---|---|\n| The active document, units, tolerances, undo | `Rhino` | `RhinoDoc`, `RhinoApp` |\n| Reading/writing objects in the doc | `Rhino.DocObjects` | `RhinoObject`, `ObjectAttributes`, `Layer`, `ObjectType` |\n| Tables (layers, materials, blocks, dim styles) | `Rhino.DocObjects.Tables` | `LayerTable`, `InstanceDefinitionTable`, `MaterialTable` |\n| Custom per-object user data | `Rhino.DocObjects.Custom` | `UserData` |\n| File I/O (.3dm, import/export) | `Rhino.FileIO` | `File3dm`, `File3dmObject` |\n\n## Geometry\n\n| Need | Namespace | Key types |\n|---|---|---|\n| Points, vectors, transforms | `Rhino.Geometry` | `Point3d`, `Vector3d`, `Transform`, `Plane`, `BoundingBox` |\n| Curves | `Rhino.Geometry` | `Curve`, `NurbsCurve`, `PolylineCurve`, `LineCurve`, `ArcCurve` |\n| Surfaces & breps | `Rhino.Geometry` | `Surface`, `NurbsSurface`, `Brep`, `BrepFace`, `Extrusion` |\n| Meshes | `Rhino.Geometry` | `Mesh`, `MeshFace`, `MeshNgon` |\n| SubD | `Rhino.Geometry` | `SubD`, `SubDFace`, `SubDEdge` |\n| Geometry collections (vertices, edges, faces lists) | `Rhino.Geometry.Collections` | `MeshVertexList`, `BrepEdgeList` |\n| Intersections | `Rhino.Geometry.Intersect` | `Intersection`, `CurveIntersections` |\n| Mesh refinement | `Rhino.Geometry.MeshRefinements` | |\n| Space morphs (bend, twist, etc.) | `Rhino.Geometry.Morphs` | `BendSpaceMorph`, `TwistSpaceMorph` |\n\n## User Interaction\n\n| Need | Namespace | Key types |\n|---|---|---|\n| Prompts, getters, command results | `Rhino.Input` / `Rhino.Input.Custom` | `RhinoGet`, `GetObject`, `GetPoint`, `GetOption` |\n| Commands (when building a plugin) | `Rhino.Commands` | `Command`, `Result` |\n| Forms, dialogs, panels | `Rhino.UI` | `Dialog`, `Panels`, `RhinoEtoExtensions` |\n| UI controls / data sources | `Rhino.UI.Controls` | |\n| Gumball | `Rhino.UI.Gumball` | |\n\n## Display & Rendering\n\n| Need | Namespace | Key types |\n|---|---|---|\n| Viewports, display conduits, draw overlays | `Rhino.Display` | `DisplayPipeline`, `DisplayConduit`, `RhinoViewport` |\n| Render content (materials, environments) | `Rhino.Render` | `RenderContent`, `RenderMaterial`, `RenderTexture` |\n| Render mesh customization | `Rhino.Render.CustomRenderMeshes` | |\n| Post effects | `Rhino.Render.PostEffects` | |\n\n## Runtime & Plugins\n\n| Need | Namespace | Key types |\n|---|---|---|\n| Plugin lifecycle, settings | `Rhino.PlugIns` | `PlugIn`, `FileImportPlugIn`, `FileExportPlugIn` |\n| In-process Rhino (run Rhino from external .NET) | `Rhino.Runtime.InProcess` | `RhinoCore` |\n| Native interop (pointers, marshalling) | `Rhino.Runtime.InteropWrappers` | |\n| User notifications (toasts) | `Rhino.Runtime.Notifications` | |\n\n## Common Patterns\n\n```python\nimport Rhino\nimport scriptcontext as sc\nimport System.Drawing\n\ndoc = sc.doc                         "}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom... Skill: Rhino 3D Scripts Owner: jhauga Summary: Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom... Tags: latest:1.1.1 Version history: v1.1.1 | 2026-05-29T00:25:40.570Z | user - Removed the file: skill-card.md - Updated documentation to add new troubleshooting and gotcha notes, including details about Rhino.Rh","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1328,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T13:51:48.859Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T13:51:48.859Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T16:01:07.394Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}