bi-directional link, the link is unidirectional (downflow only), because of the use of proxies.
Matrix transforms and persistent constraints: I don't think this is true. The parts can have mates to other parts that preserve geometric relationships like 'coincident' , 'aligned' etc. These are essentially bi-directional. GH's algorithmic approach does not do relationships in the same / flexible way. In GH, the 'relationship' has to be part of the generation method that dependent on the creation sequence. I.e. draw line 2 perpendicularly from the end of point of line 1. If you are thinking about parts or assemblies sharing, or referencing parameters as part of the regen process, this is also possible. iLogic does this, and adds scripting. So does Catia. Inventor/iLogic can also access Excel and have all the parameter processing done centrally, if required.
Consequently, scripting the placement of components is irrelevant in GH, unless you decide that each component needs to be contained in its own separate file.
I wouldn't be too hasty here. Yes, you are right about compartmentalisation. I think this needs to happen with GH, in order to deal with scalability/everyday interoperability requirements. Confining projects to one script is not sustainable. MCAD apps have been doing this for ages with 'Relational Modeling'.The Adaptive Components placement example illustrates that it is beneficial to be able to script some 'hints' that can be used on placement of the component. Say, if your component requires points as inputs, then its should be able to find the nearest points to the cursor as it moves around. I think Aish's D# / DesignScript demo'd this kind of behaviour a few years ago. Similarly, Modo Toolpipe reminds me how a lot of UI based transactions can be captured as scripts (macro recorder etc). Allowing this input to be mixed in and/or extended by GH I think will yield a lot of 'modeling efficiency' around the edges. This is a (mis)using GH as an user-programmable 'jig' for placing/manipulating 'dumb' elements in Rhino. It may even give the 'dumb elements' a bit more 'intelligence' by leaving behind embedded attributes, like links to particular construction planes etc.Even if we confine ourselves to scripting. GH is a visual or graphic programming interface. A lot of 'insert and connect' tasks can be done more easily using graphic methods. If we need to select certain vertices on a mesh as inputs for, say, a facade panel, its going to be quicker to do this 'graphically' (like the AC example), then ferreting out the relevant indices in the data tree et al. The 'facade panel' script would then have some coding to filter/prompt the user as to what inputs were acceptable, and so on.
This also brings up the point that generating components and assemblies in MCAD is not as straightforward. In iParts and iAssemblies, each configuration needs to be generated as a "child" (the individual file needs to be created for each child) before those children can be used elsewhere.
Not sure what you mean here. If the i-parts are built up using sketches /profiles or other more rudimentary features (like Revits' profile/face etc family templates) then reuse should be fairly straight forward. I suppose you could make it like GH scripting, if you cut and paste or include script snippets that generate the desired Inventor features.
One of the reasons why the distributed file approach makes perfect sense in MCAD, is that in industry you deal with a finite set of objects. Generative tools are usually not a requirement. Most mechanical engineers, product engineers and machinists would never have any use for that.
I don't think this is true. Look at the automotive body design apps, which are mostly Catia based. All of the body parts are pretty much 'generative' and generated from splines, in a procedural way, using very similar approaches to GH. Or sheet metal design. It's not always about configuration of off-the-shelf items like bolts. And, the constraints manager is available to arbitrate which bit of script fires first, and your mundane workaday associative dimensions etc can update without getting run over by the DAG(s) :-)
…
folder. There are several possibilities for this.
The first that comes to mind is using symbolic links (also known as symlinks). They are like a special kind of shortcut. Whereas a shortcut is a small file itself that links to another location, a symlink is a link that to the operating system and pretty much anything else is indistinguishable from the actual thing. That's why a certain care has to be taken with them, but they are used by the OS much more than might be obvious at first. I have used them on OS X a lot (and in fact all of Time Machine works almost entirely through the use of symlinks). There is a good article on how to use Symlinks easily on Windows as well, using the Link Shell Extension.
So once it's installed you can go to your Grasshopper folder in Roaming and pick it as the link source like so:
Then you change to a location in for example your Dropbox or wherever else you fancy. I have a folder inside my personal Dropbox (we use Dropbox for Business at work, thats why I have 2 Dropbox folders), there is a folder called Apps, which is used by all sorts of Apps that sync using Dropbox. So just right-click in there and create a symlink like so:
So now it will create the symlink and when you double-click it, it will contain the contents of your Grasshopper folder and start syncing:
Sure enough, after some uploading you now have your folder in Dropbox and continually updating:
I will leave this now and see how I get on, but it should be fine and shouldn't cause any issues. Now doing this the other way round, for example to sync the folder on a second computer, that might be another story as things like permissions start to come into play, although it should theoretically work. I have done similar things in the past with other software, but Dropbox is not the best in keeping permissions. Or rather in most cases you DONT want the permissions to stay the same, but for them to be changed to whoever the user is on a different computer and that does not always work as expected. But worth a try. I don't have another computer at hand to try this. On the other computer you would to the steps in opposite order and pick the folder in the Dropbox as the link source and then drop the symlink in the roaming folder (rename the Grasshopper folder that is already in there, so in case it doesnt work you can delete the symlink and rename it back to what it was).
This should theoretically also work with other cloud backups or a file server, but I have not tried those.
You can delete the symlink in the dropbox without problems and it will just delete the link. If you delete something in the Grasshopper folder inside the dropbox it will also be deleted in the roaming folder.
Disclaimer: No guarantees, do this at your own risk, backup your grasshopper folder just in case, be careful with symlinks and use them sparingly, take notes of what you are doing, especially when doing this on more than one computer.
I know on OS X there are several tools specifically for Dropbox that basically do exactly the same like MacDropAny, I am sure there is similar stuff for Windows.…
Added by Armin Seltz at 2:56am on January 25, 2016
GH works (b) creating feature driven very complex parametric parts manually (the trad way) ... and then combining them in assemblies derived from (a) with components derived from (b).
Exactly what Generative Components does (if we forget the bugs, the extremely slow response, the lack of any development, the bugs, the bugs and finally the bugs).
Creating collections (libraries) of components in Rhino it's pointless since he doesn't support feature driven modeling. This means constrained driven geometry (solids NOT surfaces - another reason for totally excluding Rhino for the scope) that describe the actual components (that belong to nested assemblies etc etc).
So back to (a) : The only thing that Rhino/GH can do (in real-life) is to outline an abstract topology with "basic/primitive" geometry in place (= lines in this case). Exactly what this WIP script does, in fact. Of course it can do calculations as well (clash detection AND drilling axis related stuff).
But never say never: let's inspect an example from some WIP project (AECOSim + Generative Components) of mine to see what can GH/Rhino additionally do (in real-life):
Imagine a rigid "ring" (the truss shown) that manages tensional forces (via cables) in a "ring like" formed tensile membrane combo. Membranes (inverse cones) pull the ring thing downwards and mast attached cables pull it upwards = equilibrium (or disaster if some cable fails, he he).
So assume that the abstract layout (lines, that is) is made with a similar GH script with the one posted here. Rhino can't even imagine doing the parametric fasteners shown - thus we exclude them from the equation.
But GH could(?) "indirectly" feed a proper CAD app (from AECOSim to CATIA) with "seed" information in order to help making the components and the assemblies of components.
For instance assume that every truss linear member is a classic MERO system (ball - sleeve - cone - tube -cone -sleeve - ball). It's pointless to create (in GH) and bake a nested Block structure with "real geometry" (surfaces, that is) and export it via STEP : we can export lines + coordinate systems instead (ACS) ... that could be sufficient for AECOSim to replace "parts containing lines + ACS" with real-life "parts containing constrained/feature driven solid objects".
So the real challenge here is to mastermind a suitable nested block structure (and an equivalent GH_structure) that could pass the right assembly/component info.
I'll be back soon with some add-on script that takes truss lines and makes them MERO style "surfaces" in order to practically outline the issue(s) and the goal.
…
ake a network of lines (i.e. a graph) and make a Plankton Mesh, from which you can use Cytoskeleton to make a solid mesh (and then smooth it with Weaverbird).
Works with ngons (polygons with 3 or more sides). Other examples I found only worked with tris and quads.
Works on open or closed surfaces
While these examples start with a surface, you could start with a network of lines and make a patch surface
This is meant for 2D networks/surfaces. I haven't attempted filling a 3D volume. My guess is this wouldn't work as it would require a non-manifold mesh that Plankton wouldn't handle.
Note similar results could be achieved with the following:
TSplines
MeshDual (dual of a tri mesh, not as much freedom/control)
Working backwards, here is the GhPython script from Will Pearson that builds a Plankton Mesh from vertices and faces. The vertices are a list of 3D coordinates, the faces are a tree a lists, with each list containing the indices of vertices that form a closed loop. From Will, "Plankton only handles manifold meshes, i.e. meshes which have a front and a back. This orientation is determined by the "right-hand rule" i.e. if the vertices of a face are ordered counter-clockwise then the face normal will be out of the page/screen."
# V: list of Point3d # F: tree of int
import Grasshopper appdata = Grasshopper.Folders.DefaultAssemblyFolder
import clr clr.AddReferenceToFileAndPath(appdata + "Plankton.dll")
import Plankton
pmesh = Plankton.PlanktonMesh()
for pt in V: pmesh.Vertices.Add(pt.X, pt.Y, pt.Z)
for face in F.Branches: face = list(face)[:-1] pmesh.Faces.AddFace(face)
These vertices and faces are precisely the output from Starling. Starling takes in a list of Polylines which form the (properly oriented) face loops.
The polyline face loops can be generated...
Directly from Panels on a surface using LunchBox
Using any network of lines/curves on a surface (curves will need to be converted to polylines before Starling)
The latter was achieved using the Surface Split command, then converting the face edges (converted to curves) into polyline loops to represent faces.
…
). It deals with the potential possibility to port GH into AEC fields (real-life AEC fields, nothing to do with academic thinking). The bad news are that the smart AEC sector is occupied solely by Bentley/GenComp – expect soon Revit/Dynamo as well (not to mention CATIA). The good news are that there’s millions of designers/engineers/industrial designers out there who could be interested for a 3rd alternative.
Intro: Well, in the old days (when men had mustache and muttonchops) AEC design performed in a nice top-to-bottom sequence (kinda like a vector) : the Big Man (aka The Brain) did some sketches (with crayons) and the rest (known as the “others”) struggled to make The Idea a reality. Today things are different, mind. Or they should be different. Or may be different. Or whatever. The big easy:For a zillion o reasons (AEC matures, PLM, cost, outsourcing, sustainable engineering…add several more) this vector like process of the past is like a Brown motion these days: Right down the moment that you (or your team) “sketch” The Big Idea … another team design simultaneously (i.e. in parallel) the components (parts) that compose the whole. This is the so called bottom-to-top design mentality. So the whole and the parts meet in some "middle point" instead the later being dictated by the former. In quite a few occasions parts dictate the whole (cost, cost and cost being the main reasons). The more a design is contemporary the more this bottom-to-top thing plays a critical role. Ignore it and have a very big time (sooner or later).The bad news:If you accept the above…well GH – at present phase - is not ready for contemporary AEC work. At.All.3 Main reasons for that:1.You can’t use parametric parts (i.e. nested blocks to speak Rhino language) into a given definition (in this case attached : truss nodes, connection flanges, mount plates, cable tensioners, planar glazing components, roof skin components…etc etc). This is obviously a Rhino domain.2.You can’t bake a given solution in such a way that the Rhino file is structured (i.e. assemblies of nested blocks). Or you can do it theoretically writing some VB/C code – but the core of the matter is that corresponding components are MIA. That means that you can’t export anything useful actually into established AEC oriented apps and/or established MCAD apps (for doing/calculating the parts for real-life production).3.The GH process can’t being interrupted. Imagine defining, say, a building “envelope” in GH and then …er…use Evolute tools in order to optimize things (say quad planarization and the likes). Then …continue in GH for more detailed work. Then design the parts as in 1 above. Then back to Evolute. Then back to GH.So…if anyone is interested I would be glad to start the mother of all debates and/or some kind of crusade (GH for President, that is).PS: This definition is a WIP thing – more refined stuff to follow (in particular a complex canopy tubes pre-stress system).
PS: Tree8 components are used sporadically.
PS: Use Saved Views
May the Dark Force be with us.Best, Peter …
whole design intent, but this is what Inventor is good at. The way it packages bits of 'scripted' components into 'little models' that can be stored and re-assembled is central to MCAD working.
The Inventor model shown is almost 5 years old. We don't model like that any more, however it does offer a good idea of general MCAD modeling approaches.
iParts is useful in certain situations, it could've been useful in the above model, its usefulness is often in function of the quantity of variants/configurations.
So much is scripted in GH, maybe it should also be possible to script/define/constrain/assist the placement/gluing of the results?
...
Starting point: I think we are talking across purposes. AFAIK, the solving sequence of GH's scripted components is fixed. It won't do circular dependencies... without a fight. The inter-component dependencies not 'managed' like constraints solvers do for MCAD apps.
Components and assemblies are individual files in MCAD.
Placement of these within assemblies in MCAD is a product of matrix transforms and persistent constraints. There is no bi-directional link, the link is unidirectional (downflow only), because of the use of proxies.
Consequently, scripting the placement of components is irrelevant in GH, unless you decide that each component needs to be contained in its own separate file.
This also brings up the point that generating components and assemblies in MCAD is not as straightforward. In iParts and iAssemblies, each configuration needs to be generated as a "child" (the individual file needs to be created for each child) before those children can be used elsewhere.
You notice the dilemma, if you generate 100 parts, and then you realize you only need 20, you've created 80 extra parts which you have no need for, thus generating wasteful data that may cause file management issues later on.
GH remains in a transient world, and when you decide to bake geometry (if you need to at all), you can do that in one Rhino file, and save it as the state of the design at that given moment. Very convenient for design, though unacceptable for most non-digital manufacturing methods, which greatly limits Rhino's use for manufacturing unless you combine it with an MCAD app.
One of the reasons why the distributed file approach makes perfect sense in MCAD, is that in industry you deal with a finite set of objects. Generative tools are usually not a requirement. Most mechanical engineers, product engineers and machinists would never have any use for that.
The other thing that MCAD apps like Inventor have, is the 'structured' interface that offers up all that setting out information like the coordinate systems, work planes, parameters etc in a concise fashion in the 'history tree'. This will translate into user speed. GH's canvas is a bit more freeform. I suppose the info is all there and linked, so a bit of re-jigging is easy. Also, see how T-Flex can even embed sliders and other parameter input boxes into the model itself. Pretty handy/fast to understand, which also means more speed.
True. As long as you keep the browser pane/specification tree organized and easy to query.
:)
Would love to understand what you did by sketching.
I'll start by showing what was done years ago in the Inventor model, and then share with you what I did in GH, but in another post.
Let's use one of the beams as an example:
We can isolate this component for clarity.
Notice that I've highlighted the sectional sketch with dimensions, and the point of reference, which is in relation to the CL of the column which the beam bears on. The orientation and location of the beam is already set by underlying geometry.
Here's a perspective view of the same:
The extent of the beam was also driven by reference geometry, 2 planes offset from the beam's XY plane, driven by parameters from another underlying file which serves as a parameter container:
Reference axes and points are present for all other components, here are some of them:
It starts getting cluttered if you see the reference planes as well:
Is I mentioned earlier, over time we've found better ways to define and associate geometry, parameters, manage design change, improving the efficiency of parametric models. But this model is a fair representation of a basic modeling approach, and since an Inventor-GH comparison is like comparing apples and oranges anyways, this model can be used to understand the differences and similarities, for those interested.
I haven't even gotten to your latest post yet, I will eventually.…
Added by Santiago Diaz at 10:36am on February 26, 2011
with the core McNeel team in Seattle for about 2 months tomorrow and I wanted to release this before I left. It's a bit rushed, clusters are definitely not as 'finished' as I'd like them to be, but there should be enough there for some good old customer feedback at least.
Just in case I horked something up, you can still download 0.7.0057 here.
Download 0.8.0001 from the usual location.
First a basic new features and bug list, then the warning section. If you don't read the warning section you forfeit any rights to complain about this new release.
● Added a new Cluster Object. This is very young code, expect big (quite possibly breaking) changes in the future.
● Added auto-panning to Drag Object and Draw Wire interactions.
● Added canvas curl UI for drag+drop options.
● Added default values to the Quad-Face and Tri-Face components.
● Added a Tree Split component for separating out branches.
● Drag+Drop with text content now creates a new Panel.
● Curve data can now convert from a Surface/Brep with a single closed edge loop.
● Added runtime message balloon feedback.
● VB and C# script components now update immediately when typehints are changed.
● VB and C# script components now update immediately when input parameter access is changed.
● MoveForward and MoveBackwards arrange options are now available.
● Added a Grasshopper Version field to the status bar.
● GraphMapper can now adjust intervals, points and vectors in addition to just numbers.
● Parameter disconnection menu items now highlight the connection in question on mouse-over.
○ The menu short-cuts for Find and Move Forward were both Ctrl+F. Find is now F3.
○ Any Undo operation would wreck the Redo stack, this no longer happens.
○ Fixed a bug with automatic tooltip resizing.
○ Fixed an erroneous "app" autocomplete member in the C# and VB script members.
○ Fixed a bug in the CurveCurve intersection SDK code that occured with overlaps.
○ Fixed a bug in the PointList display component with stale point data.
○ Fixed a nasty bug with stale document caches and undo/redo.
○ Custom Preview Meshes would always draw wires regardless of the Grasshopper view setting. This is fixed.
The Aforementioned Warning Section
This pertains mostly to clusters. At present there's no way yet to edit the contents of a cluster. You can make clusters from a selection by clicking on the toolbar cluster button (selected objects remain on the canvas, this will change), or by drag+dropping ghx files onto the canvas and selecting the Cluster Insert mode from behind the curl.
Clusters contents can be opened as new documents via the Cluster object menu, but this code is very icky still. You can edit cluster properties by double clicking on one.
It is entirely possible that clusters will change so much in the near future that old clusters might not read correctly from 0.8.0001 files. Do not use them yet on production work and always make backups.
That's it. Enjoy,
David
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
Added by David Rutten at 4:27pm on October 22, 2010
e chosen to dive into Grasshopper. I’m about 6 months in. If some of my comments are completely off, please take that to mean that a feature is too inaccessible to a newish user rather that it’s just missing, as I may have stated.
One of my primary pain points is this. Things that can be done in other programs are invariably easier in other programs. This is a big enough issue that I doubt there’s an easy solution that an armchair qb like myself can offer up.
The interface:
I’ve used a lot of 3D programs. I’ve never encountered one as difficult as grasshopper. What in other programs is a dialog box, is 8 or 10 components strung together in grasshopper. The wisdom for this I often hear among the grasshopper community is that this allows for parametric design. Yet PTC (Parametric Technology Corp.) has been doing parametric design software since 1985 and has a far cleaner and more intuitive interface. So does SolidWorks, Inventor, CATIA, NX, and a bunch of others.
In the early 2000's, when parametric design software was all the rage, McNeel stated quite strongly the Rhino would remain a direct modeler and would not become a parametric modeler. Trends come. Trends go. And the industry has been swinging back to direct modeling. So McNeel’s decision was probably ok. But I have to wonder if part of McNeel’s reluctance to incorporate some of the tried and proven ideas of other parametric packages doesn't have roots in their earlier declaration to not incorporate parametrics.
A Visual Programming Language:
I read a lot about the awesomeness and flexibility of Grasshopper being a visual programming language. Let’s be clear, this is DOS era speak. I believe GH should continue to have the ability to be extended and massaged with code, as most design programs do. But as long as this is front and center, GH will remain out of reach to the average designer.
Context sensitivity:
There is no reason a program in 2014 should allow me to make decisions that will not work. For example, if a component input is in all cases incompatible with another component's output, I shouldn't be able to connect them.
Sliders:
I hate sliders. I understand them, but I hate ‘em. I think they should be optional. Ya, I know I can r-click on the N of a component and set the integer. It’s a pain, and it gives no feedback. The “N” should turn into the number if set. AAAnd, sliders should be context sensitive. I like that the name of a slider changes when I plug it into something. But if I plug it into something that'll only accept a 1, a 2, or a 3, that slider should self set accordingly. I shouldn't be able to plug in a “50” and have everything after turn red.
Components:
Give components a little “+” or a drawer on the bottom or something that by clicking, opens the component into something akin to a dialog box. This should give access to all of the variables in the component. I shouldn't have to r-click on each thing on a component to do all of the settings.
And this item I’m guessing on. I’m not yet good enough at GH to know if this may have adverse effects. Reverse, Flatten, Graft, etc.; could these be context sensitive? Could some of these items disappear if they are contextually inappropriate or gray out if they're unlikely?
Tighter integration with Rhino:
I'm not entirely certain what this would look like. Currently my work flow entails baking, making a few Rhino edits, and reinserting into GH. I question the whole baking thing, btw. Why isn't it just live geometry? That’s how other parametric apps work. Maybe add more Rhino functionality to GH. GH has no 3D offset. I have to bake, offsetserf, and reinsert the geometry. I’m currently looking at the “Geometry Cache” and “Geometry Pipeline” components to see if they help. But I haven't been able to figure it out. Which leads me to:
Update all of the documentation:
I'm guessing this is an in process thing and you're working toward rolling GH from 0.9.00075 to 1.0. GH was being updated nearly weekly earlier this year. Then it suddenly stopped. If we're talking weeks before a full release, so be it. But if we're looking at something longer, a documentation update would help a lot. Geometry Cache and Geometry Pipeline’s help still read “This is the autogenerated help topic for this object. Developers: override the HtmlHelp_Source() function in the base class to provide custom help.” This does not help. And the Grasshopper Primer 2nd Ed. was written for GH 0.60007.
Grasshopper is fundamentally a 2D program:
I know you'll disagree completely, but I'm sticking to this. How else could an omission like offsetsurf happen? Pretty much every 3D program in existence has this. I’m sure I can probably figure out how to deconstruct the breps, join the curves, loft, trim, and so forth. But does writing an algorithm to do what all other 3D programs do with a dialog box seem reasonable? I'm sure if you go command by command you'll find a ton on such things.
If you look at the vast majority of things done in GH, you'll note that they're mostly either flat or a fundamentally 2D pattern on a warped surface.
I've been working on a part that is a 3D voronoi trimmed to a 3D model. I've been trying to turn the trimmed voronoi into legitimate geometry for over a month without success.
http://www.grasshopper3d.com/profiles/blogs/question-voronoi-3d-continued
I’ve researched it enough to have found many others have had the exact same problem and have not solved it. It’s really not that conceptually difficult. But GH lacks the tools.
Make screen organization easier:
I have a touch of OCD, and I like my GH layout to flow neatly. Allow input/output nodes to be re-ordered. This will allow a reduction in crossed wires. Make the wire positions a bit more editable. I sometimes use a geometry component as a wire anchor to clean things up. Being able to grab a wire and pull it out of the way would be kinda nice.
I think GH has some awesome abilities. I also think accessing those abilities could be significantly easier.
~p…
nts that I have found helpful and will be included in the next release, but you can try them now. They are online at https://github.com/fequalsf/Crystallon/tree/0972066e468f0a7a592ff4e7e88226028dcb029c/V2.1I have been interested in finding ways to save settings for different iterations of a design which can be baked into a rhino file and used again later. These tools I've made are for working with divisions of a surface.The first tool (Divide Surface) is for dividing a single surface using UV parameters and outputting a quad mesh. Simple enough. What makes this powerful is you can use that mesh with the "Morph Between Meshes" tool to create your voxels. So now you can morph between surfaces with the same number of divisions but with different parameters. The other nice thing about meshes is they are simple to work with and can be further modified with other plugins (such as kangaroo). They can be baked, manually edited in rhino and saved as STL or OBJ files to use again later. I will be updating all the tools eventually to output meshes.
The next tools are for creating those divisions. Any of the components that require a parameter input need a range of values from 0-1. The simplest way to do this is with the "Range" component. The default domain is 0-1 so you only need to give it a number of steps.
To make the range non-linear, there's a few components you can use. Graph mapper is the most common tool, but you could also use the gradient tool.
But these can be difficult to work with and quite limiting. Graph mapper has a limited set of graph types to work with (I tend to use Bezier) and the gradient tool makes a steep curve which cannot change. Also making small changes is difficult and saving a setting for later is not easy.
So the next tool I made is a curve plotter. This takes your range of number (X values) and your remapped numbers (Y values) and plots the points to either a polyline or interpolated curve. This way you can see the curve the gradient is making or bake out a graph mapper curve you want to use later.
The next tool I made is a curve graph mapper, so you can map numbers using any curve drawn on the XY plane. This gives you much more freedom than the graph mapper and is easier to make small adjustments. Then you can always make many iterations of a curve and go back to any of them saved in the rhino file. There are options to view tags with the values on the curve as well as a gradient preview.
If you take a look at the curve created by the gradient tool, you can see it is basically creating a Bezier curve from the handles on the gradient (position is X value, color is Y value). The problem with using it for division parameters is the tangency of the points is always in the X direction creating a nearly horizontal section in the curve. This will give you a series of the same values, which we don't want. The falloff of the curve is also quite steep with no way of adjusting it.
If you make a lot of divisions you will also notice stepping in the curve. This is because the gradient uses RGB colors which is only a range of whole number from 0-255. So you only have a total of 256 values from 0-1.
Yet there is something elegant and user friendly about Bezier curves which makes them nice for creating gradients. So the last tool I made is for creating a Bezier curve from points. All you need to do is input at least 2 points. The second input is the tangent length multiplier (which can be one value for all or one per span of the curve) and the third is the tangent rotation in radians (also either one value or one per span).
The values are shown on the curve and can be baked as text tags if you want to save them and use the same points and values later. Or you can just bake out the curve. This makes for a simple smooth curve that makes a nice gradient.
…
as the design table? I think this could be 'drawn' and constrained in Inventor in a lot less time. I know the GH model would have a lot of flexibility, but in this case, what can you do with it that wasn't provided by an Inventor model?
Only the 27 lines mentioned were modeled in Rhino, the rest is modeled with GH.
The 5 hrs involved thinking about the approach, defining vertical lines, tilts, elevations, pitch of the roof, intersections.
Once I had decided what my approach would be, and tested the logic with those first lines, points and data path arrangements, it only took one more hour to get to this:
Which is actually quite fast, compared to MCAD workflows.
If you already have components (columns, beams, etc.) modeled and ready to drop into a project, of course it is lightning fast to model simple projects like this example.
I am not as much interested in those situations, because improving efficiency is straightforward and obvious.
I'm more interested in situations where there are no pre-defined families of objects, in which case you need to start from scratch.
The GH model I'm showing is modeled from scratch, except for the 27 lines in Rhino.
Here's one obvious advantage to modeling with GH, once the definition is set-up, it's virtually effortless to change inputs and alter the overall design. Here's an example, lets say we wanted to extend the roof 3 more units, curling away from the original direction.
Plan view before:
And after:
An MCAD app will also allow you to do this, as long as the location of additional elements follows the existing geometric method of definition. What happens if you want completely change the way you locate columns, roof slope, intersection points?
In MCAD, you'll need to re-model the underlying geometry, which will take the same effort as the first round. In GH, this process is not only much faster, it's open to algorithmic approaches, galapagos, etc. and it just takes some simple re-wiring to have all down-stream elements associate themselves to this new geoemtric definition.
For instance, here's the same definition applied to two curves, which are divided in GH, the resulting points are used as a starting point for lines directed at normal from curves.
This is not so easy to do in MCAD.…
Added by Santiago Diaz at 7:55pm on February 24, 2011