Skip to content

goswinr/Fesh.Rhino

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo

Fesh.Rhino

build publish yak latest tag yak version license code size

Fesh.Rhino is an F# scripting editor hosted inside Rhino3D on Windows.
It is based on Fesh.
It has semantic syntax highlighting, auto completion, type info tooltips and more.
The output window supports colored text via Fesher.

The example script LouvreAbuDhabi.fsx in the root folder generates the axes for cladding of the Louvre Abu Dhabi.
As shown in my talk at FSharpConf 2016:

Screenshot

Installation

Install via Food for Rhino https://www.food4rhino.com/en/app/fesh .
Or from inside Rhino via the PackageManager command, then search for Fesh.
No admin rights should be needed for this installation.

Then launch the editor with the command Fesh. Until RhinoCommon is targeted properly for .NET 7 this plugin only supports .NET Framework 4.8.
In Rhino use the command SetDotNetRuntime to switch between .NET Framework and .NET Core.

Manual Installation

You can also build the plugin from this repository via dotnet build.
Then drag and drop the file Fesh.rhp into Rhino.
Then launch the editor with the command Fesh.

The editor might not load properly if you have already another plug-in loaded that uses an older version of Fsharp.Core.
See this issue
Please report any issues you encounter.

Get Started Coding

All you need is to add a reference to RhinoCommon.dll:

#r "C:/Program Files/Rhino 8/System/RhinoCommon.dll" // adapt path if needed
open Rhino

If you are used to doing Rhino Scripting with Python I recommend using the Rhino.Scripting to have the same 900 functions available.
In addition I recommend the Rhino.Scripting.Fsharp package.
It provides useful extensions and curried functions for piping and partial application.

#r "C:/Program Files/Rhino 8/System/RhinoCommon.dll"
#r "nuget:Rhino.Scripting.Fsharp, 0.8.0" // includes Rhino.Scripting and FsEx

open System
open Rhino.
open Rhino.Scripting
open Rhino.Scripting.Fsharp // for curried functions
open FsEx // for extensions to Fsharp Collections

type rs = RhinoScriptSyntax

// use the rs object to call RhinoScript functions like in python
let crv = rs.GetObject("Select a curve",  rs.Filter.Curve)

Running

Run your script by presssing F5 key.
Like in Visual Studio you can also just evaluate the selected text by pressing Alt + Enter keys.
See the FSI menu for more options.

Blocking the UI thread ?

You can choose to run the scripts in Synchronous on the UI thread or Asynchronous on a background thread.
Synchronous mode is the default. Your UI will be blocked while the script is running.
But the interaction with Rhino is safer.

async mode

While the main Rhino Document is officially not thread safe, modifying the Rhino Document from a background thread is actually OK as long as there is only one thread doing it.
The main reason to use this editor in Async mode is to keep the Rhino UI and the Fesh UI responsive while doing long running operations.

The Rhino.Scripting library can be used from any thread.
If running async it will automatically marshal all calls that affect the UI to the main Rhino UI thread and wait for switching back till completion on UI thread.

Changelog

see CHANGELOG.md

License

MIT