onstrates the following:
1. The definition's functionality employing HumanUI for the custom user interface.
2. Color based segmentation in manual and auto modes.
3. The evaluation of the definition's ability to handle different point cloud data sets.
This definition performs color based segmentation in two modes.
A manual mode, that implements the Delta-E CIE 2000 color difference formula, for targeted feature detection. An auto mode, that employs a simple RGB Color Range algorithm for quicker preliminary results.
RGB to XYZ to CIELab conversion and Delta-E scripts were based on Colormine's project code from github. Results have been compared and verified with the results of http://colormine.org/color-converter and http://colormine.org/delta-e-calculator/Cie2000.
Each stored class is charted and can be accessed through the UI, as shown at 2:30, where Delta-E CIE 2000, in CieLab color space, output results were found to be in perceptive conformity with human eyes, far superior to the preliminary RGB implementation.
Initial definition versions could process highly subsampled clouds in acceptable timings. Further research showed that employing the multithread processing of Volvox components, bundling the Delta E formula with the RGB to CIE lab color conversion script, per color segmentation calculations for a one million points point cloud would go down from 23 (c# script component) and 8 (vb script component) seconds to approx. 1 second (volvox script cloud component), thus allowing the segmentation of less subsampled point clouds.
I would like to thank Heumann A. and Zwierzycki M. who provided direct support with HumanUI and Volvox. Also Grasshopper3d forum users Maher S. and Segeren P., who contributed with Rhino viewport manipulation scripts.
More on Volvox:
http://papers.cumincad.org/cgi-bin/works/Show?_id=ecaade2016_171&sort=DEFAULT&search=ecaade%20volvox&hits=2629
http://www.food4rhino.com/app/volvox
http://duraark.eu/
HumanUI:
http://www.food4rhino.com/app/human-ui?page=1&ufh=&etx=
ColorMine:
https://github.com/THEjoezack/ColorMine…
complicated than it seems as I have an event and a subscriber method receiving data from a serial port.
In the code below, the strings received within myReceivedLines appear when connecting with the serial port (when connecttodevice is true). However they disapear when I launch another command (when homeallis true).
As you recommended in your reply, I have added the field called myReceivedLineswithin the class so that I could use the method String.Add() to all the feedback received and commands sent.
Why does the feedback dispear when a command is sent? Is the string going to myReceivedLine disappearing because they happen within a subscriber method or is it related to the DA.SetDataList() method used to assign myReceivedLinesto the output?
Many thanks!
public class SendToPrintComponent : GH_Component { //Fields List<string> myReceivedLines = new List<string>(); SerialPort port; //subscriber method for the port.DataReceived Event private void DataReceivedHandler(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; while (sp.BytesToRead > 0) { try { myReceivedLines.Add(sp.ReadLine()); } catch (TimeoutException) { break; } } } protected override void SolveInstance(IGH_DataAccess DA) { //Opening the port if (port == null) { string selectedportname = default(string); DA.GetData(1, ref selectedportname); int selectedbaudrate = default(int); DA.GetData(2, ref selectedbaudrate); //Assigning an object to the field within the SolveInstance method() port = new SerialPort(selectedportname, selectedbaudrate, Parity.None, 8, StopBits.One); //Enables the data terminal ready (dtr) signal during serial communication (handshaking) port.DtrEnable = true; port.WriteTimeout = 500; port.ReadTimeout = 500; } //Event Handling Method bool connecttodevice = default(bool); DA.GetData(3, ref connecttodevice); if (connecttodevice == true) { if (!port.IsOpen) { port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); DA.SetDataList(0, myReceivedLines); port.Open(); } } else if (port.IsOpen) { port.DataReceived -= new SerialDataReceivedEventHandler(DataReceivedHandler); port.Close(); } if (port.IsOpen) { DA.SetData(1, "Port Open"); } //If the port is open do all the rest if (port.IsOpen) { bool homeall = default(bool); DA.GetData(5, ref homeall); //Home all sends all the axis to the origin if (homeall == true) { port.Write("G28" + "\n"); myReceivedLines.Add("G28" + "\n"); DA.SetDataList(2, myReceivedLines); } } else { DA.SetData(1, "Port Closed"); } }}…
na cubierta o una estructura sigue en pie; presentar el router cnc en el evento depende del ejercicio práctico, para mayores informes no duden en escribir a luzyextura@gmail.com o a las oficinas de Bishon en Querétaro
_______________________________________________________
Workshop de arquitectura paramétrica mediante procesos digitales.
El temario incluye aspectos básicos y medios del modelado en Rhino, tanto de dibujo como de objetos en 3D, y las funciones de Grasshopper como una herramienta para el diseño paramétrico.
Al finalizar el curso, los asistentes serán capaces de manejar Rhinoceros y Grasshopper en un nivel medio, también comprenderán todas las herramientas básicas y el estilo de trabajo.
Además del contenido teórico se incluye un ejercicio práctico, que consiste en la producción de un modelo 3D, abarcando desde las ideas generadoras, el diseño, dibujo de piezas para su fabricación y construcción final.
El workshop tiene dos semanas de duración, con un horario de 8 am a 3 pm, el costo para estudiantes es de $4590, para la comunidad en general $4900. 35% descuento antes del 22 de julio
Informes bishion@mail.com, luzytextura@gmail.com.
Teléfono en Querétaro 4422 75 2863
Teléfono en la Ciudad de México 04455 4381 3302…
sent a 3D shape without any ambiguity. If the shape you're trying to convey falls outside the scope of existing standards, then it can't be done, but this is a problem of standards, not an intrinsic shortcoming of pencils.
[...] with the computer theoretically acting as a decision maker.
The computer makes no decisions on it's own. It's a fully deterministic machine, meaning that any output is the result of applying a set of rules to some pre-existing data. Humans make the rules. At no point can you blame the computer for coming up with a bad answer, it's always some human who is responsible.
[...] it seems to often be split between Computerization, and Computation.
I'm willing to concede there exist cases that are unambiguously one or the other, but there's a gradient in between these two extremes, they are not separate categories. If I draw a box by specifying the 8 corner points as XYZ coordinates then computation can be said not to be involved. If I draw a box by specifying 2 opposite corners then the computer has to compute the other 6 coordinates and we're already on our way towards the other extreme. If I draw a box by specifying a width, height and a required volume, more computation is needed. If I specify a box by a width, a volume and the requirement is doesn't cast too much shadow on some other shape, more computation is needed. At what point do we say "now it qualifies as computation/solving"?
--
David Rutten
david@mcneel.com…
Added by David Rutten at 7:22am on November 28, 2013
be due to memory issues, but I did see the run time go from, no kidding, 5-1/2 hours down to 1.5 minutes; as this logic simply removes duplicate curves in groups, and then runs it again to further remove duplicates, should not be missing any curves. I haven;t tested it extensively, but results were the same for a straight curve removal (5.5 hours) and the 'page swapped' method outlined (1.5 minutes). So called page swapped, as it is one of the old methods used by intel and others to manage memory on slow processors, from the 1970's.
This method also works to cure the "region union" bug, again coming up with an outline curve from your tree definition. Not only was it fast (45 seconds) it actually worked! on a large curve set (3,000 + curves).
Is it a generic method? Don't know. worked well in these two cases though, and is both 2 orders of magnitude faster, and embarrassingly idiot simple; so simply that I was actually not sure if I should show it, as I do not want the group to think I have the skills of an 8 year old (actually that used to be an insult; with today's kids, might be a compliment)
I am interested to hear if it work in other cases.
Oh! I left out the last line in the sequence, the last component should be a repeat of the duplicate lines command without partition the set so indeed not to miss any curves. Same for a 'region union" sequence
By the way, your scripts, tools and examples are fantastic! - I and others have used them as starting points for various projects.
here is the full sequence
…
Added by mark zirinsky at 9:03pm on October 22, 2017
esult".
Its about making radiant temperature map, but it gives some errors such as:
1. The length of data in the comfResultsMTX does not matech the number of faces in the viewFactorMesh.
1. Solution exception:index out of range: -2
Its just simple box building that simulation itself doesn't take long, and I've updated my HB and LB components and everything seems ok. But still having the problem. Since the components have major and minor changes I've managed to connect _comfResultsMtx to the read Comfort result component to do the simulation, however it has some other issues as well.
The components error message says
1. Failed to parse the result file. The csv file might not have existed when connected or the simulation did not run correctly.Try reconnecting the _resultfileAddress to this component or re-running your simulation.
So the question is how to achieve radiant temperature map? and could it be done in specific analysis period instead of annual cycle?
Best Regards. Awkweird. …
workshop setting. The workshops are open to the public. Register: http://2012.acadia.org/workshops.html Date: Sunday, Oct 21 (8:30am - 5:30pm) Workshop Location: CCA San Francisco
01. "ALGORITHMS & MATHEMATICS"
Instructors: Edmund Harriss with David Celento, Brian Lockyear Synopsis: This workshop will be collaboratively taught by both mathematicians and architects exploring what happens when "Form Follows Functions". (Grasshopper)
02. "5 AXIS ROBOTIC FABRICATION"
Instructors: Brandon Kruysman and Jonathan Proto (SCI-Arc) Synopsis: Instructors will be bringing their 5-axis Staubli TX60L robot up from the SCI-Arc Robot House. They will lead a hands-on workshop focused on its technical and creative applications. (Maya based)
03. "CASE STUDIES IN PARAMETRIC DESIGN"
Instructors: Andrew Kudless (Matsys) and Andrew Heumann (NBBJ) Synopsis: Case Studies in Parametric Design - The use of precedents in the design process has been driven by their transformative potential. (Grasshopper based)
04. "ROBOTIC PROTOTYPES"
Instructors: Michael Shiloh, Ripon DeLeon and Jason Kelly Johnson (Future Cities Lab) Synopsis: The Robotic Prototypes workshop will explore the use of Grasshopper, Firefly and Arduino as creative and technical tools in the design, simulation and prototyping of intelligent building skins.
05. "COMPUTATIONAL DESIGN STRATEGIES WITH DESIGNSCRIPT"
Synopsis: The objective of this workshop is to help participants develop appropriate design strategies using advanced computational tools based on the DesignScript language.
06. "PYTHON SCRIPTING WITH REVIT / VASARI"
Instructors: Nathan Miller (C.A.S.E.) Synopsis: The workshop will introduce users to Python-based automation and generative techniques for Conceptual Modeling in Revit and Vasari.
07. "GIS DRIVEN PARAMETRIC DESIGN"
Instructors: Sandoval, Faichney, de Monchaux (UC Berkeley) Synopsis: This workshop will introduce a design process that implements Finches and the LocalCode components, a suite of tools for working with GIS data in Rhino/Grasshopper.…
assume we want to format two numbers, one integer and a floating point value. The integer represents an index and it should appear inside square brackets, then we want the floating point number rounded to a maximum of 4 decimal places (but always using at least one decimal place, even if it's zero), and then, in parentheses a scientific notation representation using 8 decimal digits of the number.
So, assuming the index is 16 and the value is 47.280006208, what we are after is:
[16] 47.28 (4.72800062E+001)
To make this work, we need a formatting pattern that looks like:
[{0}] {1:0.0###} ({1:E8})
The square brackets, spaces and parenthesis are just part of the output, they have no meaning whilst formatting. Everything inside the curly brackets though will be replaced with a specific formatting of one of the values.
When using the Format component as shown above, the formatting pattern is just text data. The component knows that it is supposed to use the Format() function using the pattern text and whatever additional data is provided.
When you invoke the Format() method in an expression, you do need to make sure that the pattern is actually text:
So here the pattern needs to be encased in double quotes, otherwise it will be treated as code, rather than text.
You cannot use the formatting method in the internal expression of a number parameter, because this method returns text, whereas the number parameter is only capable of storing numbers. Any expression that you put into a number parameter had better return numbers as a result.…
e and i get it. If you have time check the attached papers we published a while ago in relation to the contribution of thermal mass in the reduction of temperature in residential buildings. See the nice contribution of the heavy TM or the lower one for light TM.
As for the solarHeatCapacity, your description (of the 50W) is derived on a 1 Facade/Floor ratio and fully glazed. The only way to reduce it is to increase the ratio (bigger facade area). Which is not recommended (energy losses), but this is a different issue. So, roughly, we can say that 50 is the lower value. If i have less glazing area this number will be higher (right?)
I want to define a value list of "architectural situations", so it is easy to explain and understand. One situation can be:
"Ratio facade/floor 1 & Fully glazed" = 50
"Ratio facade/floor 1 & Half glazed" = 75
"Ratio facade/floor 1.5 & Fully glazed" = 30
"Ratio facade/floor 1.5 & Half glazed" = 50
"Ratio facade/floor 0.75 & Fully glazed" = 70
"Ratio facade/floor 0.75 & Half glazed" = 90
Makes sense for you something like this?
I also defined a value list for the timeConstant like this:
Light Building (Mobile home) = 1Medium-light building (Cement tiles on floor) = 4Semi Heavy Building (Concrete floor + Tiles) = 8Heavy Building (Concrete floors/ceilings + Heavy external and internal walls) = 12
As for the first 5-10 cm effective TM in general my assumption is that you take half of the mass to your space and half to the space above/below you. Will be interesting to do a parametric study on just the thermal mass, uninsulated and insulated to see what the depth limits effectivity will be. Interested in doing such a study together? Can be a nice work even for publishing.
Thanks a lot ... again,
-A.…
will work slightly different from before. Sorry about breaking this, but it proved impossible to improve the selection logic with the fairly ambiguous notation that was implemented already.
Not every change is breaking though and I hope that most simple matching rules will work as before. There will be a McNeel webinar on Wednesday the 6th of November where I discuss the new selection rules (as well as path mapping syntax and relative offsets within one or more data trees). This will be a pretty hard-core webinar aimed at expert users. The event will be recorded so you can always go and watch it later. I figured I'd briefly explain the new selection rules on Ning before I release the update though.
-------------------------------------------------------------------------------
Imagine we have the following data tree, containing a bunch of textual characters:
{0;0} = [a,e,i,o,u,y] {0;1} = [ä,ë,ê,ï,î,ö,ô,õ,ü,û,ÿ,ý] {1;0} = [b,c,d,f,g,h,j,k,l,m,n,p,q,r,s,t,v,w,x,z] {1;1} = [ç,ĉ,č,ĝ,ř,š,ş,ž]
There are a total of four branches {0;0}, {0;1}, {1;0} and {1;1}. The first branch contains all the vowels that are part of the standard English alphabet. The second branch contains all non-standard vowels and branches three and four contain the standard and non-standard consonants respectively.
So what if we want to select from this tree only the standard vowels? Basically include everything in the first branch and disregard everything else. We can use the [Tree Split] component with a selection rule to achieve this:
{0;0}
This selection rule hard-codes the number zero in both tree path locations. It doesn't define an item index rule, so all items in {0;0} will be selected.
If we want all the vowels (both standard and non-standard), then we have several options:
{0;?} = select all branches that start with 0
{0;(0,1)} = select all branches that start with 0 and end in either 0 or 1
{0;(0 to 1)} = ......................................... and end in the range 0 to 1.
Conversely, selecting all standard vowels and consonants while disregarding all non-standard character can be achieved with rules as follows:
{?;0}
{(0,1);0}
{(0 to 1);0}
It is also possible to select items from each branch in addition to limiting the selection to specific branches. In this case another rule stated in square brackets needs to be appended:
{0;?}[0 to 2]
The above rule will select the first three vowels from the standard and the non-standard lists.
Basically, rules work in a very consistent way, but there are some syntax conventions you need to know. The first thing to realize is that every individual piece of data in a data-tree can be uniquely and unambiguously identified by a collection of integers. One integer describes its index within the branch and the others are used to identify the branch within the tree. As a result a rule for selection items always looks the same:
{A;B;C;...;Z}[i] where A, B, C, Z and i represent rules.
It's very similar to the Path Mapper syntax except it uses square brackets instead of parenthesis for the index (the Path Mapper will follow suit soon, but that won't be a breaking change). You always have to define the path selector rule in between curly brackets. You can supply any number of rules as long as you separate them with semi-colons.
The index rule is optional, but -when provided- it has to be encased in square brackets after the path selection rule(s).
The following rule notations are allowed:
* Any number of integers in a path
? Any single integer
6 Any specific integer
!6 Anything except a specific integer
(2,6,7) Any one of the specific integers in this group.
!(2,6,7) Anything except one of the integers in this group.
(2 to 20) Any integer in this range (including both 2 and 20).
!(2 to 20) Any integer outside this range.
(0,2,...) Any integer part of this infinite sequence. Sequences have to be at least two integers long, and every subsequent integer has to be bigger than the previous one (sorry, that may be a temporary limitation, don't know yet).
(0,2,...,48) Any integer part of this finite sequence. You can optionally provide a single sequence limit after the three dots.
!(3,5,...) Any integer not part of this infinite sequence. The sequence doesn't extend to the left, only towards the right. So this rule would select the numbers 0, 1, 2, 4, 6, 8, 10, 12 and all remaining even numbers.
!(7,10,21,...,425) Any integer not part of this finite sequence.
Furthermore, it is possible to combine two or more rules using the boolean and/or operators. If you want to select the first five items in every list of a datatree and also the items 7, 12 and 42, then the selection rule would look as follows:
{*}[(0 to 4) or (6,11,41)]
The asterisk allows you to include all branches, no matter what their paths looks like.
It is at present not possible to use the parenthesis to define rule precedence, rules are always evaluated from left to right. It is at present also not possible to use negative integers to identify items from the end of a list.
If you want to know more, join the Webinar on Wednesday!
--
David Rutten
david@mcneel.com
Seattle, WA…
Added by David Rutten at 8:57pm on November 3, 2013