gap as for a 20 meter gap, it's not a good argument.
I fully concede that not every single thing may be backed up by logic. There are simply too many design decisions to make and not enough time to make them rigorously. And I do believe there is place for human intuition and art in architecture, but I also think that artistic (or intuitive, or emotional) considerations should clearly be labelled as such.
When Le Corbusier designed the urban layout of the city of Chandigarh he used his intuition to distribute the buildings and clusters. His intuition however was grounded in European climes and it failed him in India. On hot days it becomes almost impossible to walk the distance between them. Would Chandigarh have been a better place if the maximum distance was defined by the largest walkable distance on the hottest day of the year instead of the unjustifiable intuition of the designer? I suspect it would.
Furthermore, I believe that architects - student and professionals alike - regularly make formal decisions according to their aesthetic judgement. To suggest that students aren't qualified to make a design decision during their studies because they think it's formally successful seems exceedingly stingy;
There are plenty of rational decisions which are made by tacit processes. People can become very good at mimicking rational behaviour using intuition. And -as I said- if you are an architect with a distinguished career; if you've already proven yourself to be capable of good design then there comes a point where your intuitions can be trusted (to an extend).
But students whose every design has always been virtual, who have not been able to evaluate their decisions by a follow-up study, I don't see how anybody can trust their instincts. Instincts aren't just sitting in someone's brain, they are cultivated by relentless exercise and trial-and-error. Until you actually build something there is no error, only trial, and virtual trial at that.
I find architects' attempts to justify what are obviously decisions based on formal taste using other means often taking the same form of obfuscation that makes architects appear to be intellectual charlatans to specialists in other fields.
I fully agree here. If there are non-communicable aspects to a design, just say that. There's no shame in it as long as you're honest about it and have considered -however briefly- the consequences in case you're wrong.
I'm by no means advocating that all architects must master every detail in their work. Rather, that architects have at least a generalist's working knowledge of materials and construction systems. Floors don't levitate, and windows require depth; rules of thumb count as vital knowledge.
I think we're on the same page here. If you want to make a physical building, then there's more to it than pure design. Engineering comes into play. I don't mean to imply that engineering doesn't require creativity or even artistic intellect, but it is a different kind of problem-solving.
I fully agree with your fourth point. I just wasn't sure what performance-driven meant.
--
David Rutten
david@mcneel.com
Tirol, Austria…
Added by David Rutten at 4:19pm on August 14, 2013
th Galapagos and that I'm already accustomed with mass addition of the fitness. But this can't solve my current problem. I'll tried to explain the best I can.
Goal :
I have a tower façade to cover with modules. Each floor is divide with a radiant structural grid. Let say for the exemple that each floor is divide in 9 parts.
I want to put modules on each parts in order to cover the whole length.
The thing is that each floor is different (so finding the solution for one floor is not usefull). So we decide to use three kinds of module :
Module A is 793mm long.
Module B is 893mm long
Special module as a size between 0.714 and 0.872.
Each part of the façade must be completed with 0 to 10 Module A, 0 to 10 Module B and 2 Special Modules. Special module size can change for each part.
Solution for one part
I've realized a Galapagos solution which change these tree parameters (number of Module A, number of Module B and size of Special module) in order to minimize the difference between the total length of the modules and the length of the façade's part.
This is working very well.
Solution in Grasshopper :
Before runing Galapagos :
After runing Galapagos :
The problem
I've now to generalize the idea for the total number of parts. In my exemple now, I'll show 9 parts but the real number is several hundreds.
I changed the Number Sliders in Gene Pools. As for instance, the first Gene Pool contains 9 integers for the 9 numbers of Module A (one number for each part).
I used Mass Addition for the fitness.
And then you can guess the problem : basicaly, the solution is working. But it's very slow. I need so many time fort 9 parts that I can't imagine the time for the whole tower.
Why this ? Simply because Galapagos doesn't understand that the number of Modules A for the Part X has no influence on the Part Y. So it tries, for each part, to change every paramater (3x9 in my exemple) unless to change only the three paramaters wich affect each part.
Thus, with a large number (600-700) of parts, it's impossible to reach the beginning of a solution.
Is there someone here to help me ? Please ? :)
Thanks in anticipate,
Marc
Architect and structural engineer
http://parametriclab.eklablog.com/…
.
Things have been working swimmingly in many areas of the plugin, but one particular problem has been tough to solve. I have two components that are trying to read/write to the same memory at the same time, causing Rhino exceptions and crashes.
The conflicts appear to be happening between two components -- one is a "Layer Events Listener" that reports essentially what type of layer event just happened. The other is a "Set Layer Visibility" component that toggles the visibility of a list of layers.
The code:
public class LayerTools_LayerEventsListener : GH_Component { /// <summary> /// Initializes a new instance of the LayerTools_LayerListener class. /// </summary> public LayerTools_LayerEventsListener() : base("Layer Events Listener", "Layer Listener", "Get granular information about the layer events happening in the Rhino document.", "Squirrel", "Layer Tools") { }
/// <summary> /// Registers all the input parameters for this component. /// </summary> protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) { pManager.AddBooleanParameter("Active", "A", "Set to true to listen to layer events in the Rhino document.", GH_ParamAccess.item, false); pManager.AddTextParameter("Exclusions", "E", "Provide a list of exclusions to stop reading specific events (Added, Deleted, Moved, Renamed, Locked, Visibility, Color, Active).", GH_ParamAccess.list); pManager[1].Optional = true; }
/// <summary> /// Registers all the output parameters for this component. /// </summary> protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.AddBooleanParameter("Initialized", "I", "Whether the listener changed from passive to active.", GH_ParamAccess.item); pManager.AddTextParameter("Document Name", "doc", "Name of the Rhino document that is changing.", GH_ParamAccess.item); pManager.AddTextParameter("Layer Path", "path", "Path of the modifed layer.", GH_ParamAccess.item); pManager.AddIntegerParameter("Layer Index", "ID", "Index of the modified layer.", GH_ParamAccess.item); pManager.AddIntegerParameter("Sort Index", "SID", "Sort index of the modified layer.", GH_ParamAccess.item); pManager.AddTextParameter("Event Type", "T", "Type of the modification.", GH_ParamAccess.item); pManager.AddBooleanParameter("Added", "A", "If the layer has been added.", GH_ParamAccess.item); pManager.AddBooleanParameter("Deleted", "D", "If the layer has been deleted.", GH_ParamAccess.item); pManager.AddBooleanParameter("Moved", "M", "If the layer has been moved.", GH_ParamAccess.item); pManager.AddBooleanParameter("Renamed", "R", "If the layer has been renamed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Locked", "L", "If the layer locked setting has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Visibility", "V", "If the layer's visibility has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Color", "C", "If the layer's color has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Active", "Act", "If the active layer has changed.", GH_ParamAccess.item); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { bool active = false; List<string> exclusions = new List<string>();
DA.GetData(0, ref active); DA.GetDataList(1, exclusions);
RhinoDoc thisDoc = null;
bool initialize = false;
string dName = null; string activePath = null; int layerIndex = -1; int sortIndex = -1; string eventType = null; bool added = false; bool deleted = false; bool moved = false; bool renamed = false; bool locked = false; bool visibility = false; bool color = false; bool current = false;
if (active) { thisDoc = RhinoDoc.ActiveDoc;
initialize = (!previouslyActive) ? true : false;
RhinoDoc.LayerTableEvent -= RhinoDoc_LayerTableEvent; RhinoDoc.LayerTableEvent += RhinoDoc_LayerTableEvent; previouslyActive = true;
} else {
RhinoDoc.LayerTableEvent -= RhinoDoc_LayerTableEvent; previouslyActive = false; }
if (ev != null) { dName = ev.Document.Name; layerIndex = ev.LayerIndex; eventType = ev.EventType.ToString();
if (!exclusions.Contains("Active")) { if (ev.EventType.ToString() == "Current") { // active layer has just been changed current = true; }
}
if (!exclusions.Contains("Moved")) { if (ev.EventType.ToString() == "Sorted") { // active layer has just been changed moved = true; }
}
if (!exclusions.Contains("Added")) { if (ev.EventType.ToString() == "Added") { // layer has just been added activePath = ev.NewState.FullPath; added = true; }
}
if (!exclusions.Contains("Active")) { if (ev.EventType.ToString() == "Deleted") { // layer has just been added
deleted = true; } }
if (ev.EventType.ToString() == "Modified") { // layer has been modified activePath = ev.NewState.FullPath;
//skip sortindex eventType = ev.EventType.ToString();
if (ev.OldState != null && ev.NewState != null) { if (!exclusions.Contains("Locked")) { if (ev.OldState.IsLocked != ev.NewState.IsLocked) locked = true;
} if (!exclusions.Contains("Visibility")) { if (ev.OldState.IsVisible != ev.NewState.IsVisible) visibility = true; }
if (!exclusions.Contains("Moved")) { if (ev.OldState.ParentLayerId != ev.NewState.ParentLayerId) moved = true; }
//if (ev.OldState.SortIndex != ev.NewState.SortIndex) moved = true; if (!exclusions.Contains("Renamed")) { if (ev.OldState.Name != ev.NewState.Name) renamed = true; }
if (!exclusions.Contains("Color")) { if (ev.OldState.Color != ev.NewState.Color) color = true; } }
} }
DA.SetData(0, initialize); DA.SetData(1, dName); DA.SetData(2, activePath); DA.SetData(3, layerIndex); DA.SetData(4, sortIndex); DA.SetData(5, eventType); DA.SetData(6, added); DA.SetData(7, deleted); DA.SetData(8, moved); DA.SetData(9, renamed); DA.SetData(10, locked); DA.SetData(11, visibility); DA.SetData(12, color); DA.SetData(13, current);
}
static bool previouslyActive = false; Rhino.DocObjects.Tables.LayerTableEventArgs ev = null;
void RhinoDoc_LayerTableEvent(object sender, Rhino.DocObjects.Tables.LayerTableEventArgs e) { ev = e;this.ExpireSolution(true); }
And for the layer visibility component:
public LayerTools_SetActiveLayer() : base("Set Active Layer", "SetActiveLayer", "Set the active layer in the Rhino document.", "Squirrel", "Layer Tools") { }
/// <summary> /// Registers all the input parameters for this component. /// </summary> protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) { pManager.AddBooleanParameter("Active", "A", "Set to true to change the active layer in Rhino.", GH_ParamAccess.item, false); pManager.AddTextParameter("Path", "P", "Full path of the layer to be activated.", GH_ParamAccess.item); }
/// <summary> /// Registers all the output parameters for this component. /// </summary> protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.AddIntegerParameter("Layer ID", "ID", "Index of layer that has been activated.", GH_ParamAccess.item); pManager.AddBooleanParameter("Status", "St", "True when the layer has been activated.", GH_ParamAccess.item); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { bool active = false; string path = "";
if (!DA.GetData(0, ref active)) return; if (!DA.GetData(1, ref path)) return;
int layer_index = -1; bool status = false;
if (path != null) {
Rhino.RhinoDoc doc = Rhino.RhinoDoc.ActiveDoc; Rhino.DocObjects.Tables.LayerTable layertable = doc.Layers;
layer_index = layertable.FindByFullPath(path, true);
if (layer_index > 0) { // if exists RhinoDoc.ActiveDoc.Layers.SetCurrentLayerIndex(layer_index, true); status = true; } }
DA.SetData(0, layer_index); DA.SetData(1, status); }
Now originally I was getting exceptions when changing multiple layers' visibility properties, which would cause the Event Listener to fire and try to read the Visibility property before the memory has been released by the Set Layer Visibility component. That led me to add an "Exceptions" input, that would allow me to disable the reading of Visibility events at the source in the Layer Events listener. That helped me manage about 95% of the crashes I was getting, but I still get strange crashes in other event properties, even when that property shouldn't be affected. For instance, I am getting a crash here on the Name property in the event from the delegate function, even though I am only changing Visibility at any one time:
I have a few ideas but they all seem pretty hacky. One is to try to set a flag that is readable by any component in the plugin -- so that the event listener can see if a "set" component is currently running and abort before causing an exception. The other is creating a delay in the event listener, somthing like 200ms, to allow any set components to finish what they are doing before reading the event. Neither seems super ideal.
Any ideas?
Thanks,
Marc
…
troducción a su plugin de modelado paramétrico, Grasshopper.
Con este tipo de herramientas podemos pensar formas más allá de las cajas para diseñar, porque seremos capaces controlar con total rigor geometrías muy complejas.
En el siguiente video, podemos ver un ejemplo realizado durante un curso impartido anteriormente en Madrid por el profesor, Francisco Tabanera, en el que se realiza una interpretación del proyecto de BIG para la Biblioteca Nacional de Kazajstán.
<a title="Interpretación de la Biblioteca Naiconal de Kazakstan, de BIG" href="http://www.youtube.com/watch?v=YLldO-SxgPw" target="_blank"></a>
A lo largo del curso se realizarán diferentes ejemplos que podrán ser realizados por todos los asistentes, ya que no es necesario ningún conocimiento previo para su seguimiento.
El curso se desarrollará en las oficinas de Arquitecton en Barcelona con el siguiente horario:
HORARIO
Sábado 1 de Marzo
De 9.30 a 13.30h.
Sábado 1 de Marzo
De 15.30 a 19.30h.
El curso está planteado para un máximo de 9 alumnos, para conseguir el máximo aprovechamiento posible por parte de los mismos.
El curso tiene un precio de 90€. Estudiantes y desempleados tienen un descuento del 10%. Es posible asegurarte una plaza con un primer pago de 25€ a modo de reserva.
Apúntate aquí…
1 assembly. I think something is mixed up with the refenced dll. but I do not know what.I am using 4.net with visualstudio 2010. It was possible fo example to bind opennurbs.dll as assembly in Rhino4 and older grasshopper about mid 2010. Now in Rhino5 and the new Grasshopper it throws errors. I think some assemblies are mixed up. I cannot use Rhino.IO.3dmfile.Read as it does not have all functions i need for building a proper database.
here is some buggy code snippet for getting the layertree.
// pre define OnTextLog dump_to_stdout = new OnTextLog(); dump_to_stdout.SetIndentSize(2); OnTextLog dump = dump_to_stdout; OnFileHandle dump_fp = null; OnXModel model = new OnXModel(); bool bVerboseTextDump = true; string sFileName = @"C:\test.3dm"; // open file containing opennurbs archive OnFileHandle archive_fp = OnUtil.OpenFile(sFileName, "rb"); if (archive_fp == null) { dump.Print(" Unable to open file.\n"); //continue; } dump.PushIndent(); // create archive object from file pointer OnBinaryArchive archive = new OnBinaryFile(IOn.archive_mode.read3dm, archive_fp); // read the contents of the file into "model" bool rc = model.Read(ref archive, dump); // close the file OnUtil.CloseFile(archive_fp); RMA.OpenNURBS.ArrayOnLayer layer_array = model.m_layer_table; // layerstruktur lesen List <System.Guid> list_int = new List<System.Guid>(); List <System.Guid> list_parent = new List<System.Guid>(); for (int i = 0;layer_array.Count() > i;i++) { list_int.Add(layer_array[i].m_layer_id); list_parent.Add(layer_array[i].m_parent_layer_id); } // calculate List <int> list_depth = new List<int>(); for (int i = 0;list_int.Count > i;i++) { list_depth.Add(tree_decompose(i, list_int, list_parent)); } A = list_depth;</item> <item name="AdditionalSource" type_name="gh_string" type_code="10">
int tree_decompose (int position, List<System.Guid> list_guuid, List<System.Guid> list_parent) { int temp_position = position; int send = 0; if (position != 0){ if (list_parent[position] != System.Guid.Empty) { temp_position = list_guuid.IndexOf(list_parent[position]); send = 1 + tree_decompose(temp_position, list_guuid, list_parent); } if (list_parent[position] == System.Guid.Empty){send = 0;} } if(position == 0){send = 0;} return send; }…
controlled by the brightness of the image and size of the diagrid panel is controlled by lunchbox). The frame surrounding each window is then extruded to shade the window within. The extrusion distance for the diamonds' 4 points are controlled by 4 sliders (one for each point).
My goal is to find the total radiation of the windows using Ladybug (or DIVA) and then use Galapagos to adjust the frame extrusions to optimize them to best shade the windows. However, in order to obtain an effective pattern for shading, I need to be able to move the 4 control points independently for each panel... So instead of adjusting all of the panels at once, I need to control each panel extrusion on its own.
First off, I'm not sure how to control each panel independently. Secondly, I'm afraid this will result in far too many sliders for Galapagos to handle (especially once it's applied to the scale of a facade). I tried using a random number generator for each point (which kept the slider count to only 4), but Galapagos was unable to identify any trends in this method (because it was entirely random) and thus could not optimize the extrusions. I think the most probable solution may be to limit the quantity of possible outcomes by making an index of pre-baked shapes (let's say 10 different frame types). Then, setting up a script that allows Galapagos to "plug-in" each different frame, at each different panel on a facade until it finds the ideal pattern. I'm not sure how to go about doing this either... specifically in a non-random way that will allow Galapagos to identify trends. Maybe by using hoopsnake?
I've attached my grasshopper definition. Any suggestions would be greatly appreciated!
…
Added by Caleb Wild at 12:20pm on February 14, 2015
the other pluggins again, I doubt that problems arise and if I already have them Which are due to the autodesk pluggins that I can install on another computer or mount a virtual machine, but I doubt it, I simply had to install Grasshopper first and then the rest.)
Problem:
Good day, afternoon or night, please help I can not install the Grasshopper plugin 0.9.76.0 in Rhinoceros 5SR13, I do not know if it is because I uninstalled the version of 32 Bit of Rhinoceros and I only have installed the 64 Bit version, I have installed on Rhinoceros 64 Bit:
Autodesk Realtime Renderer 2014 x64 Autodesk Shape Modeling 2014 x64 Autodesk T-Splines 2015 x64 V-Ray 2.00.23938 for Rhinoceros 5 x64 V-Ray Express 2 for Rhinoceros 5
I would infinitely appreciate the resolution to this problem, for the moment I can not think of anything other than to uninstall everything and leave only installed the program Rhinoceros 5SR13 with Grasshopper 0.9.76.0 and nothing more.
I already tried to download another new file from Grasshopper 0.9.76.0, which ruled out that this installer is wrong, what I could do is look for another version of Rhinoceros but I have the newest one or one of the newest versions: Rhino_5.13.60913.21340_x86_x64_Multi. Exe
I understand that the Grasshoper installer is showing me a message where it says there is a Win32 exception where the system can not find the source file, what I do not know is if this exception has to do with the Windows C /: Folder: Windows, subfolder: System32 or I do not know if it refers to that as I do not have the 32 bit version of Rhinoceros maybe the installer gets confused and generates the installation error exception.
Another thing to which the exception is associated is the start process file: Start.nfo or start information.
There is also a programming argument for file upload errors of boolean operations (geometry operators) associated with the platform operating system, a process called child process.
Also appears another note that says the installed package of a plugin called inspector and I do not know what else I can not explain.
I do not know what to do, I just happen to uninstall and install everything and I do not think the Rhinoceros installer has any errors, I have Windows 10 edition of Red Stone 1 of 64 Bit.
Thanks and if anyone had this problem and solved it please tell me how to fix it or if someone knows about programming you can tell me why all those errors or exceptions are.
Greetings, have a nice day, afternoon or night wherever you step or stand or wherever you are sitting or lying down.…
ntación en distintos procesos del Diseño.
Se abordaran los conceptos basicos y la metodologia para abordar problemas de diseño a traves del desarrollo de Herramientas Algorítmicas mediante un proceso de programacion visual.
Como plataforma de trabajo se utilizara Rhinoceros+Grasshopper.
Instructor:
Leonardo Nuevo Arenas
Fechas:
17 y 18 de Septiembre de 2011
Lugar:
Calzada del Federalismo Sur No. 135 Altos 3, Frente al Parque Rojo (http://bit.ly/nNOuZ5)
Cupo:
Limitado a 15 plazas
Fecha limite de pago:
Viernes 9 de Septiembre
Importante:
Los participantes deberán traer su propia Laptop con todo el software y actualizaciones (originales o versiones de demostración oficiales) previamente instaladas. (Se fijara una fecha unos días antes para revisas que todos los equipos estén en orden y listos para trabajar). Si planeas venir de fuera de la ciudad contactanos y te pondremos en contacto con otras personas que también vayan a hacerlo para en caso de desearlo puedan compartir su lugar de estancia.
Contacto:
Leo. 33 3956 9209
nuarle@msn.com
Aye. 33 1050 3482
ayeritza.fara@gmail.com…