e radius). I used David Stasiuk Cocoon in order to make the shape. http://www.bespokegeometry.com/2015/07/22/cocoon/
After being happy with the shape I toggle the final generation of mesh from Cocoon with a subd of 1 (126,792 faces). I then calculate direction I want for the pattern, here the same directions as the nearest curve. Surely not the smartest way of doing but it works.
After that Reaction Diffusion could be used. A good site to understand is http://www.karlsims.com/rd.html A good site to choose feed and kill values is http://mrob.com/pub/comp/xmorphia/index.html In order to modify the size of the pattern I use B diffusion and also the size of the mesh. The directionality is controlled by _factor > 1 and pattern will follow tangents, and < 1 pattern will be perpendicular to the tangents.
Here differents parameters to play with
This script could surely be used to replicate Nervous Reaction design, thanks to them to their creativity. http://n-e-r-v-o-u-s.com/Laurent Delrieu August 2015…
This blog post is a rough approximation of the lecture I gave at the AAG10 conference in Vienna on September 21st 2010. Naturally it will be quite a different experience as the medium is quite…
Added by David Rutten at 3:27pm on September 24, 2010
the daylighting and energy sim with Nat Vent create many complex questions.
Daylighting :
1. Adding shading to energy AND daylight simulation: Can I add HBconext to Honeybee_run daylight simulation HBobject input ?
Looking at the results it seems like daylight simulation doesn't recognize HBcontext, or maybe the difference is minute. Am I doing this correctly? Is there a possible error due to redundancy ? (meaning I am introducing the HBcontext twice, one time to the Honeybee_run daylight simulation AND energy simulation)
2. One of the component, Honeybee_Read annual result 1 keeps failing and says that ''1. Solution exception:index out of range: 0." I read here input needs to be internalize data but maybe there is a better solution?
Shading :
I want to study life cycle perspective of
A) Optimal ratio of fixed vs dynamic louvers for economic implementation,
B) Assess whether it makes more sense for the dynamic louvers to functions as light shelvs or the fixed ones for economic reasons
C) Simulate dynamic/fixed hybrid louver system schedule, and show it in a manner similiar to lighting schedule.
For this I would need to simulate the effect of dynamic and-or fixed shades in reducing annual lighting cost while reducing cumulative heat gain.
3_How to introduce Dynamic shading schedule for custom shades? Is this done with EPtranschedule input of the HB EP context component? I would like to keep the louvers branched so that it is possible to assign different modes i.e. fixed or dynamic
Light Shelf:
4_Is the lighting schedule effected by light shelves introduced in the annual daylighting simulation?
5_Does energy simulation take account of additional heat gain from light shelvs ?
6_When I use Honeybee_createHBSrfs with Honeybee_radiance Mirror material, it crashes rhino. The geometry input is not branched. Any report similar crashes?
Nat Vent:
I want to design to combine passivhaus principles with Natural ventilation.
My goal to simulate the energy performance of passivhaus house like building system with Bouyancy driven Nat Vent design which maximizing the percentage of the year Nat Vent takes care of ventilation and cooling, and in cloud days heat exchanger with fans kicks in.
using a trombe roof that heats air and using a vertical shaft that recirculate air, want to minimize the use of fans, Ducts, Heating etc. and I want to use the HB Set_Air flow component to evaluate such system if I can.
while I have heard that bouncy driven system may only be reserved for tall buildings, I still would to simulate the effectiveness for mid rizes and podium- types. I am skeptical whether there will be enough pressure difference for effective ventilation of 1.5ms so I would like to test.
How to set up models to evaluate bouyancy driven ventilation :
7 About HB Set_Air Flow, with Natural ventilation, If I use the HB Set_air the honeyzone output is null. I am not sure why, no error messages.
8_ When using the HB Set Air component to include Nat Vent with bouyancy,
does the result of reduced temperature to take effect into the cooling/equipment/ventilation schedule of the Honeybee_set Energy plus zone schedules?
Additionally I want to incorporate Nat vent analysis with the light shelf, since both would effect indoor temperature.
A wish list: as if it were all this has been not.
9_I wish there is something like a deconstruct honeybee zone component that basically breaks down all the options (mechanically ventilated or not) that is associated with the honeybee zones so that it is easy to document all the properties in text.…
't have time to take on this project but hacked a few bits together that might get you started; enough to see that you're in a world of pain here when it comes to data trees!
To start with, it looks like the code that generates the second set of curves (tangents) is identical to the first except for one extra component? So I disabled the duplicate code and rewired it like this:
Then I noticed that the second point in your desired curve (red arrow below) has not been determined in the GH, either by intersection points or other means. So for now, I skipped that point:
The code on the right (below) is what I added to organize the points to make your curves. Notice the use of 'Merge' before 'MCX'; the results depend on which set of curves is 'A' vs. 'B'.
The result is not too bad (minus that one point in each curve) but there are anomalies in the data that create problems and I don't have time to figure it all out. Sorry.
One of the problems is visible in the panel below, showing the output from 'Weave'. There are 26 curves (0 to 25) and this data is pretty good up through path "{0;0;25;0}". You could either figure out why there is more data than you want, or just ignore (somehow) the rest of the 50 paths/branches in this data tree.
Another problem is that the four points in each branch/path (five when you add the missing point) are in proper sequence for all branches except {0;0;0;0}. Again, you could figure out why or just sort the points by their distance from the center point, as I did.
Sorting is probably better as it would make it easy to merge that second point... OK, I'll add and merge that missing point, and trim the tree. Oops, I did it again. OCD is a terrible thing!
There is still a problem though - curves/pipes 0 through 4 are messed up. See yellow arrows. Well, 21 out of 26 isn't bad, eh?
I REALLY need to step away from this keyboard! I left my 'Tree/List Viewer' tool in the code as it might be useful (it is to me). Good luck.…
Added by Joseph Oster at 12:47pm on March 21, 2017
shopper later uses but for the life of me cannot see the problem.
Component
using System;using System.Collections.Generic;using Grasshopper.Kernel;using Rhino.Geometry;namespace Load_Take_Down_Tool.Components{ // This componenet takes care of creating ordered lists to pass to the column component // Searches for points within tributary areas public class Column_Organiser : GH_Component { /// <summary> /// Initializes a new instance of the Column_Organiser class. /// </summary> public Column_Organiser() : base("Column Organiser", "CO", "Orders lists of points and areas", "Load Take Down Tool", "Pre-Processing") { } /// <summary> /// Registers all the input parameters for this component. /// </summary> protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) { pManager.AddPointParameter("Column", "C", "Unsorted points at location of column (required)", GH_ParamAccess.list); pManager.AddBrepParameter("Tributary Area", "T", "Unsorted tributary areas for column (required)", GH_ParamAccess.list); } /// <summary> /// Registers all the output parameters for this component. /// </summary> protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.AddPointParameter("Column", "C", "Sorted points at location of column", GH_ParamAccess.list); pManager.AddBrepParameter("Tributary Area", "T", "Sorted tributary areas for column", GH_ParamAccess.list); pManager.AddPointParameter("Failing Points", "FP", "Points that are not within any tributary area", GH_ParamAccess.list); } /// <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) { //Declare lists to hold data //uo = un-ordered //o = ordered List<Point3d> uocolumnpoints = new List<Point3d>(); List<Brep> uotribareas = new List<Brep>(); List<Point3d> failpoints = new List<Point3d>(); //Get data from inputs if (!DA.GetDataList(0, uocolumnpoints)) return; if (!DA.GetDataList(1, uotribareas)) return; //Error if number of points and areas are not equal if (uocolumnpoints.Count != uotribareas.Count) { AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Unequal number of columns and tributary areas"); return; } List<Point3d> ocolumnpoints = new List<Point3d>(); List<Curve> ocurves = new List<Curve>(); List<Brep> otribareas = new List<Brep>(); double m_tol = 0.001; string unitSystem = Rhino.RhinoDoc.ActiveDoc.GetUnitSystemName(true, true, true, true); if (unitSystem == "m") m_tol = 0.000001; if (unitSystem == "mm") m_tol = 0.011; PointsInsideCurves pic = new PointsInsideCurves(); try { pic = new PointsInsideCurves(uocolumnpoints, uotribareas, m_tol); } catch (Exception ex) { AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, ex.Message); } failpoints = pic.FailedPoints; ocurves = pic.OrganisedCurves; if (failpoints.Count > 0) AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, "Some point(s) did not lie within a tributary area, were on the boundary/tolerance limit of of a tributary area, or multiple points were within the same tributary area. See output FP for the points that have failed"); foreach (Curve c in ocurves) { Brep b = Brep.TryConvertBrep(c); otribareas.Add(b); } //Pass data to outputs DA.SetDataList(0, ocolumnpoints); DA.SetDataList(1, otribareas); DA.SetDataList(2, failpoints); } //Grasshopper icon for component protected override System.Drawing.Bitmap Icon { get { return Properties.Resources.ColumnOrganiser; } } /// <summary> /// Gets the unique ID for this component. Do not change this ID after release. /// </summary> public override Guid ComponentGuid { get { return new Guid("{3259e465-5400-48e3-907b-fcb7455b12aa}"); } } }}
Helper class
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Rhino.Geometry;namespace Load_Take_Down_Tool{ class PointsInsideCurves { private List<Point3d> Points { get; set; } private List<Curve> ClosedCurves { get; set; } private double Tolerance { get; set; } public List<Point3d> FailedPoints { get; set; } public List<Curve> OrganisedCurves { get; set; } public PointsInsideCurves() { } public PointsInsideCurves(List<Point3d> Points, List<Curve> ClosedCurves, double Tolerance) { this.Points = Points; this.ClosedCurves = ClosedCurves; this.Tolerance = Tolerance; Evaluate(); } public PointsInsideCurves(List<Point3d> Points, List<Brep> ClosedBreps, double Tolerance) { this.Points = Points; this.Tolerance = Tolerance; List<Curve> Curves = new List<Curve>(); foreach (Brep b in ClosedBreps) { Curve[] c = b.DuplicateEdgeCurves(); c = Curve.JoinCurves(c, Tolerance); Curves.Add(c[0]); } this.ClosedCurves = Curves; Evaluate(); } private void Evaluate() { //Sorts in order of points //Naive implementation //Can update to KD tree if necessary List<Curve> OrderedCurves = new List<Curve>(); List<Point3d> fPoints = new List<Point3d>(); //Have to duplicate the input list of curves to modify as we go List<Curve> CCDup = this.ClosedCurves; foreach (Point3d Point in this.Points) { //Backwards loop to allow removal bool assigned = false; for (int i = CCDup.Count - 1; i >= 0; i--) { if (CCDup[i].IsClosed == false) { throw new Exception("Curve is not closed"); } if (CCDup[i].Contains(Point) == PointContainment.Inside) { OrderedCurves.Add(CCDup[i]); CCDup.RemoveAt(i); assigned = true; break; } } //If point not within any of the given breps put null in the list if (assigned == false) { OrderedCurves.Add(null); fPoints.Add(Point); } } this.FailedPoints = fPoints; this.OrganisedCurves = OrderedCurves; } }}
…
Added by Hugh Groves at 3:43am on September 30, 2014
I can get this working in a c# windows forms program, but as soon as i make a call to the mkl-dll's Rhino and Grasshopper crashes without giving me an exception.
See code code snippet below:
/** Pardiso wrappers */ public class Pardiso { private Pardiso() { }
public static int pardiso(IntPtr[] handle, ref int maxfct, ref int mnum, ref int mtype, ref int phase, ref int n, double[] a, int[] ia, int[] ja, int[] perm, ref int nrhs, int[] iparm, ref int msglvl, double[] b, double[] x, ref int error) { return PardisoNative.pardiso(handle, RHINO CRASHES HERE ref maxfct, ref mnum, ref mtype, ref phase, ref n, a, ia, ja, perm, ref nrhs, iparm, ref msglvl, b, x, ref error); } }
/** Pardiso native declarations */ [SuppressUnmanagedCodeSecurity] public class PardisoNative { private PardisoNative() { }
[DllImport("mkl_rt.dll", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true, SetLastError = false)] internal static extern int pardiso([In, Out] IntPtr[] handle, ref int maxfct, ref int mnum, ref int mtype, ref int phase, ref int n, [In] double[] a, [In] int[] ia, [In] int[] ja, [In] int[] perm, ref int nrhs, [In, Out] int[] iparm, ref int msglvl, [In, Out] double[] b, [Out] double[] x, ref int error); }
Does anybody know what I am doing wrong? Please find complete code attached.
This is all I get from VS:
The program '[6772] Rhino.exe: Managed (v4.0.30319)' has exited with code 2 (0x2).
Thank you in advance,
Gustav
…
currently within a fake euphoria framework - blame China/UAE) and a potential decision about doing/developing this or doing that … well …anyway … read and enjoy.
AEC matters: The good, the bad and the ugly.
The bad news: Rhino is NOT suitable for the job (although some use it … but only in the sense that people use Modo for the so called “hard modeling”). By job I mean things up to shop drawing level + specs + you and me (we call it Final level) – nothing to do with sketches and outlines of some abstract “schematic” topology.
The ugly news: The so called Design-Construct approach gains exponentially momentum especially in countries the likes of China/UAE/BRICS (95% of the whole AEC activity worldwide happens there). DeCo means: AEC engineers deliver some kind of study in a preliminary level and the main contractor splits (outsourcers) the job and assigns the study completion AND the construction to various sup-constructors. That thing appeared first – in a large scale - in Dubai 15 years ago. This means that the era of Sergio Pininfarina is over and out: welcome anonymous Toyota designer. In plain English: days of construction corporations fast replacing practices. Dead men walking.
The good news: All AEC related apps (Revit, AECOsim, Allplan and the likes) are in a lethargic state as regards the brave new world (based on the archaic level driven organization schemas etc etc). Of course they all claim the exact opposite and point that support BIM (nobody mention PLM) better than the other guy. But the 21st century – helped by 2 forthcoming unavoidable crisis (a) about shortage of water (b) about transition from carbon to hydrogen economy – isn’t about bureaucracy: think cost/resources optimization and “fitness” rather than China/UAE type of liquid trend. Days of euphoria fast approaching the Wall.
Top to bottom and visa versa.
Old days Titans (Oscar, Mies, Walter, Pierre Luigi, Frank, Eero, blah blah) outlined things (mostly using crayons) and the rest were struggling to translate these in reality in an one way vector like process : Top to bottom that is. These days the inverse gains momentum : when in the whole consider the part … validate … redo … validate … redo. This means bottom to top geared with top-to-bottom. In plain English : child imposes rules to parent and parent imposes rules to child. This means classic MCAD feature/history modeling (CATIA/NX/MS). This is something that Rhino can’t do (not to mention that Rhino is a surface modeler – a rather critical fact).
The parts that are bigger than the whole.
Go there ( http://www.behance.net/gallery/2885057/a-myriad-of-cables) are inspect the whole thing: it’s a parametric nightmare made with the other guy (Generative Components – slower than a Skoda + bugs + why bother?). But the whole (masts and membranes and the likes) means nothing here: focus to the details that are critical for connecting this with that. Complex feature driven solids that are made with internal (on a per se basis) parameters (like fillets required for casting or radius for cable anchoring) whilst they comply with external rules/parameters (cable angles, topology clash issues etc etc). So the whole outlines possibilities … and the part either can follow…or the part must change…or the whole must change. Can you do that with GH/Rhino? And if not what’s missing? (lot’s of things to be honest).
Some other "similar" things:
The narrow picture.
I agree with what others already said and with pretty much all Ola’s points – especially the visual drag-and-drop path mapper (i.e. a visual data manipulator so to speak) and the enable/disable components in groups capability.
Some other suggestions:
A multi canvas capability. As things are right now…it’s like working in Rhino in one view (rather unsuitable I guess). In fact …since overlapping views they don’t work in Rhino…well…you know, he he.
A working auto profile arrangement capability (non twisted Loft/Sweep and the likes). Worth 1Bn dollars that one.
Ability to locate components that caused this or that in the Rhino view: meaning a 2 way communication approach : GH makes things happen in Rhino and things can indicate their cause in the GH canvas.
A robust collection of components that bake stuff in nested blocks (emulating some primitive assembly/component way of thinking). Why may you ask? Well … the whole objective is to talk to CATIA (via STEP) don’t you agree? CATIA makes things happen in real-life not Rhino.
A robust collection of components that can create real-life parametric tensile membrane solutions (get some inspiration from FormFinder: useless because it’s academic but good to point the way). Membranes (and geodesics) are the future.
I could continue at infinitum but IMHO the big picture is worth 12345,67 “focused” GH improvements.
May the Force (the dark option) be with us all.
…
and networking about the emerging practice of digital parametrics within the AEC community.The event will come in three parts, a Workshop (28th-31st March), a public Shop Talk (1 April), and a public Symposium andReception (2 April). These events follow the highly successful previous SG events in Barcelona 2010, San Francisco 2009, Munich 2008, New York 2007, Cambridge/London, UK 2006 and multiple preceding events.
Click here for more info...
The SmartGeometry 2011 Workshop will take place at CITA http://cita.karch.dk/This year's Challenge is entitled:BUILDING THE INVISIBLEInforming Digital Design with Real World Data
THE PREMISEVast streams of data offer a rich resource for designers. By incorporating external information into our design processes the autonomy of the design is challenged. User data, energy calculations, embedded sensing, material and structural simulation, human behaviour and perception, particle flows and force fields allows design to be situated and responsive. From the simulation of megacities to the solid modelling of material systems, design has the potential to be informed by the real. Design sits not separate from is environment but inhabits an ecological system, open, dynamic and interdependent, diverse, partially self-organising, adaptive, and fragile. Across scale and within time we now have the chance to instil architecture with an immanent intelligence creating new relationships between the user, the built and its ecosphere.THE OPPORTUNITYSystems theorists suggest that data is only a raw material. It can be differentiated from information, knowledge and wisdom. Understanding is multi-levelled: understanding of relations, understanding of patterns, understanding of principles. As digital designers our challenge is in harnessing the power of computation to assist us in informing our design process. Computers help us collect, manage and analyse the environment and inform us about an abundance of data. Our challenge is to use these inputs in a meaningful way to help us make better informed design decisions.THE AIMSG 2011 explores how the incorporation of real world data challenges existing design thinking. The SG 2011 workshop aim is to create physical prototypes of design systems to be exhibited in the SG2011 exhibition.
...more info to follow...
The SmartGeometry Group is a not-for-profit educational organization dedicated to the use of computational tools in architecture and engineering. SG brings professionals, academics, and industry together to explore the next generation of digital design. SG Workshops are non-platform specific, believing it is the methodology, not the tool, that matters.
…
Added by Shane Burger at 3:02pm on November 29, 2010