JRhinoTools
===========
Four Rhino commands with matching orange toolbar icons.
Author: Yongsan Huang. Copyright 2026.
Requires Rhino 8.11 or newer on Windows x64 and Rhino's Python 3 runtime.
Rhino initializes its Python runtime when the first Python command is used.

PACKAGE MANAGER INSTALL
In Rhino, run PackageManager, search JRhinoTools, select it, and click Install.
Restart Rhino. Use the Installed tab for updates and uninstall.

LOCAL INSTALL
To install a downloaded .yak, run this in Rhino with the actual file path:

    _-PackageManager _Install "<full path to .yak>"

Alternatively, run the accompanying Install.ps1 in PowerShell. It uses the
Yak tool included with Rhino to install the local package for your account.

TOOLBAR
Commands work from the command line. If the toolbar is hidden, use
Toolbar > File > Open, choose the installed JRhinoTools.rui, and show its
JRhinoTools toolbar. Package files are installed by Rhino under:

    %APPDATA%\McNeel\Rhinoceros\packages\8.0\jrhinotools\

COMMANDS
J_BulkViewExport
  Exports every named view to PNG at the requested resolution and optional
  filename suffix. Restores the original model viewport afterward. Existing
  images and conflicting filenames receive a numbered filename.

J_DuplicateWithLayers
  Copies selected objects in place under the Duplicate layer, rebuilding their
  original layer paths and appearance. Original objects remain in place.

J_MeshRetrieve
  Removes mesh portions within the downward World-Z extrusion of planar
  surface guides. Processes the document's surfaces and meshes. Preserves
  object attributes and retains originals when a cut cannot be completed.
  Successfully processed surface guides are removed. Failed guides remain.
  Completed edits can be undone together with Rhino's Undo command.

J_ProjectObjects
  Moves selected objects toward selected surface, polysurface, or mesh targets.
  Draw a base rectangle: its normal sets the projection direction. The bottom
  centre of each object's plane-aligned bounds projects to the nearest forward
  target hit. Objects without a hit remain in place; Escape cancels the prompt.

The plugin embeds its Python scripts and does not depend on the author's
source folder or local paths. No Grasshopper installation is required.
