ively and creatively solve today’s product development challenges.
Our Rhino3D Foundations for Industrial Design class provides an in-depth look at 2D and 3D tools and methods with Rhino3D, a NURBs surface modeling software. In this class, we will systematically work through Rhino3D’s core features, using them to model the various components of a consumer product. Over the course of 3 days, we’ll cover some foundational topics, including Rhino interface and navigation, Rhino3D object types and properties, creating and editing 2D and 3D geometry, procedural modeling, automation, transforming geometry, Rhino modeling best practices, freeform vs. precision modeling, and exporting geometry.
You’ll take away the following:
Navigate the Rhino modeling environment
Create, edit, and modify curves, surfaces, and solids
Precision model using coordinate input and object snaps
Use transformation and universal deformation tools
Apply best practices for layer management and model annotation
Download the course one-pager. Need more information? Connect with us.
This class is ideal for:
Industrial designers who are new to Rhino3D and want to learn its concepts and technical features in an instructor-led environment.
For groups of 10 or more, contact Mode Lab at hello@modelab.is
Interested in additional training options?
https://www.modelab.is/upcoming-computational-design-events…
rent actors to work together in real time on an architectural project.
DixieVR was born from the idea that virtual reality could become a fantastic tool for architecture and architects, not only for virtual tours but for the conception at its very core. Inspired by the efficiency of sandbox games, DixieVR will allow you to build a fully parametric 3D model from scratch in a very intuitive way and to simulate various factors like natural and artificial light, gravity, and more. DixieVR is also multi-user oriented : several people, architects or not, are able to work together in real time on the same 3D model and in the same shared immersive environment !
The project started in the Digital Knowledge department of Paris-Malaquais Architecture School.
The DixieVR Softwares can be found here : dixievr.github.io
// Interoperability
DixieVR deals with .dix files. For more information about this file format, please refer to the Interoperability documentation of DixieVR.
You can use this DixieIO plugin for Grasshopper/Rhinoceros for exchanging data between DixieVR (PC) & DixieViewer (Android).
You can import or export objects at any time inside a DixieVR scene. The Software also come with a library of premade objects that you might find useful. Adding your own premade objects to this library might be a good habit.
If you are hosting a scene, you also have the choice to open a .dix file directly from the main menu, this will load the last scene in which the geometry has been saved.
// Plugin
The DixieVR Plugin can be found in the Extra tab, come with 3 components and a example definition:
Dixie2Gh : Import DixieVR geometry to Grasshopper/Rhinoceros reading a .dix file (up to 1000 beams and/or 750 faces).
G2D_Polylines : Export Grasshopper/Rhinoceros Polylines to DixieVR writing a .dix file (up to 1000 line segments).
G2D_Mesh : Export Grasshopper/Rhinoceros Mesh to DixieVR writing a .dix file (up to 750 triangulated faces).
To install:
In Grasshopper, choose File > Special Folders > Components folder. Place the DixieIO_01.gha file there.
Right-click the file > Properties > make sure there is no "blocked" text.
Restart Rhinoceros or Unload Grasshopper.
// Contact - DixieVR
vr.dixie@gmail.com dixievr.github.io
- Oswald Pfeiffer oswaldpfeiffer.com
- Mathieu Venot mathieuvenot.com…
p; 3D Urban ModelingOn the topography subject I get the next message: "One or more boundaries may be outside the bounds of the topo dataset" I'm not sure if it's the .IMG file I'm loading since I found so many IMG files nearing my polyline area (Miami Lat:26 Lon:-81 aprox.) or maybe my polygon doesn't match the topo area? I have no idea why it isn't working :(On the Shapefile subject, haven't been able to find a Building Height SHP File, so far have downloaded around 8 SHP files which only contain Polylines, my solution is to meanwhile randomize Z heights, but of course this data is not "technically" correct.P.S.: I've already tried all example links and also the ones posted by you and Benjamin in this video.Been strugling last few days, hope you can help me, thanks in advance!!…
raphics card (NVIDIA Quatro K4000) that Freeform recommended but that didn't seem to help as much as the memory, especially since it's much cheaper now than ever before so I got the fastest memory I could find too, with heat sinks on it. I only have four cores (i7 @ 2.66GHz not overclocked) but software usually can't use them all anyway except in rendering. I don't even have SSD disks yet, since Windows 7 is so stable I haven't had to reinstall Windows for years which is what it would take to make me go through upgrading my disks. My single monitor is large but not high definition (La Cie 324i at 1920x1200). I have also tweaked Windows 7 to rid it of any fancy interface features, so my system looks rather old school.
Also, I'm an organic synthetic chemist by training, so my patience level is very high with continuous parameter tweaking in Grasshopper and constantly force quitting Rhino by right clicking it in the Taskbar to use "Close window" instead of the inconvenient Task Manager. I rely on the Grasshopper preference settings that turns on recovery file creation, and that system works nearly always, letting you re-open unsaved work with the Solver deactivated as an option so you can change the parameters back to mellow. So when I make things look easy, that's because compared to chemistry, merely quitting a program all day in order to change a parameter in Grasshopper, is something I hardly even notice having to do so often. It certainly bothered me early on, a lot, before I understood that Grasshopper 2 was coming one day, and that the existing program just wasn't designed to handle what it's being now taxed with.…
Added by Nik Willmore at 11:19pm on August 9, 2015
component in GH for a project im working on. as part of that component I want to dynamic show text the rhino viewport but I don't want to have to return a value that I then plug into the "text tag 3d" component. I want to build a similar method into my custom component.
therein lies my problem. I haven't yet figured out how to get my vb code to produce text.
my latest attempt looks a little something like this.
Dim TestPoint3D As New rhino.Geometry.Point3d(0, 0, 0) Dim TestVect As New rhino.Geometry.Vector3d(0, 0, 1) Dim TestPlane As New plane(TestPoint3D, TestVect) Dim TestText As New display.text3d("bob", TestPlane, 10) ListItem = TestPlane TextItem = TestText
but I get nothing out of it.
latest theory is to try using "Draw3dText Method (Text3d, Color)" but this is where ive hit a wall
if I understand how this works than I would think I would code this
Dim TestText As New Rhino.Display.DisplayPipline.Draw3dText( text here, and color here)
but the hint that im getting after "DisplayPipline" doesnt show a "Draw3dText" method?
so im confused?
again my overall goal is to get text to display in the viewport directly through my component
any thoughts or ideas, or if im even in the ballpark on this one would be helpful.
thanks!…
) In the Rhino view port it is not possible to modify it until is backed (and I don't want!) I need to place several images each one in a different place.
2) Is it possible to use another component THAT DO NOT CONVERT INTO BLACK AND WHITE, the pictures??. I need to set COLOR images in a 3D model, using grasshopper. thanks!
Any comment or suggestion would be welcome!!!
Thanks a lot!
…
brep.
I am obviusly doing this in grasshopper (using a image to map the lines with the imagesampler) but this question goes beyond the software. it is more about geometry, I guess.
it involves to unwrape a geometry, but having always continuity from one to an other.
here a image of the concept
You have to keep in mind that the brep (in this case a circular shape) its longer than the shape of the plane. so it is difficult to place them flat in photoshop to paint and create the continuity.
here the images that I am using to map the lines on the geometries. I am using a definition that creates lines from a image black&white like this one
but in order to achive the continuity from the ground to the facade of the building I am thinking that the only posibility would be to use a software where I can paint a gemetry in 3D. LIKE ZBRUSH
but how do I get the map back out and flat to use is correctly in grasshopper?
anyone as any ideas?
Please!!!
THANKS!
HAVE A GREAT DAY!
…
3d voronoi from which i extract a cell for each point. After this i need to compute the intersection between each cell and the surface.
I tried two approaches: one with "Brep|Brep intersection" and then "Curve splitting", and another with "Split Brep".
The first solution works (below) perfectly but the "Curve splitting" phase can be bloody slow! Sometimes it requires more than 1.5 minutes
The "Split Brep" solution (below) is much faster, but for each cell it returns me TWO surface: the one inside the Voronoi cell and the one outside. These are inside a three with a branch for each curring surface. The problem is than inside the branches, sometimes the first element is the inner surface, sometimes it's the outer.
Is there a way to use "Split Brep" and throw away the outer surfaces?
Do you suggest any other method?
Thank you very much, and sorry for my terminology: i've been using GH for 2 days :/…
o express my gratitude. I've been experimenting with your definitions (and still am), but let me extend my question.
Actually what I'm trying to achieve, is to recreate another project by Andrew Kudless, the spore lamp (I mentioned the Chrysalis at the beginning just because of the animation, which wasn't included in the Spore Lamp presentation).
Basically the spore lamp seems to me to be something like a preliminary study to the Chrysalis III project (I think it's a similar approach).
Andrew stated on his site that he used kangaroo for this project, so the Spore Lamp consists in my opinion either of a relaxed voronoi 3d diagram (b-rep, b-rep intersection) on a sphere which then has been planarized, or more likely it is a sort of relaxed facet dome.
The trick is to:
1. obtain a nicely-balanced voronoish diagram (or facet dome cells)
2. keep each cell/polyline planar (or force them with kangaroo to be planar) in order to move scale and loft them later on.
Here is what I have by now. (files: matsys spore lamp attempt)
That's the closest appearance that I got so far (simple move scale and loft of facet dome cells with the amount of transformations being proportional to the power of the initial cell area: bigger cell = bigger opening etc.) - with no relaxation of the diagram. But it's obviously not the same thing as the matsys design.
Here are some of my attempts of facet dome relaxation, but well, it certainly still not the right approach, and most importantly I don't know how to keep or force the cells to be planar after the relaxation.
1. pulling vertices to a sphere - no anchor points. That obviously doesn't make sense at all, but the relaxation without anchor points gives at the beginning a pattern that is closer to what I am looking for. (files: relaxation 01)
2. pulling vertices to a sphere - two faces of the initial facet dome anchored (files: relaxation 02)
3. pulling vertices to the initial geometry (facet dome) no anchor points (files: relaxation 03)
The cell pattern of the lamp kinda looks like this:
you can find it here: http://www.grasshopper3d.com/forum/topics/kangaroo-0-095-released?g...
Done with Plankton (of course without the "gradient increase" appearance), but in fact not, I took a look at Daniel Parker's Plankton example files, and it's not quite the same thing. Also the cells aren't planar...
The last problem is that during the relaxation attempts that I did, the biggest initial cells became enormous, and it's not like that in the elegant project by Andrew Kudless, that I'd like to achieve.
So to sum up:
Goal no 1: Obtain an elegant voronoi /facet dome cell pattern on a sphere (or an ellipsoid surface, whatever).
Goal no 2: Keep the cells planar in order to be able to loft them later and obtain those pyramidal forms, and assemble easily
Any ideas? Or maybe there's a completely different approach to that?…
is set up to manipulate strings into an STL file that is quite different from how Grasshopper defines meshes, in that an STL seems to define each face by XYZ points, Grasshopper wants a single list of all vertex points and then has an allied lists of topological connectivity according to vertex number, so for now I just hacked it to spit out points minus so many duplicates it generates for STL:
Right now it has an internal 3D trigonometric function I added input sliders to control, that creates surfaces that look a lot like molecular orbitals.
So how do I make a mesh? I failed to make a single mesh face from each STL face since AddMesh seems to want a list, so I tried making a single list and matching it with a simple ((1,2,3),(4,5,6),(7,8,9)...) array of connectivity but it hasn't worked yet since the STL list of vertices has duplicates that won't work for Grasshopper and removing the duplicates scrambles the connectivity relation.
After some work on this and seeing the output, I figure I could just randomly populate the mathematical function with points instead, unless it really gives a better mesh result than other routines. I'm not sure what to do with it yet, even if I get the mesh figured out.
import rhinoscriptsyntaximport RhinoPOINTS_CONTAINER =[]POINTS = []class Vector: # struct XYZ def __init__(self,x,y,z): self.x=x self.y=y self.z=z def __str__(self): return str(self.x)+" "+str(self.y)+" "+str(self.z) class Gridcell: # struct GRIDCELL def __init__(self,p,n,val): self.p = p # p=[8] self.n = n # n=[8] self.val = val # val=[8] class Triangle: # struct TRIANGLE def __init__(self,p1,p2,p3): self.p = [p1, p2, p3] # vertices # HACK TO GRAB VERTICES FOR PYTHON OUTPUT POINTS_CONTAINER.append( (p1.x,p1.y,p1.z) ) POINTS_CONTAINER.append( (p2.x,p2.y,p2.z) ) POINTS_CONTAINER.append( (p3.x,p3.y,p3.z) )# return a 3d list of values def readdata(f=lambda x,y,z:x*x+y*y+z*z,size=5.0,steps=11): m=int(steps/2) ki = [] for i in range(steps): kj = [] for j in range(steps): kd=[] for k in range(steps): kd.append(f(size*(i-m)/m,size*(j-m)/m,size*(k-m)/m)) kj.append(kd) ki.append(kj) return ki from math import sin,cos,exp,atan2 def lobes(x,y,z): try: theta = atan2(x,y) # sin t = o except: theta = 0 try: phi = atan2(z,y) except: phi = 0 r = x*x+y*y+z*z ct=cos(PARAMETER_A * theta) cp=cos(PARAMETER_B * phi) return ct*ct*cp*cp*exp(-r/10) def main(): data = readdata(lobes,10,40) isolevel = 0.1 #print(data) triangles=[] for i in range(len(data)-1): for j in range(len(data[i])-1): for k in range(len(data[i][j])-1): p=[None]*8 val=[None]*8 #print(i,j,k) p[0]=Vector(i,j,k) val[0] = data[i][j][k] p[1]=Vector(i+1,j,k) val[1] = data[i+1][j][k] p[2]=Vector(i+1,j+1,k) val[2] = data[i+1][j+1][k] p[3]=Vector(i,j+1,k) val[3] = data[i][j+1][k] p[4]=Vector(i,j,k+1) val[4] = data[i][j][k+1] p[5]=Vector(i+1,j,k+1) val[5] = data[i+1][j][k+1] p[6]=Vector(i+1,j+1,k+1) val[6] = data[i+1][j+1][k+1] p[7]=Vector(i,j+1,k+1) val[7] = data[i][j+1][k+1] grid=Gridcell(p,[],val) triangles.extend(PolygoniseTri(grid,isolevel,0,2,3,7)) triangles.extend(PolygoniseTri(grid,isolevel,0,2,6,7)) triangles.extend(PolygoniseTri(grid,isolevel,0,4,6,7)) triangles.extend(PolygoniseTri(grid,isolevel,0,6,1,2)) triangles.extend(PolygoniseTri(grid,isolevel,0,6,1,4)) triangles.extend(PolygoniseTri(grid,isolevel,5,6,1,4)) def t000F(g, iso, v0, v1, v2, v3): return [] def t0E01(g, iso, v0, v1, v2, v3): return [Triangle( VertexInterp(iso,g.p[v0],g.p[v1],g.val[v0],g.val[v1]), VertexInterp(iso,g.p[v0],g.p[v2],g.val[v0],g.val[v2]), VertexInterp(iso,g.p[v0],g.p[v3],g.val[v0],g.val[v3])) ] def t0D02(g, iso, v0, v1, v2, v3): return [Triangle( VertexInterp(iso,g.p[v1],g.p[v0],g.val[v1],g.val[v0]), VertexInterp(iso,g.p[v1],g.p[v3],g.val[v1],g.val[v3]), VertexInterp(iso,g.p[v1],g.p[v2],g.val[v1],g.val[v2])) ] def t0C03(g, iso, v0, v1, v2, v3): tri=Triangle( VertexInterp(iso,g.p[v0],g.p[v3],g.val[v0],g.val[v3]), VertexInterp(iso,g.p[v0],g.p[v2],g.val[v0],g.val[v2]), VertexInterp(iso,g.p[v1],g.p[v3],g.val[v1],g.val[v3])) return [tri,Triangle( tri.p[2], VertexInterp(iso,g.p[v1],g.p[v2],g.val[v1],g.val[v2]), tri.p[1]) ] def t0B04(g, iso, v0, v1, v2, v3): return [Triangle( VertexInterp(iso,g.p[v2],g.p[v0],g.val[v2],g.val[v0]), VertexInterp(iso,g.p[v2],g.p[v1],g.val[v2],g.val[v1]), VertexInterp(iso,g.p[v2],g.p[v3],g.val[v2],g.val[v3])) ] def t0A05(g, iso, v0, v1, v2, v3): tri = Triangle( VertexInterp(iso,g.p[v0],g.p[v1],g.val[v0],g.val[v1]), VertexInterp(iso,g.p[v2],g.p[v3],g.val[v2],g.val[v3]), VertexInterp(iso,g.p[v0],g.p[v3],g.val[v0],g.val[v3])) return [tri,Triangle( tri.p[0], VertexInterp(iso,g.p[v1],g.p[v2],g.val[v1],g.val[v2]), tri.p[1]) ] def t0906(g, iso, v0, v1, v2, v3): tri=Triangle( VertexInterp(iso,g.p[v0],g.p[v1],g.val[v0],g.val[v1]), VertexInterp(iso,g.p[v1],g.p[v3],g.val[v1],g.val[v3]), VertexInterp(iso,g.p[v2],g.p[v3],g.val[v2],g.val[v3])) return [tri, Triangle( tri.p[0], VertexInterp(iso,g.p[v0],g.p[v2],g.val[v0],g.val[v2]), tri.p[2]) ] def t0708(g, iso, v0, v1, v2, v3): return [Triangle( VertexInterp(iso,g.p[v3],g.p[v0],g.val[v3],g.val[v0]), VertexInterp(iso,g.p[v3],g.p[v2],g.val[v3],g.val[v2]), VertexInterp(iso,g.p[v3],g.p[v1],g.val[v3],g.val[v1])) ] trianglefs = {7:t0708,8:t0708,9:t0906,6:t0906,10:t0A05,5:t0A05,11:t0B04,4:t0B04,12:t0C03,3:t0C03,13:t0D02,2:t0D02,14:t0E01,1:t0E01,0:t000F,15:t000F} def PolygoniseTri(g, iso, v0, v1, v2, v3): triangles = [] # Determine which of the 16 cases we have given which vertices # are above or below the isosurface triindex = 0; if g.val[v0] < iso: triindex |= 1 if g.val[v1] < iso: triindex |= 2 if g.val[v2] < iso: triindex |= 4 if g.val[v3] < iso: triindex |= 8 return trianglefs[triindex](g, iso, v0, v1, v2, v3) def VertexInterp(isolevel,p1,p2,valp1,valp2): if abs(isolevel-valp1) < 0.00001 : return(p1); if abs(isolevel-valp2) < 0.00001 : return(p2); if abs(valp1-valp2) < 0.00001 : return(p1); mu = (isolevel - valp1) / (valp2 - valp1) return Vector(p1.x + mu * (p2.x - p1.x), p1.y + mu * (p2.y - p1.y), p1.z + mu * (p2.z - p1.z)) if __name__ == "__main__": main() # GRASSHOPPER PYTHON OUTPUTPOINTS = rhinoscriptsyntax.AddPoints(POINTS_CONTAINER)POINTS = rhinoscriptsyntax.CullDuplicatePoints(POINTS)…