that data via serial to an external program to play as MIDI.
The problem is, I am using a third-party (Spikenzie Labs) serial-to-midi converter that cannot speak to the COM port while Firefly also does. Bear with me, as I am just starting to figure this out, but I imagine the following possibilities:
1. Hardwire an actual MIDI-out into my prototype and code it so that the signal is sent this way. Get a MIDI-to-USB cable and go into a different COM port.
2. Set up a virtual serial port? No idea if this is a thing.
3. Internalize the serial-to-midi conversion/TX to my Grasshopper/Firefly setup. I don't really know what this entails.
Any thoughts?Thanks as always for all of your digital trailblazing...
Josh…
Added by Joshua Jordan at 12:47pm on November 4, 2013
nt%3A1077447&xg_source=msg_com_forum
Now my file is like this
quite complicated. So I wonder whether I can do it with Hoopsnake, repeating process 1 for 4 times.
But the process involves 3 different starting input (in Circle 2), which is like this
Input a is the origin of the first rod (O1), Input b is to determine the direction of A1-O2, and Input c is the direction of the first rod (vector O1-A1).
I wonder how these 3 starting data can be calculated respectively in the iterations? Perhaps this involves some manipulation of data tree?
Can anyone give some suggestions? Thank you in advance for any help!
…
the "port" input. I would really appreciate any help!
For example, my Arduino board is connected to COM 3. The "ports available" component correctly identifies this port, and I know there is nothing wrong with the port itself since the Arduino communicates through COM 3 without problem when using an Arduino sketch.
The runtime error produced by the Firefly open/close port component:
1. Solution exception:Could not load type 'Grasshopper.Instances' from assembly 'Grasshopper, Version=1.0.0.20, Culture=neutral, PulicKeyToken=null'.
System specs:
Windows 7 64-bit
Rhinoceros 4.0 SR 9
Grasshopper Build 0.8.006
Firefly Build 1.0067
Arduino Uno R3
These error messages appear when Grasshopper is loaded from Rhino. They first appeared when Firefly was installed:
Object: Mega_Write (level 1){ Exception has been thrown by the target of an invocation. TargetInvocationException}
Object: Mega_Write (level 2){ Method not found: 'Void Grasshopper.Kernel.GH_PersistentParam`1.SetPersistentData(System.Object[])'. MissingMethodException}
Object: Uno_Write (level 1){ Exception has been thrown by the target of an invocation. TargetInvocationException}
Object: Uno_Write (level 2){ Method not found: 'Void Grasshopper.Kernel.GH_PersistentParam`1.SetPersistentData(System.Object[])'. MissingMethodException}
Object: ArduinoBake (level 1){ Exception has been thrown by the target of an invocation. TargetInvocationException}
Object: ArduinoBake (level 2){ Method not found: 'Void Grasshopper.Kernel.GH_PersistentParam`1.SetPersistentData(System.Object[])'. MissingMethodException}
Thank you for your help!
Colin…
p;xg_source=msg_com_gr_forum
(Below the last post from that discussion).
***************************************
Hi Matthew, Thanks for such a swift response and sorry for the false alarm. After reinstalling Karamba the examples open without a problem.
I hoped that the examples will clarify something, unfortunately you do not use Beam Resultant Forces' output as a source of optimization criteria/objective there.
I am still having problem with the fact that Beam Resultant Forces component gives a list of zeros as a 1st output till it finishes calculation.
This is my case: 1. Karamba calculates normal forces in elements that are in the mast's traversal plane (mast sections, spreaders and wires (shrouds)). 2. Normal forces in forestays and backstays are calculated analytically elsewhere. 3. Having the normal forces in the wires, the algorithm selects the wires' diameters (having given the wires catalogue), calculates their weights and centers of gravity. 4. Objectives are: minimizing the mass and minimizing the VCG (vertical centre of gravity). They are convergent, but constraint (minimal sail area) is dealing with it. 5. The thing is that normal forces from Karamba and calculated analytically arrives at different times (Karamba need a bit more time). I tried to delay the other data (till Karamba finishes calculation) with Data Dam, Anemone's Time Buffer, Phyton/C#/VB components, but all of them caused that Octopus/Wallacei weren't working correctly.
Any idea comes to your mind how this problem might be solved?
Thanks, Mikołaj…
example file with my DWG file that I've exported from Revit into Rhino, but I'm having a few issues with the geometry.
A few problems that I'm having with this:
1. I can reference the surfaces to breps by selecting objects (walls, roofs, windows, etc.) that are associated with the imported layers no problem, but cannot create zones from breps
2. Getting this error, "Data conversion failed from brep to surface" when flipping the floor.
3. Window geometry is different in Revit than how they are recognized in HB, what is the best way to make the windows workable in HB?
Any suggestions to help me get started with simulation for this building would be greatly appreciated! Links to my dwg file, gh file, and rhino file I'm working with are down below.
Thanks in advance!
DWG File
GH File
Rhino File
…
both my plotter/cutter and wide format printer. I had been running the plotter from my main work laptop - a Win10 machine via the plotters USB port. As it turns out you can't get Win XP drivers for this USB connection so I needed another solution.
I tried to use the plotters DB25 serial port connection using an old DB9 to DB25 modem cable I had in my collection = no luck the plotter wouldn't talk. A bit more research and it turns out these plotters need a 'null modem' cross over cable to operate. I found a pic of the correct wiring online and made up my own with some cable and connectors from the local electronics hobby shop.
With this hooked up and using Hyperterminal I was able to fire some codes to the plotter directly and get a response back - winning!
At this point I got my original code working with the 'net use' redirect from LPT1 to COM1.
HOWEVER - being that the plotter was now on a COM port there are a few more interesting things you can do with it - one is being able to read the paper size/cut area from the printer.
So what I needed to to was find a way to send and receive data to/from the plotter using the serial port.
A bit of research into .NET's serial port interface and using a bunch of small pieces of test code I have manged to completely re-jig this driver.
Upgrades include:
- Direct Serial Port comms using Null Modem cable (a USB to serial adaptor + null modem should also work)
- Plot area read from the plotter - a rectangle the size of the plot area is placed on a separate layer and coloured red
- Testing to see if selected plotting curves are both closed and inside of the cutting area - with errors shown and exiting if they are not right.
- After plot 'parking' of the plot head at the end of the cut items + an adjustable offset (currently requires manual resetting of origin on the plotter before for next cut)
Great thing is it is now 100% running within Rhino Python - no DOS command line calls = no flashing up of the CMD wind. Also no temp files needed on the HDD and no limit to number of curves that can be plotted - tested with 200 or so with no issues.
Overall very happy with whole project - have learnt a LOT about Python and .NET interfacing AND ended up with a very handy/useful tool.
Cheers
DK
# This code is a WIP # It plots directly to a DGI Plotter# via the serial port
import System.IO.Ports as Portsimport rhinoscriptsyntax as rsimport time
#Some setup valuescom_port = 'COM1' #change to match plotter port baud_rate = 9600 #change to match plotter settingplotter_step = .025 #mmfinsh_offset = 10 #mm
#Delete old cutting area and cut objectsif rs.IsLayer('Cutting Area'): rs.PurgeLayer('Cutting Area')if rs.IsLayer('Cutting Objects'): rs.PurgeLayer('Cut Objects')
#Setup Serial PortMyport = Ports.SerialPort(com_port)Port_Write = Ports.SerialPort.WriteMyport.BaudRate = baud_rateMyport.ReadTimeout=5000 #5 secsMyport.Close()Myport.Open()
#Setup PlotterPort_Write(Myport, 'PU;PA0,0;IN;\n')Port_Write(Myport, 'SP1;\n')Port_Write(Myport, 'PA;\n')time.sleep(2)
#Read the Paper size from PlotterPort_Write(Myport, 'OH;') #HPGL read limits codetime.sleep(2)
return1 = ''papersize = ''count = 0char_in_buffer = 0chars_in_buffer = Ports.SerialPort.BytesToRead.GetValue(Myport)
if chars_in_buffer == 0: print 'Plotter not ready' Myport.Close() exit()
while (count < chars_in_buffer): return1 = Myport.ReadChar() papersize = papersize + chr(return1) count = count + 1
papersize = papersize.split(",")rect1 = (float(papersize[2])*plotter_step)rect2 = (float(papersize[3])*plotter_step)
print 'Cutting area = ' + str(rect1) + 'x' + str(rect2)
#place cutting area curve on its own layer, make it red and lock itplane = rs.WorldXYPlane()cutting_area = rs.AddRectangle( plane, (rect1), (rect2))rs.AddLayer (name='Cutting Area', color=(255,0,0), visible=True, locked=True, parent=None)rs.ObjectLayer(cutting_area, 'Cutting Area')
#get plotting objects
allCurves = rs.GetObjects("Select curves to plot", rs.filter.curve)
#test to see if these are closed curves - exit if not
for curve in allCurves: test_closed = rs.IsCurveClosed(curve) if test_closed == 0: print "One or move of these curves are not closed" Myport.Close() exit()
#test to see if these are inside cutting area - exit if not
for curve in allCurves: test_inside = rs.PlanarClosedCurveContainment(curve, cutting_area)
if test_inside==0 or test_inside==1: print "One or more of these curves are outside of cut area" Myport.Close() exit()
#All ok - convert to points and send data to printer
rs.AddLayer (name='Cut Objects', color=(0,255,0), visible=False, locked=True, parent=None)
for curve in allCurves: Port_Write(Myport, 'PU;PA;SP1;\n') polyline = rs.ConvertCurveToPolyline(curve,angle_tolerance=5.0, tolerance=0.025, delete_input=False, min_edge_length=0, max_edge_length=0) points = rs.CurveEditPoints(polyline) rs.ObjectLayer(polyline, 'Cut Objects')
# PU to the first point x = points[0][0] y = points[0][1] Port_Write(Myport, 'PU' + str(int(x / plotter_step)) + ',' + str(int(y / plotter_step)) + ';\n') # PD to every subsequent point i = 1 while i < len(points): x = points[i][0] y = points[i][1] Port_Write(Myport, 'PD' + str(int(x / plotter_step)) + ',' + str(int(y / plotter_step)) + ';\n') i += 1
Port_Write(Myport,'PU;\n')
#find the far end of the cutbox = rs.BoundingBox(allCurves)far_end = str(box[1])far_end = far_end.split(",")far_end = far_end[0]far_end = float(far_end)/plotter_stepfar_end = (int(far_end))+ finsh_offsetfar_end = str(far_end)print (far_end)
#return plotter home and close portPort_Write(Myport, 'PU;PA' + far_end + ',0;IN;\n')Port_Write(Myport, 'SP1;\n')Port_Write(Myport, 'PA;\n')Myport.Close()time.sleep(10)…
an external test suite.
We have a lot of parameters we want to test with, so doing so in Rhino is cumbersome.
To this end, we've experimenting to run Rhino/Grasshopper with a number of ways:
- 1) Using the COM interface, to create Rhino, load grasshopper then run tests
- 2) Exposing Rh/Gh internals using WCF via a Rhino command, which starts off WCF, then run tests
- 3) Exposing Rhino/Grasshopper internals using .Net remoting, again via a Rhino command
We've tried -1) that seems to be a dead end, limited access to Rh/Gh
We've tried -2) that works but raises an error in the WCF server stating that RhinoCommon is not available (see attached image). I've tried copying dll's from the Rhino installation to the running wcf directory, but that does not help.
Todo -3) We've still got to try this method.
I've googled similar entries in the forums:
http://www.grasshopper3d.com/forum/topics/how-can-i-use-grasshoper-externally
http://developer.rhino3d.com/api/rhinoscript/introduction/external_access.htm
Does anyone know why -2) wcf fails or if .net remoting will work successfully.
Or indeed if there are other options to address our use case?
Many thanks,
Milan…
ceros.
Public concerné /
Architectes et designers, utilisateurs de Rhino souhaitant paramétrer Rhinocéros à l’aide de Grasshopper, programme
associant des composants et une structure de graphe interagissants avec le modèle Rhino.
Une bonne connaissance de Rhinocéros est nécessaire. La langue de la formation est le français.
Structure et Objectif de la formation /
La formation se déroule sur 3 jours : les 2 premières journées sont consacrées aux « fondamentaux » de Grasshopper
avec en préambule une introduction au design et à l’architecture paramétrique et leurs impacts dans la conception, la
création et la construction.
La troisième journée sous forme d’atelier est dédiée à l’étude de cas concrets proposés par les stagiaires, qui, quelques
jours avant la formation, pourront envoyer leurs projets par mail à info AT rhinoforyou DOT com
Les stagiaires, après la formation, pourront rester en contact avec les formateurs de HDA par le biais du blog
complexitys.com et le twitter @HDA_Paris. La durée de cette formation permettra d’atteindre une autonomie et une
bonne compréhension basée sur des exemples concrets.
3 Formules possibles /
3 jours ( Initiation+Atelier ) : du lundi 20 septembre au mercredi 22 septembre
2 jours ( Initiation ) : lundi 20 et mardi 21 septembre
1 jour ( Atelier ) : mercredi 22 septembre
Programme ind icatif des notions traitéES pendan t la formation /
Introduction à la conception Paramétrique . Rhinoscript, Grasshopper: différences et similarités . Interface
graphique de Grasshopper . Objets, Données, Listes . Opérateurs scalaires : La mathématique de
Grasshopper . Gestions des données : la logique de Grasshopper . Vecteurs, Points, Lignes, Surfaces : La
géométrie de Grasshopper . Listes, Arbres, Branches . Le dessin paramétrique: exercices divers et exemples
. Références, Bibliographie, Support de cours . Ateliers d’architecture et design paramétrique (3ème jour) .
Moda lité de la formation /
Venir avec un PC portable équipé de Rhinocéros version 4.0 SR 7 et de la dernière version du plug-in
Grasshopper (téléchargeable sur www.grasshopper3d.com).
Le coût du stage est de 350 € HT/jour par personne.
Réserver votre place dès que possible car les places sont limitées à 10 participants maximum.
Inscriptions et renseignements: Jacques Hababou, info AT rhinoforyou DOT com
Pour en savoir plus sur l’architecture paramétrique: www.complexitys.com…
script, it works fine, however if I copy the example in c# into a c# script, it doesn't recognize the methods. The help files outlines additional steps when coding in c#:
""1. Create a new Visual C# 2005 Console Application project.
2. Add a reference (COM) in the project to the Sap2000.exe.
3. Paste the following code inside function Main():
//dimension variables
Sap2000v15.SapObject mySapObject;
Sap2000.cSapModel mySapModel;
int ret;
int i;""
Is there a way to still script inside a grasshopper component in c# or should I switch to using VBA?…