oller, the internet and beyond. This release adds a few new components the toolbar, including the new Ports Available component which polls your device manager and returns the COM number assigned to Arduino board, as well as a new Wave component. We're also excited to release the new reacTIVision component, which enables real-time camera tracking of fiducial markers. If you're new to reacTIVision, take a look at their website and download their engine (and printable fiducial markers) for free: http://reactivision.sourceforge.net/. We've also improved the efficiency of several of the existing components and updated everything for the latest Arduino UNO board.
In addition, we have also released an update to the Firefly Primer - a manual which provides an in-depth look at each individual component and walks you through the entire process of using this powerful new tool (from installation to final output). It also includes some basic tutorials, links and references to get you up and running quickly.
This build requires Rhino 4.0 SR8 (or Rhino 5.0 beta) and Grasshopper 0.8. The installation for this build has changed slightly from previous versions (given the new special roaming folder created for Grasshopper 0.8) and the fact that the reacTIVision component requires the installation (copy/paste) of an additional library (libTUIO.dll). The installation instructions can be found here and should be easy to follow if you are familiar with the Grasshopper interface.
To download the latest build, check out our website at: www.fireflyexperiments.com
As always, we'd love to hear your feedback so feel free to contact us as: info@fireflyexperiments.com Or sign up for our mailing list and find out about all the new Firefly features and events.…
rth. Current components include:
Format_GPS: Takes NMEA Formatted GPS Latitude and Longitude values and converts them to Decimal Degrees. Will add further converters.
GPS->XYZ: Maps Longitude, Latitude, and Altitude to XYZ.
XYZ->GPS: Maps XYZ to Longitude, Latitude, and Altitude.
KML_Export: Exports imported geometry to KML format. Currently implemented for points, curves, and meshes. Any Breps should be meshed before. Will be adding conditions for other geometry as well as render styles.
Look forward to a WIP release next week.
…
s not matching the behavior I experience when I call the methods via the com interface outside of Rhino. Specifically, the OpenDocument method causes a "Grasshopper display error".
(Error Message)
(Resulting Canvas)
I know I am not initializing the GUI correctly but not sure where to go. I can dig deeper into the SDK (ie all the way to GH_DocumentIO.Open()) but honestly much of what I want to do is exposed in GH_RhinoScriptInterface.
My code right now is as follows:
protected override Result RunCommand(RhinoDoc doc, RunMode mode) {bool flag1 = false;bool flag2 = false;
flag1 = Grasshopper.Plugin.Commands.Run_Grasshopper();
Grasshopper.Plugin.GH_RhinoScriptInterface GH_Rhscript = new Grasshopper.Plugin.GH_RhinoScriptInterface();
flag2 = RScript.OpenDocument(@"C:\Temp\Grasshopper\Fins.gh"); //fail
return Result.Success; }
I have also tried:
var GH_DocEditor = new Grasshopper.GUI.GH_DocumentEditor();GH_DocEditor = Instances.DocumentEditor;
flag2 = Instances.DocumentEditor.ScriptAccess_OpenDocument(@"C:\Temp\Grasshopper\Fins.gh"); //fail
The SDK docs says "You are unlikely to need any of this." so here I am.
…
creating the structural frame, finding the endpoints, linking these endpoints with curves and afterwards lofting the surfaces between the curves.
The results were quite nice, however, the procedure is very time consuming and inefficient. There is just too much copy-pasting involved.
(see attached file: "Old Attempts.zip" )
Mesh relaxation:
I have later on used Daniel Piker's tutorials on Mesh Relaxation and realized that this might be the way to go.
The link to these online tutorials on wewanttolearn.net is:
https://wewanttolearn.wordpress.com/2011/10/22/mesh-relaxation-kangaroo-tutorial/
His tutorials, however, only deal with mesh boxes which are ideal cubes. He then joins them together in various directions, but it is under 90 degrees angle.
( see attached file: "Daniel Pikers Examples" )
What I would like to achieve:
I want my bridges to go in all directions and angles, not just under 90 degree angle.
Ideally I would like to make a square (polygon) follow a curve (which moves in all axis) at certain number of division points. I would then loft these squares into a mesh and use that shape as a mesh box. I would later use this mesh box and relax it the same way as Daniel Piker used the cubes in his tutorial. The anchor points are only the vertices of the squares which create the lofted mesh box.
( see attached file: "New Attempts" )
As you can see below this procedure works even if the curve is moving in all directions not only along xy axis. There are, however, many problems connected to it.
The problem:
Despite all the effort I cannot seem to come up with a design where I would be able to draw a random curve which would be the guideline for my mesh box and then apply this box to one definition in order to relax the mesh and create the shape that I want. Without this I am again forced into a lot of copy pasting as the final mesh box is made out of several sections.
Also is there any way I could make the final resulting mesh a bit smoother? Increasing the number of mesh faces is probably the only way, right?
Thank you guys so much for any potential help.
All best,
Luka
…
to host the annual parade of Samba Schools during the Carnival festival. For the remaining 361 days of the year it stands empty and desolate as a massive dividing wall within its degraded urban context. Renovated in 2012 and now the future site for the 2016 Olympic marathon finish line and archery events, the Sambadromo is receiving renewed international attention, but it drastically needs to accommodate new types of programme and improve its connection with its surrounding context. AAVS Rio de Janeiro will explore ways to intervene within and transform the Sambadromo, with a potential focus on the VIP and Press Rooms ‘camarotes’, which were originally designed to house classrooms when Carnival was not taking place, and are now the site for over-commercialized, under-designed temporary installations during Carnival, and abandoned throughout the rest of the year. Teaching team:The teaching team will be led by Elena Manferdini, from Atelier Manferdini (www.ateliermanferdini.com), to teach and use advanced digital design and fabrication to generate iterative transformations in the creation of new micro-infrastructures. Computational and fabrication skills: The workshop will teach advanced computational design skills. A series of physical models will be built using digital fabrication techniques, such as laser-cutting and rapid-prototyping, that will be taught during the workshop. No previous digital or fabrication experience is needed. Applications: http://www.aaschool.ac.uk/STUDY/VISITING/rio http://rio.aaschool.ac.uk/2015-aa-marathon-runway-sambadromo/ or mail brazilvisitingschool@aaschool.ac.uk…
stems, wonderful)
- Michael Hansel, Techniques and Technologies in Morphogenetic Design
(a series of early articles and essays)
- Anne Save de Beaureceuil and Franklin Lee,
Articulated Ground Mediating Environment and Culture
(Students work from the AA where parametric design is linked with environmental and social strategies)
- Richard Hawkins, The Blind Watchaker
(Evolution re-created and "proved" through the computer to be linked with Galapagos)
- Janine M. Benyus, Biomimicry
(didn't read it yet but apparently really good, anyone?)
- Frei Otto: Finding Form
(a classic)
- Deleuze & Guattari: Rhizome
(another classic)
…
noji@gmail.com>) was my student, came to build the design in 1:1 scale. One AA teacher helped her with the Bend curve and used Kangarro. I simplified the script, if you need to see my project umbrella(http://www.grasshopper3d.com/forum/topics/umbrella-porject?xg_source=activity) made to study the script. Contact her that will have updated information. My email: artagent@yahoo.com
…
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)…
uired information, a poor representation of data evolve misreading messages and by turn ambiguous responses especially with complex data. Inforgraphics are graphic visual representations of information, data or knowledge intended to present complex information quickly and clearly. In the nowadays flow of complex information, Infographics is the key for optimized visual communication. The use of infographics is an important step towards developing a pedagogical approach that draws on visuals where 90% of Information is transmitted to the brain so it is crucial to tickle the optic nerves to get people excited about data. The workshop investigates how computational tools can aid in designing and controlling complex information to be easily understood in addition to improve cognition by utilizing graphics to enhance the human visual system’s ability to see patterns and trends and much more likely to be remembered in today’s fast – paced environment. This workshop investigates multiple computational tools and techniques of developing coefficient visualization of data types including; network, statistical and hierarchal data. The workshop objective is to reconsider visual representation a promising design tool for architects, artists and designers. /// Application To apply, please follow this link to fill the application form https://docs.google.com/forms/d/1HOv6c1_LzhHNJU5n_FLvuhC-Yg75HDfbEcq6TN6mulI/viewform /// Fees 1200 EGP for students / 1500 EGP for graduates and young professionals more info on the workshop webpage: http://www.encodestudio.net/#!infographics/cqvl
POSTS
…
ike using something like the Z vector, but technically you can use any vector you want. This vector will actually determine the static rotatation of all the planes, so you can control that here if you like. One important thing that I've noticed is that the closer the vector is to the plane of the curve or if its too similar to one of the tangent vectors, the more likely you'll have "flipping"
2) Take the cross product between the tangent and the static vector. This will be your first perpendicular vector, which you can use for the X component of the plane.
3) Take the cross product between the tangent and the result of the previous cross product. Use this result as the Y component of the plane. All three components (X, Y, and Z (which is the tangent vector)) are all perpendicular to each other now.
After you've done that you should have planes that decrease twisting. If your curve is not planar, then there will always be some twisting in the frames, but it will be minimal enough to use them effectively.
There also may be "flipping" within the frames, which means one (or both) of two things. First, you could have planes that have reversed their vectors, so the X vector is properly oriented, but pointing down when it should be pointing up. Second, the X and Y vectors could have potentially swapped, so that Y "should" be X and X "should" be Y. In order to check these things, you'll need to do a few tests. The first one is find out whether the vector (X or Y) of the plane your testing is pointing in the opposite direction of previous vector. The second test is to find out whether the vector (X or Y) of the plane your testing is perpendicular to the previous vector. In both cases, an angle test between the two vectors will be able to tell you what you need to know, but you will likely NEVER get exactly 180 for an opposite test or 90 for a perpendicular test. That means that you have to choose a range with which to determine that a given vector is opposite or perpendicular.
You should start testing the X vector to see if anything is wrong. If you find that the X vector is fine, then just move on because Rhino will only allow you to create right handed planes, and the Z vector (the tangent) will always be the same.
I don't believe that there's a native function within the old dotNET SDK for calculating angles, so use the example at the link below. It basically takes the arcCosine of the Dot Product of the two vectors your testing to return the angle in Radians. I'm not sure if this function is included in RhinoCommon or not....
http://wiki.mcneel.com/developer/sdksamples/anglebetweenvectors…