I would like to build a automation workflow with Alfred that allows me to:
type keyword in Alfred “weight”
Alfred initiates a shell script that tells Rhino for Mac to start the command “Volume” on the currently selected 3D model in the currently open Rhino file
the numeric output of that calculation should be intercepted by the shell script and
used in a calculation for the appropriate weight
the weight value is than saved to clipboard so I can paste it into an Excel sheet
Does Rhino support the two items needed (“actuate command from shell script” and “grab calculated value from Rhino”) ?
Please bear in mind that I am absolutely new to scripting and only have currently the most basic understanding about it.
I have Alfred, but to be honest I haven’t spent any time with it. I usually just use AppleScript.
For your first question, no. But it can be done within Rhino with python. Which leads to your second question. I haven’t checked, I am in the process of switching to a new to me MacBookPro from my old MacPro, I have just installed Rhino, but I am just getting my python scripts ported. I believe python should be able to copy to the clipboard. I have a script that I use for something like this where it copies the weight to the Rhino Notes panel, it may be able to be converted to clipboard.
I may get a chance later this afternoon to try this out.
Yes, use xxx=rs.ClipboardText(). If a text string is inserted into the () as an argument, it is placed on the clipboard and the previous text on the clipboard is returned (if it exists). If the () is empty, it will return the text string currently on the clipboard (if it exists).
a simple paste into Rhino of the command script “! _Volume” will trigger the volume calculation on the still selected 3D model
… hence the actuation of the volume calculation is an easy part to be done from outside of Rhino (just focus to Rhino and paste text string “! _Volume”
Here is were I am stuck:
How to separate the numerical value within the Rhino output from for example:
You can just go to Command History down on the bottom left, 3 bars, I am rushing out and Rhino is not open so no screenshot, and jus copy the amount there.
Yes Randy, that is the hands on approach I am doing up to now.
My goal is to completely automate this and still being able to have some flexibility with choosing different material properties.
But: doing it all from one simply keyword from Alfred.
The final workflow I envision should be:
Working on a calculation in Excel.
open 3D model in Rhino and selecting model
type “weight” in Alfred + select material in Alfred
scripts are working
go back into Excel, selecting the proper text field
import rhinoscriptsyntax as rs
import math
import clr
clr.AddReference("Eto")
import Eto.Forms
objs = rs.GetObjects("Select Concrete Volumes", 16, False, True)
total = 0
for obj in objs:
if rs.IsObjectSolid(obj):
vol = rs.SurfaceVolume(obj)
yds = vol[0] / 46656
weight = yds * 3800
weight = int(math.ceil(weight))
total = total + weight
print str(weight) + " lbs"
rs.MessageBox("Total = " + str(total) + " lbs", 0, "Concrete Weight")
cb = Eto.Forms.Clipboard()
cb.Text = str(total)
that’s a script i use to calculate concrete weight (though the way it’s written is specifically going to calculate in Lbs per cu.yard in a template using inches as a unit… i don’t normally want the results going to the clipboard but the above example has been modified a little to do that.
without bringing up Python again, something you may want to look into is creating a Service in Automator.app instead of whatever you have going on in Alfred.
with a Service, it will create a menu item in Excel itself which can be assigned a keystroke (ie- you just use a keystroke in eXcel to trigger the shell script)
Automator has actions specifically to write various scripts within (AppleScript, shell script, javaScript)
for example, i have a Service in Rhino which i use to run scripts being written in Atom.app:
Hey Jeff, thanks for sharing the script above!
I am having troubles with my external drives atm and am on a deadline so I will have to look at this at a later date and may have questions
Regarding the suggestion about Automator - I loved to use Automator in the past and made extensive use of it, building droplets for repetitive tasks or building “scripts” to extend OS functions.
I never used the services feature as I loathe the deep menu diving it involved (funny - I never ever thought about assigning a shortly to those services now that you mention it).
I rather not use Automator any longer if there is a more efficient way.
I just upgraded to Sierra and found that for one reason or another some of my old Automator workflows just do not run as fast any longer - in some there is now ever so slightly a longer waiting time which breaks my workflow - hence I am rolling out Automator.
Another reason why a Automator service in Excel would not be as nice is that with the operation through Alfred I will have the correct value in my clipboard allowing for using it EVERYwhere
quickly mail projected weight of an assembly to a customer with mail.app
calculate in Excel
note value in a journal
add part weight to folder name in project folder,
…
thats the general idea here (I do this already, just all manually