I understand.
I think honeybee and ladybug together are already a great design tool. I didn't realize the whole story with CFD and the various ways you have tried. Have a lot of respect for your project and your colleagues that are working on this, and I hope you guys get enough credit just going for it considering just how ambitious your project is. and open-source equivalence of at least 7 percent equity share too :) as in per owners. if you guys can offer 1 year cliff and 4 year vesting I will consider joining your team. just kidding what your team is doing are beyond me.
After checking simulation CFD 2015, I realized that one big advantage for LB+HB is that well, I didnt see a built in feature of taking account for direct solar gain as part of the simulation.
From the tutorials I have seen, they set the reference temperature to the exterior walls, but there is nothing solar. Here is a rather comprehensive video of how to set up for Simulation CFD . From 10:30 you can see that boundary condition for exterior walls is set with a film coefficient and Reference temperature (around 12:30). At 12:33, there is actually a parameter called radiation right below. I check the parameters for that myself and found that it includes emissivity and reference temperature but not watt hour per square meter like we have it with ladybug.
SO even for a software like simulation CFD, which already seems very sophisticated with the pay-as-you-go cloud parallel simulation option and all, I don't see that it is designed for simulating natural ventilation. Since with SIM CFD it seems that one can be precise about everything including heat plumes from artificial lights in terms of watts so I am guessing that there is a way to model in solar gain as some kind of projected geometry somehow but it is pretty clear that there is EXTRA WORK needed to factor in solar gain there.
I think it would be pretty major if there is a way to model solar radiation and CFD for interior/building envelop together because I have not seen that kind of simulation in the industry.
Thank you for the extra ref cayote and coolvent. I will make check them out along with SAM.
p.s. I reread what I wrote and just wanted clearify I sure didn't refer to any of your work with honeybee or ladybug as "artistic illustration." I meant my pretty arrows :)
…
tura digital en corte Láser, corte CNC, impresión 3d, y modelado paramétrico.
Este tercer taller enseña los fundamentos del modelado paramétrico y algunas bases de manufactura digital.
PERFIL DEL ALUMNO QUE INGRESA:
Diseñador, Arquitecto, Artista con conocimientos de Rhinoceros interesados en comenza a modelar paramétrico con Grasshopper para fabricación digital básica.
PERFIL DEL ALUMNO QUE EGRESA:
El alumno terminará con los conocimientos y criterios para el desarrollo de piezas o proyectos utilizando fabricación digital, mejorando y agilizando los flujos de trabajo, así como los criterios fundamentales del Modelado Paramétrico -Generativo.
Taller de modelado paramétrico con Grasshopper
Interfase
Manejo de Datos
Data Volátil
Data Persistente
Rangos y dominios
Atractores
Listas y Cull
Modelado por Layer Object
Análisis Básicos
Conexión de Curvas
Superficies
Análisis de Superficies
Panelización Básica
Relaciones con Excel
Modelado generativo
Fechas: del 8 de Febrero al 1º de Marzo
Días: Sábado
Horarios: de 10 am a 3 pm
Sesiones: 4 de 5hrs
Duración: 20 horas
Precio: $3,000.00…
ll the wires gone. Now you'll have to hook them up again. This is the sort of thing that gets annoying after the third time.
Problem #2. The solution in Grasshopper iterates over all objects and solves each one in turn. Of course a lot of objects depend on other objects, so it usually becomes a cascade of objects solving themselves for the benefit of other objects. It is therefore very difficult to predict the order in which objects are solved.
The root iteration is the same as the display order (back to front), but the topology of the network complicates matters greatly. If you change the topology of the network during a solution, you might end up with whole portions of the network not being solved at all, or, worse, a conflict in the topology checker that makes Grasshopper think a network is self-referencing.
Problem #3. Grasshopper caches all manner of things about a network that can be recomputed from basic principles, but take a long** time to do so. If you start to expire caches where I don't expect you to, we'll either run into null reference errors, or stale cache data, or invalid cache data. Problems like these are very difficult to track down.
Problem #4. File IO. Components get deserialized from ghx files based on their default layout. In your case, we need to solve a component before we know how many outputs it needs. This cannot be done until the file has been completely deserialized. It's a chicken and egg problem, which will result in missing wires every time you open a file.
If you want to have a flexible number of outputs on your component, I'd suggest you add a menu item to your component that will change the output list when clicked, then causes a recompute. This way you won't mess with the network topology during solutions and people don't get their connections pulled out from under them. You'll need to do quite a few things to make this work, but I'll be happy to help you out there:
- Adding menu items and menu click handlers
- Properly removing parameters from a component
- Properly adding parameters to a component
- Recording undo for parameter changes
- Writing custom settings to a ghx archive
- Reading custom settings from a ghx archive and making sure your component is compatible with the ghx layout before it tries to deserialize itself.
--
David Rutten
david@mcneel.com
Poprad, Slovakia
* This sort of thing has cropped up before and it has always been due to human error.
** 2ms or more…
Added by David Rutten at 9:28am on October 19, 2010
difference consists of.
An Evolutionary Solver/Genetic Algorithm is an implementation of Metaheuristics. Metaheuristics tend to be flexible solvers, applicable to a wide variety of problems, fairly easy to implement, but slow. Other examples of Metaheuristic algorithms would be Random Search, Scatter Search, Simulated Annealing and do on. These algorithms are often modelled on physical or biological processes.
Simulated Annealing for example simulates the physical process of annealing (who'd have thunk it), which is basically the slow cooling of a material which allows it to settle into a crystalline lattice, i.e. a low energy distribution of all the atoms. I'm currently adding an SA solver to Galapagos, and in fact just yesterday managed to get the first successful run: http://www.youtube.com/watch?v=VWtYLv-4oP0
Metaheuristics are especially useful for those cases where little is known about the problem ahead of time. If the problem search-space is mathematically well defined (differentiable, especially), then you can use more targeted algorithms such as the Newton-Raphson method, Pareto-search or Uphill search. You can still use these methods on non-differentiable search-spaces, but it involves sampling the local region to death to get an estimate of the differential. This can be a very costly enterprise, especially in high dimensional search-spaces. In a two-dimensional search-space you'll need 3 to get a lame estimate and 4 to get a halfway decent estimate and 8 to get a good estimate. In three-dimensional search space you already need 26 samples, and the number of samples grows exponentially with higher dimensions.
If you have a specific problem you're trying to solve, Metaheuristics are probably not the best solution, even though they may be easiest to program. Rhino uses something akin to Newton-Raphson for certain problems and that's fast enough to run in real-time.
Divide-and-Conquer algorithms are also quite popular. Sometimes they are called Binary-Search or Tree-Search algorithms as well. Their basic premise is to sample the search-space at a few intervals (but enough to capture the needed detail), then find two neighbours with promising values and sample again in between these two. Then repeat. Each new iteration typically doubles accuracy, which is great because then you only need ~30 ~40 iterations to get an answer as good as possible with double-precision floating point accuracy. However not all problems lend themselves well to this sort of search and in higher dimensions it starts getting slow with disconcerting alacrity.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
Added by David Rutten at 1:54am on August 15, 2011
ub) but this update method comes with a caveat. If a more recent component has a different number of inputs/outputs or the names of these inputs/outputs are different, the component will fail. This is because the python code inside the component is up to date but the component, as a whole, is not.
I attached a GH file with the correct glazing ratio component, which I updated manually. To get the glazing component that I used in the video, you need to sync with the version of the components on the github.
In order to do this, the process is a bit convoluted these days since Github has stopped allowing automatic downloads but here are the steps for the best way if you don't plan on updating frequently:
1) Download a copy of our most recent code to your computer by going here (https://github.com/mostaphaRoudsari/ladybug) and clicking on 'download ZIP.'
2) Unzip the file and you should see one folder called userObjects. All of the files in here will be most up-to-date LB userObjects
3) Delete your old Ladybug+Honeybee userObjects by going to File > Special Folders > User Objects Folder in the GH program window and deleting all of the LB+HB components there.
4) Drag the new Ladybug userObjects from the unzipped location onto your GH canvass.
Your components are now up-to-date.
Be wary that, if you stay up-to-date with the github, the overall version of the components might not always be as stable as that which we release at the official download link but you will get access to all of the new features that we are building in. This includes things like the breakUpDist_ on the glazing component.
Glad to be of help! Right now, the best way that you can help and support LB+HB is just by spreading the word to your colleagues. The larger the community, the more that we can help each other. Also, testing out the tools and reporting issues is a huge help to us and allows us to find bugs that we would never be able to find on our own. In a few more months, we will be putting together a Wiki and this will include a lot of places for awesome users like yourself to contribute with example files from your projects, videos, and even scientific discussions / research papers that you have found relevant to the project. Lastly, I think we will have a LB+HB T-shirt drive at some point since there seems to be a good demand for this.
Stay awesome,
-Chris…
basis" problem ... all of a sudden - quite recently - a girl posted the MITESIGF (Most Important Thread Even Seen In Grasshopper Forums). She doesn't even realized that: she's novice:
http://www.grasshopper3d.com/forum/topics/array-1
4. Why this MITESIGF is MITESIGF? For 2 reasons:
4.a: Wooden pairs (Beams) Profile Curves (belonging in some tree) MUST allow individual control on a per "item basis" (OK, that's obvious) - see Images posted in the thread. No attractor (or any other "global" policy) can cut the mustard here (to tell you the truth this happens in 99% of pure engineering cases, but they appear very rarely in GH Forums - if at all, mind). If the profile curves are defined with 5 points (or 9 for the double thing) we need "on-the-fly" control over this Array (like the radii in your Sphere Manipulator) :
4.b: Critical Bottom-to-Top issues arise: Create a "global" topology (call it "parent") - the beams - and then place real-life "components" (call them "childs") that affect (most probably) the "parent". OK, that's impossible to do with GH/Rhino (peace of cake with CATIA/Microstation) but you can "approximate" things up to a point. Alternatively: you can "trigger" some interest from GH/Rhino developers if they have any AEC market(s) in mind.
Topic 4.a requires the master-to-slave slider thingy (iterate over branches (index slider:master) > reset the 5 values (value slider:slave) > modify them on the fly > save > increase/decrease branch > ...).
Other than that my definitions are far more challenging than this simple case ... but ... anyway ... long is the path (and hilly).
more soon.
best, The Troll
…
strictly with code (BTW: did you crossed Rubicon?).
1. See this: Imagine a curve (say a "rail") that is divided N times and then circles are created with random radii. Circle control points (9, that is) are sampled (obviously) into a DataTree where branches are the rail divisions. Let's call the control points: "start" seed points.
2. Imagine a capability ... that stores all these (the original "seed" control points) into a "parameter" and then each time that a change occurs to them (varying the x/y, on a per point on a per branch on a per plane basis[that provides the Z]) stores the "modified point" into the parameter (at the same index with the old: meaning "deleting" the old) ... and then some other code gets that data and makes curves and lofts them. Reset means: sample again the original "seed" points into that "parameter". Closing are reopening the definition has no effect: the lofted stuff is derived from the (internalized, so to speak) modified points (from the "parameter").
3. A variety of "automation" is available: for instance if you jump from branch to branch and from item to item the value of the selected point is inquired and the sliders that control the new x/y are "set" to 0,0 (meaning no change - yet) values. There's mo "store" mode: it works automatically as far as you modify points or you hit the reset button
4. This does that (only achievable with code):
5. Obviously points can been replaced with anything ... and thus ... we can individually modify items in collections ... and forget for ever attractor points and all that (OK where appropriate, he he).
I'll post 30 similar examples soon in the forthcoming mother of all threads: "GH goes (at last) interactive". Watch this space.
BTW: study the "animation" where points with index 6 are "sequentially" modified. I've added some delay in order to give you time to get the gist of the whole thingy.
best, Lord of Darkness
…
e= -3
e = -4
Setting exposure values is a "post-processing" thing done to improve the display of the image on a device or photograph. So, your analysis will still be physically based. I think towards the end of his video Mostapha talks about how the exposure values can be set through Honeybee....
…
s not imported in the workflow, there is no problem for the intersectMass component, no matter how we change the random seed to generate different groups of breps with overlapping surfaces:
2. However, once we add the mass2Zone component into the workflow, we have this problem as posted here.
3. As you pointed out, the warning is given when "Hzones == True" which only happens when one of the objects in _bldgMassesBefore is recognized as a zone already stored in HB Hive. So, I added one line after line257 to print out the zone name:
4. It seems for the cases that the intersecMass component shows warning, there is a zone name printed:
5. Whereas for those cases that the intersecMass component shows no warning, there is no zone name printed:
6. Even if the zone creation is turned off, there is still zone name printed for cases that intersectMass is unable to process:
So, I agree with you that this might be related to the HoneyBeeHive which stores honeybee zones.
Maybe whenever upstream geometries change that are connected to either intersectMass or Masses2Zones, the HoneyBeeHive has to be cleaned up and zone objects inside need to be recreated.
Hope Chris and Mostapha can kindly take a look and advise if this is the source of the issue.
Thanks.
- Ji…
= new Point3d(0, 0, 0); b = new Point3d(0, 0, l); Line x = new Line(a, b); Curve m = x.ToNurbsCurve();
if (x == null) return;
Point3d[] points; m.DivideByCount(50, true, out points);
//for (double itr = 0; itr < 50; itr = itr + 0.01) //{ double frac = 50 / 230; int itr = 0; foreach (Point3d point in points) { while (true) { double imtr = (50 - itr) / frac; itr++; Color colour = ColorFromHSV(imtr, 1, 0.5); int rgb = colour.ToArgb(); if (_hash.Contains(rgb)) continue;
_hash.Add(rgb); _points.Add(point); _colours.Add(colour); break; } //} } for (int i = 0; i < _points.Count; i++) cd.AddPoint(_points[i], _colours[i]); }
// <Custom additional code> private readonly HashSet<int> _hash = new HashSet<int>(); private readonly List<Point3d> _points = new List<Point3d>(); private readonly List<Color> _colours = new List<Color>();
/// <summary> /// This method will be called once every solution, before any calls to RunScript. /// </summary> public override void BeforeRunScript() { _hash.Clear(); _points.Clear(); _colours.Clear(); } public static Color ColorFromHSV(double hue, double saturation, double value) { int hi = Convert.ToInt32(Math.Floor(hue / 60)) % 6; double f = hue / 60 - Math.Floor(hue / 60);
value = value * 255; int v = Convert.ToInt32(value); int p = Convert.ToInt32(value * (1 - saturation)); int q = Convert.ToInt32(value * (1 - f * saturation)); int t = Convert.ToInt32(value * (1 - (1 - f) * saturation));
if (hi == 0) return Color.FromArgb(255, v, t, p); else if (hi == 1) return Color.FromArgb(255, q, v, p); else if (hi == 2) return Color.FromArgb(255, p, v, t); else if (hi == 3) return Color.FromArgb(255, p, q, v); else if (hi == 4) return Color.FromArgb(255, t, p, v); else return Color.FromArgb(255, v, p, q); }
Gives this error
1. Value was either too large or too small for an Int32. (line: 0)
…