Crystallon is an open source project for creating lattice structures using Rhino and Grasshopper3D. The goal is to generate lattice structures within Rhino’s design environment without exporting t
y in English. ○Presenter
Robert (Bob) McNeel (McNeel & Associates founder) Robert (Bob) McNeel is the founder and president of Robert McNeel & Associates (RMA). Founded in 1978, RMA originally focused on developing accounting software for accounting, architecture, engineering, and other personal services firms. Within a few years, RMA expanded its services to include selling and supporting microprocessor-based engineering and design software including AutoCAD. By 1985, the main focus of the business had shifted to AutoCAD sales, service, training, and software development. Bob McNeel grew up in the mountains of southern Washington State on a subsistence dairy farm. To pay for college, he worked in construction as a carpenter, welder, and cement finisher. Bob has a BA in Accounting from Washington State University. Prior to founding McNeel & Associates, he was a practicing Certified Public Accountant and the comptroller for a large construction company in Spokane. Andrés González (Rhino Fablab director) Andrés is a software trainer and developer since the 1980s. He has developed applications for diverse design markets as well as training materials for different CAD and Design software including the community of training materialswww.Rhino3D.TV Andrés has been working with the Rhino Team since the very early stages. He is now the head of the McNeel Southeast US & Latin American Division. He is the worldwide director of the digital fabrication community called RhinoFabLabwww.RhinoFabLab.com as well as the Generative Jewelry & Fashion Design community GJD3D www.GJD3d.com and Generative Furniture Design community GFD3D www.GFD3d.com 1981 -1985 University of North Carolina at Charlotte N.C. - EE.UU. B.S., Bachelor of Science in Engineering
…
Added by Yusuke Oono at 9:28pm on October 16, 2013
eventually found out about genetic algorithms on which I found extensive researches, projects,... ! I looked into it and ended up on a few papers which I believe are the jumpstart for my master thesis.
"Galapagos; on the logic and limitations of generic solvers" by David RuttenArticle in Architectural Design 83(2) March 2013
"Black-box optimisation methods for architectural design" by Thomas Wortmann and Giacomo NanniciniConference Paper: CAADRIA 2016, At Melbourne, AU, Volume: 177-186
So I started looking into alternatives to genetic algorithms in architectural design.So far, I've ended up on :
Thomas Wortmann's work with the surrogate(or model) based optimization approach!You can check out the tool he developped for GH (Opossum):http://www.food4rhino.com/app/opossum-optimization-solver-surrogate-models
Judyta Cichocka's work, specially with the Swarm approachYou can check out the tool she developped for GH (Silvereye):http://www.food4rhino.com/app/silvereye-pso-based-solver
And that's it !!! I've been researching through article references (mainly on "researchgate") but I'm now stuck in a loop of references I already visited!That probably means the litterature on the subject is not (yet) extended but I might probably be missing something.The keywords make it difficult to search : "optimisation", "algorithms", "architecture", send me most of the time to computational engineering and deep mathematics papers I unfortunately do not have the background knowledge to comprehend ! So there it is ! If you have any clue of where (or how ! ) I should be looking, please tell me :)I know Mr Rutten is pretty active on the forum so hopefully... (fingers crossed :p) !Also if you have any good tips for getting into algorithms in general (you think could help), I'd be glad to hear(read) it ! A book, tutorials maybe ?!So, autors, architects, projects books, articles, conferences I should go to,specialized architecture offices/studios (I'm also looking for an internship so ...).If you know about a more appropriate forum please let me know !If you want to get deeper into this, you can contact me at :
e1635331@student.tuwien.ac.at
tdissaux@student.ulg.ac.be
My master thesis is due for may 2018 but I have a paper to write for January 2018 in order to be elligible for a PHD program afterwards.What I mean by that is that if you read this message in 6 month, I'll still be open to discussion !
I am right now an erasmus student at TUWien (Vienna) but my main university is The university of Liège in Belgium.I can handle French, English, Italian litterature and eventually Dutch if really you think it's worth it ! I have access to most online libraries via my university's portals so access shouldn't be an issue !I'm very excited to hear from you I wish you all a great day,Cheers,Thomas
…
ating to new speakers.
For more information: https://medium.com/@carspeakerland/a-guide-to-the-simple-way-difference-in-car-speakers-2-way-3-way-4-way-25e0bf215b00
Adding new speakers for your automobile could improve the sound quality dramatically. Some sound technicians say it is the number-one update you may make to improve the overall quality of your vehicle.
"They do not care how it sounds. Speakers are often form of continue on the list. Updating to new speakers offers you a much fuller sound."
There is a whole lot to pick from in regards to car speakers. (Photo from Eldon Lindsay)
"New speakers will make a greater fidelity and clarity of sound," states Robert Nevitt, proprietor of Audio Electronics at Indianapolis. "The audio is more different without distortion. People will not get bored listening to it."
Cook says customers need to pick the type of sound they enjoy. The very first thing Cook does having a customer is sit in the car together to talk about their personal taste.
"Everybody's ear is different," he states. "That which I believe sounds great, you might believe is dreadful. It is a fantastic idea to get outside and listen to everything you enjoy and do not like about doing it."
When you've discovered a sound you want, you are going to discover the sky's actually the limitation in regards to purchasing car speakers. There are scores of manufactures and models, sizes and power levels to select from.
Columbus Car Audio & Accessories offers three types of automobile speakers to pick from: complete array speakers, component speakers along with coaxial speakers.
• Total range speakers arrive with a tweeter to make to your high-pitched sounds along with a woofer for those lows. This option offers a number of different sizes.
• Unit speakers, nonetheless, include separate tweeters and woofers.
• Coaxial speakers arrive with a tweeter plus motorist.
When you've selected a type of automobile speaker, you are going to want to determine how many you desire. Cook states some cars arrive with as little as just two speakers, whereas bigger, luxury vehicles might have too many 32. He adds a normal sedan generally has four. What are The Speaker Sizes in My Car | Speaker Size for My Car
"It simply depends if you would like to replace all of these," Cook says. "I would advise doing all of four. If you are budget-minded, I'd begin with the ones at the front. That is where you are at. And you are likely to be at the automobile 100 percent of their moment."
Subwoofers are designed to reproduce low bass frequencies also may be included with new speakers or could be added separately to existing car speakers.
"Many speakers can not play down low in these frequencies such as a subwoofer may," Cook says.
Related Article
Wondering about speakers? Below are a few techniques to establish a home entertainment experience whatever your budget.
A speaker update might charge as little as $100 up to a few million dollars depending on the scope of job and type of speaker.
Cook states that the price of a subwoofer can operate as low as $37. Columbus Car Audio & Accessories sells a subewoofer bundle that includes an amplifier and a enclosure for about $ 299.
To get a set of automobile speakers, Columbus Car Audio & Accessories begin prices at $39, with an average price tag of about $70 for setup. Adding an anti-vibrator into a set of speakers prices an additional $25.
Nevitt, meanwhile, fees as little as $99 to get a set of "some good speakers." The price of one hour of installion, that is typically how long it takes to put in a set of speakers, is 67.
However, most customers spend far more.
"Paying a total amount of 800 to $1000 isn't from this world of possibility," Nevitt states. "A price somewhere in the center could be $400 or $500."
Cook says several vehicle speaker technicians began with DIY projects and adds there is nothing wrong with trying to set up car speakers all on your own. But you are going to want the correct tools for your job along with just a little understand. Installing speakers requires carrying out your car door.
See Also: https://www.scoop.it/t/how-to-choose-best-car-speakers-6x9-inch-6-5-inch-6x8-inch-4-inch
Choosing a professional to set up speakers ensures that the job is done correctly.
"If you do it yourself, then you might wind up breaking something. That is some thing we do everyday. I am not planning to inform you we will not violate something. But we will look after it if we perform. We all do so with being honest and up front with people."
If you are getting speakers set up, experts say to expect to place an appointment to the setup. …
DP ($$$ aside), GC, and Grasshopper. Arthur’s original question is very important
and the exact question (and hopefully answer) I was hoping to find on a
forum.
“How to take intelligent 3D parametric generative design models (scripting, etc.) into 2D documents?" Or, deliver the 3D design for evaluation, bid, construction, etc.
I am intrigued by Jon’s comments in the same thread and would like to know how I can learn more about the process (and
pitfalls) of turning over a 3D digital generative models to a contractor/fabricator.
Are there any industry guidelines established I could use as a reference to guide our firm through this type of uncharted territory?
Arthur’s question is very reminiscent of 10 years ago when I was frustrated with the amount of time spent on the development of a 3D model design (physical and/or virtual) only to have to wipe the table clean and start the process all over again in 2D in order to document the project for delivery. From this I jumped head first into BIM and Revit, vowing never to go back to unintelligent 2D line work. I am now working on Bentley software (v8i: Microstation and Bentley Architecture) with the access and desire to venture into Generative Components. I am very intrigued by Rhino/Grasshopper primarily with the apparent ease of use and available resources assisting in the learning process – something not really available with Bentley.
In hindsight, as I am doing my software research I think the current use of Revit and BA (Bentley Architecture) are more of a “bridge”
between the past (decades of digital 2D work, i.e. AutoCAD) and where hopefully
we all will be someday in the near future (100% 3D modeling, i.e. Digital
Project??). Without having the experience
it would appear that DP/CATIA (PLM software) are closer to this than any other
type of software. As complicated as the
industry standards are for the automobile and airline industry, I feel we
(architectural industry and others) are heading in a similar direction with
total understanding (PLM/ Evidence Based Design) of a design (a whole other topic). If anything I think the market will begin to
demand it sooner or later.
Gehry (DP) article NY Times:
http://www.nytimes.com/2009/02/11/business/11gehry.html
I know these type of broad discussions (software vs. software) can be blown out of proportion on forums, but I am would like to read
the pulse of those who are already in the trenches (using Grasshopper, CATIA, Digital Project, Generative Components, others??) and hear your thoughts. Just as valuable would be other threads,
industry articles/reviews of 3D parametric generative design software.
Thanks,
Boyd…
.
Things have been working swimmingly in many areas of the plugin, but one particular problem has been tough to solve. I have two components that are trying to read/write to the same memory at the same time, causing Rhino exceptions and crashes.
The conflicts appear to be happening between two components -- one is a "Layer Events Listener" that reports essentially what type of layer event just happened. The other is a "Set Layer Visibility" component that toggles the visibility of a list of layers.
The code:
public class LayerTools_LayerEventsListener : GH_Component { /// <summary> /// Initializes a new instance of the LayerTools_LayerListener class. /// </summary> public LayerTools_LayerEventsListener() : base("Layer Events Listener", "Layer Listener", "Get granular information about the layer events happening in the Rhino document.", "Squirrel", "Layer Tools") { }
/// <summary> /// Registers all the input parameters for this component. /// </summary> protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) { pManager.AddBooleanParameter("Active", "A", "Set to true to listen to layer events in the Rhino document.", GH_ParamAccess.item, false); pManager.AddTextParameter("Exclusions", "E", "Provide a list of exclusions to stop reading specific events (Added, Deleted, Moved, Renamed, Locked, Visibility, Color, Active).", GH_ParamAccess.list); pManager[1].Optional = true; }
/// <summary> /// Registers all the output parameters for this component. /// </summary> protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.AddBooleanParameter("Initialized", "I", "Whether the listener changed from passive to active.", GH_ParamAccess.item); pManager.AddTextParameter("Document Name", "doc", "Name of the Rhino document that is changing.", GH_ParamAccess.item); pManager.AddTextParameter("Layer Path", "path", "Path of the modifed layer.", GH_ParamAccess.item); pManager.AddIntegerParameter("Layer Index", "ID", "Index of the modified layer.", GH_ParamAccess.item); pManager.AddIntegerParameter("Sort Index", "SID", "Sort index of the modified layer.", GH_ParamAccess.item); pManager.AddTextParameter("Event Type", "T", "Type of the modification.", GH_ParamAccess.item); pManager.AddBooleanParameter("Added", "A", "If the layer has been added.", GH_ParamAccess.item); pManager.AddBooleanParameter("Deleted", "D", "If the layer has been deleted.", GH_ParamAccess.item); pManager.AddBooleanParameter("Moved", "M", "If the layer has been moved.", GH_ParamAccess.item); pManager.AddBooleanParameter("Renamed", "R", "If the layer has been renamed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Locked", "L", "If the layer locked setting has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Visibility", "V", "If the layer's visibility has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Color", "C", "If the layer's color has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Active", "Act", "If the active layer has changed.", GH_ParamAccess.item); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { bool active = false; List<string> exclusions = new List<string>();
DA.GetData(0, ref active); DA.GetDataList(1, exclusions);
RhinoDoc thisDoc = null;
bool initialize = false;
string dName = null; string activePath = null; int layerIndex = -1; int sortIndex = -1; string eventType = null; bool added = false; bool deleted = false; bool moved = false; bool renamed = false; bool locked = false; bool visibility = false; bool color = false; bool current = false;
if (active) { thisDoc = RhinoDoc.ActiveDoc;
initialize = (!previouslyActive) ? true : false;
RhinoDoc.LayerTableEvent -= RhinoDoc_LayerTableEvent; RhinoDoc.LayerTableEvent += RhinoDoc_LayerTableEvent; previouslyActive = true;
} else {
RhinoDoc.LayerTableEvent -= RhinoDoc_LayerTableEvent; previouslyActive = false; }
if (ev != null) { dName = ev.Document.Name; layerIndex = ev.LayerIndex; eventType = ev.EventType.ToString();
if (!exclusions.Contains("Active")) { if (ev.EventType.ToString() == "Current") { // active layer has just been changed current = true; }
}
if (!exclusions.Contains("Moved")) { if (ev.EventType.ToString() == "Sorted") { // active layer has just been changed moved = true; }
}
if (!exclusions.Contains("Added")) { if (ev.EventType.ToString() == "Added") { // layer has just been added activePath = ev.NewState.FullPath; added = true; }
}
if (!exclusions.Contains("Active")) { if (ev.EventType.ToString() == "Deleted") { // layer has just been added
deleted = true; } }
if (ev.EventType.ToString() == "Modified") { // layer has been modified activePath = ev.NewState.FullPath;
//skip sortindex eventType = ev.EventType.ToString();
if (ev.OldState != null && ev.NewState != null) { if (!exclusions.Contains("Locked")) { if (ev.OldState.IsLocked != ev.NewState.IsLocked) locked = true;
} if (!exclusions.Contains("Visibility")) { if (ev.OldState.IsVisible != ev.NewState.IsVisible) visibility = true; }
if (!exclusions.Contains("Moved")) { if (ev.OldState.ParentLayerId != ev.NewState.ParentLayerId) moved = true; }
//if (ev.OldState.SortIndex != ev.NewState.SortIndex) moved = true; if (!exclusions.Contains("Renamed")) { if (ev.OldState.Name != ev.NewState.Name) renamed = true; }
if (!exclusions.Contains("Color")) { if (ev.OldState.Color != ev.NewState.Color) color = true; } }
} }
DA.SetData(0, initialize); DA.SetData(1, dName); DA.SetData(2, activePath); DA.SetData(3, layerIndex); DA.SetData(4, sortIndex); DA.SetData(5, eventType); DA.SetData(6, added); DA.SetData(7, deleted); DA.SetData(8, moved); DA.SetData(9, renamed); DA.SetData(10, locked); DA.SetData(11, visibility); DA.SetData(12, color); DA.SetData(13, current);
}
static bool previouslyActive = false; Rhino.DocObjects.Tables.LayerTableEventArgs ev = null;
void RhinoDoc_LayerTableEvent(object sender, Rhino.DocObjects.Tables.LayerTableEventArgs e) { ev = e;this.ExpireSolution(true); }
And for the layer visibility component:
public LayerTools_SetActiveLayer() : base("Set Active Layer", "SetActiveLayer", "Set the active layer in the Rhino document.", "Squirrel", "Layer Tools") { }
/// <summary> /// Registers all the input parameters for this component. /// </summary> protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) { pManager.AddBooleanParameter("Active", "A", "Set to true to change the active layer in Rhino.", GH_ParamAccess.item, false); pManager.AddTextParameter("Path", "P", "Full path of the layer to be activated.", GH_ParamAccess.item); }
/// <summary> /// Registers all the output parameters for this component. /// </summary> protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.AddIntegerParameter("Layer ID", "ID", "Index of layer that has been activated.", GH_ParamAccess.item); pManager.AddBooleanParameter("Status", "St", "True when the layer has been activated.", GH_ParamAccess.item); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { bool active = false; string path = "";
if (!DA.GetData(0, ref active)) return; if (!DA.GetData(1, ref path)) return;
int layer_index = -1; bool status = false;
if (path != null) {
Rhino.RhinoDoc doc = Rhino.RhinoDoc.ActiveDoc; Rhino.DocObjects.Tables.LayerTable layertable = doc.Layers;
layer_index = layertable.FindByFullPath(path, true);
if (layer_index > 0) { // if exists RhinoDoc.ActiveDoc.Layers.SetCurrentLayerIndex(layer_index, true); status = true; } }
DA.SetData(0, layer_index); DA.SetData(1, status); }
Now originally I was getting exceptions when changing multiple layers' visibility properties, which would cause the Event Listener to fire and try to read the Visibility property before the memory has been released by the Set Layer Visibility component. That led me to add an "Exceptions" input, that would allow me to disable the reading of Visibility events at the source in the Layer Events listener. That helped me manage about 95% of the crashes I was getting, but I still get strange crashes in other event properties, even when that property shouldn't be affected. For instance, I am getting a crash here on the Name property in the event from the delegate function, even though I am only changing Visibility at any one time:
I have a few ideas but they all seem pretty hacky. One is to try to set a flag that is readable by any component in the plugin -- so that the event listener can see if a "set" component is currently running and abort before causing an exception. The other is creating a delay in the event listener, somthing like 200ms, to allow any set components to finish what they are doing before reading the event. Neither seems super ideal.
Any ideas?
Thanks,
Marc
…