Yeti
by nzarchitecture on Mon, 2011-05-30 04:30
Yeti is an opensource, live programming environment for Rhino.
Using Yeti you can build a parametric model through code and see changes instantly.
Yeti is still a work in progress and only offers a very basic geometry library at the moment, but you can improve it by contributing to the C# codebase over at bitbucket.
To install:
- Download Yeti.
- On Windows 7 and Vista, right click the file and choose 'unblock'.
- Drag yeti.rhp onto Rhino 4.0. It should install automatically.
- If you have a previous version of Yeti, it may be necessary to uninstall it before installing this version. Either delete all copies of yeti.rhp from your computer, or use the Rhino Unloader.
- Start Yeti by typing 'yeti' into Rhino.
- See the Yeti wiki for a quick introduction on Yeti code.
Plug-in rating:
(2 votes)
Downloads:
Plug-In videos:
Homepage:
Yeti homepage
License:
https://bitbucket.org/dmmd123/yeti/src/efc52bffe2da/yeti/licences.txt

Comments
Hi: What is the difference between:
From: 0
To: 100
steps: 5
and
From: 0
steps: 5
to: 100
Hi Alkrever,
As I am sure you have discovered, your two lists make two different sets of numbers despite having the same parameters (The first list creates 5 numbers, from 0 to 44.44, the second creates 5 numbers from 0 to 100).
I have not found a clean solution to this problem yet.
The essential difficulty some keywords (like the list) can have conflicting parameters. Consider :-
double:
from: 0
steps: 5
to: 100
stepsize: 1
The list clearly can not have numbers spanning from 0 to 100 in 5 steps when the numbers only increase in 1 unit increments.
The way Yeti currently handles these situations is by applying the parameters top to bottom, overriding parameters as they come into conflict. So the list created at each stage from top to bottom is:
from: 0 = {0, 1, ... 9}
steps: 5 = {0, 1, 2, 3, 4}
to: 100 = {0, 25, 50, 75, 100}
stepsize: 1 = {0, 1, 2, 3, 4}
I initially thought this would be the most intuitive way of dealing with conflicts since the user can see the impact of adding a new parameter to the list. But it doesn't work primarily because when you are using Yeti it is hard to know what parameters are being overridden (your first list produces what seems like the wrong list because setting 'to: 100' overrides the stepsize parameter from the default of 1 to 11.11 and steps: 5 just creates 5 numbers of this new stepsize spacing).
I am still not sure what the best way to handle this is. The options I am looking at are:
1. Making it so the parameters to keywords do not conflict. For example 'list' could be replaced with a 'range' (from, to, stepsize) and 'series' (from, stepsize, number) like in Grasshopper. I don't like this option because one advantage of text based input is being able to have a general keyword (like list) and then choosing what combination of parameters to construct it with.
2. Not allowing the user to select conflicting parameters - it is probably going to be difficult to define the logic to identify what a conflict is, and I also suspect applying two conflicting parameters could be useful in some situations.
3. Making it so the top-down behavior only happens when a conflict occurs. The problem with this is that you could end up with an even more confusing situation where the order of parameters does not matter, except in certain cases.
I am not sure how to best resolve this, so any suggestions would be welcome.
Daniel
Is there any chanse to inplement Yeti into grasshopper. It looks like they are pretty good for each other. (while dont keep imn mind that grasshopper is based on rhinocommon...
Hi Casy,
I definitely agree it would be beneficial to tie Yeti into the Grasshopper environment. One of my first ideas for implementing Yeti was to have it function like the cluster component in Grasshopper, with the code of Yeti generating a hidden Grasshopper model. I came across three problems with this:
1. You can't (and really don't want to) add inputs and outputs to a Grasshopper node on the fly. So the inputs and outputs would have to be predefined like the C# and python nodes.
2. A node within Grasshopper has no control of the update cycle - Yeti needs this control.
3. The interface to Grasshopper locks up when an update is underway - you would not be able to type while it updates.
Essentially putting Yeti into Grasshopper necessitates that it behaves like the compiled code nodes (C# or Python) and inorder for Yeti to be a live programming environment, it was necessary for Yeti to be separate from Grasshopper.
I still want to link the two, although I was thinking perhaps making it similar to the Excel link or the Slingshot Mysql link. If you have any ideas on how to make this happen I would be really interested in hearing them.
Daniel
maybe it is possible to connect a @yeti-resiever@ component to Yeti? I mean to have one or two (reciever and sender) components to send and recieve data? It looks like the best way for me.
BTW can you explain or give me the link on your idea/vision of Yeti - Wot do we need it for, what realtime calculating gives to us, etc.
Hi Casy,
I like the idea of a Grasshopper receiver/sender - or perhaps a more general receiver/sender. In particular it would be nice to use Grasshopper sliders as a controller for a Yeti model. This might be the first step towards integrating Yeti within Grasshopper.
Yeti is a research project for me, an attempt to see if anything other than text based procedural scripts and visual dataflow programming interfaces can produce a parametric model (I did a similar project on using logic programming to generate parametric models). The hope is that an alternative programming paradigm may improve some aspects of parametric modeling when compared to the other options. At this stage I am not sure Yeti has any distinct advantages, although I am going to test it by recreating our Smart Geometry project with it (http://www.nzarchitecture.com/blog/index.php/2011/04/11/smart-geometry-2...). My hunch is that live programming may overcome the problems visual programming has with modularity and inheritance, while maintaining the killer feature of visual programming - live debugging - but it is hard to know how it will play out.
Daniel
Hi Daniel,
Just a a mater of interest, why are you using openNurbs and not Rhinocommon?
Cheers
Evert
Hi Evert,
I might be wrong about this, but my understanding of Rhinocommon is that it only works with Rhino 5 - and Grasshopper gets around this by referencing its own Rhinocommon.dll.
I much prefer Rhinocommon to openNurbs, but since the geometry of Yeti is still fairly simple, it seemed faster just to develop with the existing Rhino4.0 SDK. Yeti and Rhino are not tightly coupled, so potentially the Rhinocommon SDK could be swapped in at a later stage, or Yeti could even be ported to a different geometry engine altogether.
Daniel