udents, graduate students, researchers, professionals
The master class seeks to introduce Rhino Python, the new cross-platform scripting environment for Rhino 5 (Mac and PC), which is based upon the popular and successful scripting language Python. The two day master class will cover basic python programming skills including language basics and programming paradigms in the context of showcase design applications. Also the master class will compare and show the differences to other Rhino programming environments such as RhinoScript or Grasshopper. The participants will learn how to create their own Rhino commands, how to develop own function libraries and object classes. In addition concepts on the organization of code in larger python development projects will be shared and discussed. Day 1 Learning the Language Basics : The python language syntax will be explained in depth and demonstrated in Rhino. Participants will be given several small tasks to apply the newly gained knowledge. Day 2 Development of a Larger Script : More advanced topics in the field of code development will be addressed. The participants choose a task from their daily practice. There will be individual support.…
Sunpath component. This is what I essentially did in the upper photo of my hometown's mask.For now this is working only for metric units. I will make sure that for the next release at least feets are supported as well.As for the saving of the time: try increasing the maxVisibilityRadius_ to say 300. Depending on your PC configuration and internet speed it may take as long as 15 minutes for the component to run. The topography file will first be downloaded from opentopography.org. That's the .tif file you noticed. Once the mask is created it will be saved to an .obj file. The next time you run it the mask will be imported from the .obj file, skipping the previous 15 minutes:
It still may take a a couple of minutes (depending on your PC configuration) for the component to complete loading of the mask. The reason why is: the mask needs to be scaled and centered according to the context_ input.Also the next time a user decides to change the maskStyle_ input or context_ input, the topography data will not be downloaded from the opentopography.org website, but rather created from the .tif file.For default maximalVisibility_ of 100, these .tif files are mostly a couple of megabytes, which is not that much of a burden on user's hard drive space. On the other hand keeping these .tif files on user's hard drive helps saving the opentopography bandwidth cap.Let me know if I can answer any further detail or if this one hasn't been clear.Hi Chris,
Thank you too.Please provide the following data:
1) Zip the "terrain shading mask libraries 32-bit" folder in "c:\ladybug" in case you have x86 version of Rhino 5, or "terrain shading mask libraries 64-bit" folder in case you have the 64 bit version of Rhino 5. Upload the zipped folder, and post the link in here, please.Zip the whole folder, not its content only.
2) What is the full name of the GDAL libraries .zip file that you downloaded? What is your Windows version and Rhino 5 version?
On genDayMtx.exe and install of the GDAL libraries: I am reluctant to avoid manual install due to blocking issue. Copying two folders manually is quite a small price to pay in comparison with finding the blocked library among tens of them.…
So while working, I am first getting this error message:
Then when I click on "OK", I get this error message:
When I click on "Close" I get this one:
Then these three error screens repeat for a couple of times, and in the end I am getting a grasshopper with red canvas:
I am using 0.8.0066 version (yes, I know I need to update to the newest one, but some components I have do not work with 0.9+ version).
Any help with this? Or do I simply need more RAM?
This is my PC configuration:
Intel Core 2 Duo E4300 1800MHz motherboard MSI P4M890M3-V (MS-7255) 2x1GB DDR2 266 Mhz ASUS EAH4670 512MB Direct x 9.0c Windows XP SP3 (32bit)
It might sound strange, but is there a way I can avoid buying new PC or RAM memory?
Maybe by deleting the Panels and Param Viewers?I might be wrong, but I think the error starts when you cross over particular part of canvas (or definition to be precise) where there are a lots of Param Viewers.
Thank you.…
t the maximum potential with the bridge BIM+PARAMETRIC DESIGN ;D
During this Intense Week, we will learn about the power of Rhino + Grasshopper + ArchiCAD with Professional and Useful examples for our Normal Working day :D
You will get Advanced Library Files + Personal Web + Knowledge and Skills to start using this incredible Methodology ;D
Also, the week is having Lectures from different Experts sharing their Computational Working Experiences ;D And Jam Sessions! opening the door to 5 interesting topics to research, learn and experiment together :D
2020 is your YEAR ;D !!!
Complete details and registration……
but the order in which K gets changed is the same order that all of the other lists get changed.
For example (I'm not at a PC with Rhino/GH so I can't post an example directly) You want to order a cloud of points from the bottom up, i.e. by Z lowest to highest. Using the PComp component to decompose a point into its separate x, Y and Z components you can plug the Z output into K of the Sort Component. Sort will then re-order the Z values from lowest to highest, but the points you wish to order haven't be changed only a list of numbers. So you can plug the points into A and they will be reordered into the same lowest to highest order that the Z component was changed to.
Similarly if each of these points had a label that you wished to be attached to it at a latter point in the definition the list would no longer be in the same sequence. For instance if the original list was ordered in the X axis from 1 to 20 with one being the closest point to X = 0 and 20 being the furthest. Since you have rearranged the points, their labels are now 1 is the lowest and 20 is the highest, but we want them to remain the same as before with 1 being the closest to X=0. This is where the extra inputs on the Sort Component come in. Plug the list into B.
K is ordered smallest number to largest number
A is ordered lowest point to highest point
B is ordered so that 1 remains closest point to X=0 and 20 is furthest from X=0 …
ted_With_Honeybee.gh" file:
Warnings:
1. Honeybee cannot find RADIANCE folder on your system.
Make sure you have RADIANCE installed on your system.
You won't be able to run daylighting studies without RADIANCE.
A good place to install RADIANCE is c:\radiance
2. Honeybee cannot find EnergyPlusV7-2-0 folder on your system.
Make sure you have EnergyPlusV7-2-0 installed on your system.
You won't be able to run energy simulations without EnergyPlus.
A good place to install EnergyPlus is c:\EnergyPlusV7-2-0
Error:
1. Solution exception:Could not find a part of the path 'c:\ladybug\HoneybeeRadMaterials.mat'.
---------------------
I now reinstalled Radiance in the C:\Radiance folder and when dropping the Honeybee_Honeybee component on the canvas, I get the following:
Runtime error (DirectoryNotFoundException): Could not find a part of the path 'c:\ladybug\HoneybeeRadMaterials.mat'.Traceback: line 253, in __init__, "<string>" line 2200, in script
----------------------
[that is also the only error that I'm now getting when opening the 000 getting started file).
There is no c:\ladybug on my PC.
Note: In order to run the Radiance installer, I had to run as administrator. My user doesn't have write rights on the c-root folder (and no chance of getting that either... :)
Thanks,
wim
…
) Course Fee: Professional EUR 825,- (+VAT), Student EUR 415,- (+VAT)
Led by plug-in developer and structural engineer Clemens Preisinger, along with Zeynep Aksoz and Matthew Tam from the expert Karamba3D team, this three-day workshop will focus on methods of setting up structural systems in the parametric environment of Grasshopper. The participants will be guided through the basics of analyzing and interpreting structural models, to optimization processes, and how to integrate Karamba3D into C# scripts.
This workshop is aimed towards beginner to intermediate users of Karamba3D. However, advanced users are also encouraged to apply. It is open to both professional and academic users. For beginner users of Rhino and Grasshopper, there will be an optional introductory course one day before the Karamba3D course.
Karamba3D 1is a parametric structural engineering tool which provides accurate analysis of spatial trusses, frames, and shells. Karamba3D is fully embedded in the parametric design environment of Grasshopper, a plug-in for the 3D modeling tool Rhinoceros. This makes it easy to combine parameterized geometric models, finite element calculations, and optimization algorithms like Galapagos.
Course Outline
Introduction and presentation of project examples
Optimization of cross sections of line-based and surface-based elements
Geometric optimization
Topological optimization
Structural performance informed form finding
Understanding analysis algorithms embedded in Karamba3D and visualizing results
Complex workflow processes in Rhino, Grasshopper, and Karamba3D
Places are limited to a maximum of 10 participants with limited educational places. A minimum of 4 participants is required for the workshop to take place. The workshop will be canceled if this quota is not filled by October 28. The workshop will be taught in English.
Course Requirements
Basic Rhino and Grasshopper knowledge is recommended. An introductory course is offered.
No knowledge of Karamba3D is needed. Participants should bring their own laptops with Grasshopper and either Rhino 5 or Rhino 6 installed. You can download a 90-day trial version of Rhino. Karamba3D ½ year licenses for non-commercial use will be provided to all participants.
Please register here……
Added by Matthew Tam at 6:38am on September 13, 2019
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)…
artes y Jueves 18:00 a 22:00 Sábado 10:00 a 14:00
Durante el curso el participante conocerá y entenderá los fundamentos de programación y sus aplicaciones usando Processing: una plataforma de desarrollo en lenguaje java, que surgió en MIT, creada por investigadores enfocados a procesos numéricos y/o generativos para arte y diseño. Se realizarán ejercicios programados para generar gráficas, volúmenes o situaciones kinéticas en tiempo real, basado en algoritmos o reglas complejas y en el procesamiento de datos, soluciones que permitirán comprender temas esenciales como datos primitivos y datos compuestos, algoritmos generativos, geometría 2D y 3D paramétrica, programación estructurada y programación orientada a objetos, control de flujo, variables y ámbito de variable, entre otros temas.
NOTA: Es requisito para cursar los talleres del Bloque 1 y Bloque 2 que los alumnos inscritos tegan bases sobre programación. Este taller forma parte del propedéutico para el Diplomado.…
Added by Alberto Lara at 9:37pm on February 12, 2012
ed to develop a component that reads data from a Tracking Server we have built here in our lab, on top of VRPN Server. We developed a client library to communicate with this server and to read data from different devices through the server, making our life easier. The fact is that I need to update data received from a wiimote for example (at a regular time interval) and output this data to feed other components. Our first approach was to test the inclussion of that library into the context of Grasshopper and it worked, but just and only for the first time the component is created of course. Now the problem is to call this update function inside grasshopper multiple times and update the output. I'm new to grasshopper component coding so, it would be nice if I can get some response of an expereinced developer or at least somebody that have developed something like the example I'm exposing here. Some code is posted below to clarify what I'm saying.
...
using VRPNClassLib; //This is our class lib.namespace MyComp{ public class MyComp : GH_Component { private VRPNController controllerWiimote = new VRPNClassLib.VRPNController("WiiMote0@localhost"); private Wiimote wii = new Wiimote();
...
private double rotX, rotY, rotZ; public MyComp() : base("Al required params ok") { try { controllerWiimote.addDevice(wii); } catch (Exception e) { throw new Exception("No wii controller attached to the PC: -->" + e.Message); } }
...
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.Register_DoubleParam("Pos X", "X", "Wiimote X"); pManager.Register_DoubleParam("Pos Y", "Y", "Wiimote Y"); pManager.Register_DoubleParam("Pos Z", "Z", "Wiimote Z"); } protected override void SolveInstance(IGH_DataAccess DA) {
// If execute MainLoop() here for the first time it works of course, but I need to continuously read data from wiimote, how do I do that
MainLoop(); DA.SetData(0,rotX); DA.SetData(1,rotY); DA.SetData(2,rotZ); }
protected void MainLoop() { controllerWiimote.UpdateData(); //this is the function that updates device data rotX = Math.Round(wii.getSensorRot1(),2); rotY = Math.Round(wii.getSensorRot2(),2); rotZ = Math.Round(wii.getSensorRot3(),2); }
public override Guid ComponentGuid { //Genere el GUID del componente get { return new Guid("8F9858D8-F18E-45f2-90EC-CC23523ACC4F"); } } ... }}
So any sugestions are welcome.
Cheers :)…