he grouping of the sliders on the remote control panel.
4. Separate viewport(look at picture)
5. Cluster editor new wish
My version grasshopper 0.8.0004
Best Regards,Valentin
Kiev, Ukraine
…
he Summer in the City program, part of the Portland School of Architecture and Allied Arts (an extension to University of Oregon).
Using both Grasshopper and the Firefly plug-in, this workshop will focus on the design of innovative facade prototypes that are configurable, sensate, and active. Students will become familiar with the terminology used in interactive facade design including an overview of hardware (ie.sensors, actuators, and programmable microcontrollers) as well as software interfaces terminology. We'll learn new prototyping techniques and develop digital and physical models which can respond to a plurality of environmental and user driven forces. This workshop will take a hands-on approach, and you will walk away with the ability to build your own custom electronic circuits (using the Arduino), as well as create interactive simulations and models.
This course will primarily focus on physical computing techniques. Unfortunately, given the time constraints of the workshop, I will not be able to provide an extensive overview of the Grasshopper interface (it is suggested that participants have some familiarity with the Rhino/Grasshopper environment). There are many great online resources to get you up to speed relatively quickly if you are new to this software. This is a good place to start.
The course will be held at the School of Architecture and Allied Arts in Portland, OR. The date/times of the workshop are as follows:
Friday July 19, 5:00-7:50 P.M.
Saturday July 20, 9:00 A.M.-3:50 P.M.
Sunday July 21, 1:00-3:50 P.M.
If you are a designer, architect, or anyone who is interested in learning about the digital tools and technology trends that are revolutionizing design today, this workshop is for you. Make sure to click here to find out more about registration and enrollment in this exciting new workshop.…
le] demo):
1. A transformation Matrix is a 4*4 collection of 16 values that "deform" 3d things according the values in the cells. The orthodox way is to deploy "cells" left to right and top to bottom. Rhino does the opposite (why?) hence we need the transpose method.
2. Since "translate" and "perspective" are "symmetrical" the transpose boolean toggle (within the C#) "flips" rows with columns ... so we get perspective or move.
3. When in perspective "mode" the vanishing points are computed internally within a min/max limit (per X/Y/Z axis) thus avoiding the usual havoc with "extreme" perspective angles (very common "glitz" in pretty much every CAD app - CATIA excluded). Vanishing points (and limits) are oriented with respect the pos/neg value of a given control slider.
Note: slider values are percentages between min/max (mode: perspective) and/or actual values*100 (mode: move).
4.In order to start mastering the whole thing: don't change anything: just play with these 4 sliders selected:
5. The 123 sardine cans challenge: even with DeusExMachine = true (see inside C#: that one redirects the transformation per BrepFace and then joins the breps instead of applying it on a brep basis)... odd things (and/or invalid breps) occur ... thus what is required in order to make things working 100% ??.
he, he
best, Lord of Darkness …
find my initial files, reports and errors (Running E+ simulation on the initial setup took hours and ended up with numerous errors)
I got a number of questions and would appreciate if you could answer them:
1- I have duplicated zones using "Honeybee Move". Is this the correct way to duplicate zones and if yes, should I rename all surfaces afterwards? I have renamed zones but not surfaces (The tower has 40 floors = 10 x typical group of 4 floors)
2- Should I convert all curvilinear objects to faceted geometry (or only windows and window-walls should be flat)?
3- In the next stage, I will add a second skin as the outer facade. Spiral structural elements (insulated thermal mass) are between interior and exterior areas, partly exposed to the sun. Should I split both interior and exterior zones to subtract these elements, and then solve the adjacencies?
4- To simplify the procedure and make it faster, I may simulate only 4 floors. Is it possible to force-hide the top roof and the lowest floor from the sun and other environmental factors? If yes, how? and do you know how much accuracy in the results would be lost in this case? 5- The outer skin would be all in glass, therefore in reality, the direct sun will affect the inner skin and the structural elements. I read somewhere that in HB+E+ simulations, direct sun turns to diffuse after passing the first layer of glass. Is that true? If yes, how can I make the inner skin exposed to direct sun in the simulation? Thank you very much for your time.
Best,
Aryan
…
when the trimmed shapes (red) are small enough, they just dissapear.
Then, the main shape (green) appears again, but as a trimmed shape (red).
I tested it with other elements, like Solid Difference. It performs pretty well, but I just need the trimmed shapes (red) that are above the trimming shape (blue), and with Solid Difference, the collision also happens inside the trimming shape (blue), and that´s not what I am looking for.
Attached some pictures of what I mean. I hope I made myself clear.
Any suggestions?.
Thanks a lot!
1- Good performance
2- Good performance (Without trimming shape)
3- Left side shows the cut on the main shape, but fail to show the trimmed shape (red)
4- Same on the right side
5- It shows everything but in red colour, as a trimmed shape
…
t sure about my decision.
Let's take a look at the method <createPopulation>:
public static List<List<Point3d>> createPopulation(List<Point3d> cP, int populationCount)
{
List<List<Point3d>> Population = new List<List<Point3d>>(); // 1
for(int i = 0; i < populationCount; i++) //2
{
List<Point3d> individual = cP.ToList(); // 3
Population.Add(individual); // 4
System.Security.Cryptography.RNGCryptoServiceProvider provider = new System.Security.Cryptography.RNGCryptoServiceProvider();
int n = Population[i].Count;
while (n > 0)
{
byte[] box = new byte[1];
do provider.GetBytes(box); // 5
while (!(box[0] < n * (Byte.MaxValue / n)));
int k = (box[0] % n);
n--;
Point3d value = Population[i][k];
Population[i][k] = Population[i][n];
Population[i][n] = value;
}
}
In my algorithm there are lots of declarations like: List<Point3d> = new List<Point3d>(); or Random r = new Random(); these are constant time O(1) right?
i = 0 executes once; i < populationCount executes (N+1) times; i++ N times
this executes M times? because every point needs to be added individually?
this one I don't really know; at msdn it is stated: If P:System.Collections.Generic.List`1.Count is less than P:System.Collections.Generic.List`1.Capacity, this method is an O(1) operation. If the capacity needs to be increased to accommodate the new element, this method becomes an O(n) operation, where n is P:System.Collections.Generic.List`1.Count. Shouldn't it be O(N), because I am adding every individual separately?
can't find any statements about this one either, I am guessing it should be of constant time O(1), because just one random number is being generated?
…
hat, in accordance with this stable release, I have posted an updated version of this outdoor microclimate map example to the same link:
http://hydrashare.github.io/hydra/viewer?owner=chriswmackey&fork=hydra_2&id=Outdoor_Microclimate_Map
1. You will see that, in the new file, I now have a single component that is able to turn a zone into a "ground zone" (similar to a plenum). To clarify, both the plenum and ground zone components set all of the loads of the zone to 0 (no internal heat gain). So this means that any of the characteristics of the default office program will be negated. From your comments, Grasshope, it seems that you understand that the reason why I have a ground zone defined in this model is to account for the variation in ground surface temperatures that can occur with different objects casting shade onto the ground. Therefore, the key property that defines this zone is the construction of the top surfaces, which is now changed based on a number that you input into the Ground Zone component.
2. You are correct in understanding the need for both "set zone construction" components in the old file. Because of the zone's position below the Rhino model origin, the walls and floor are defined as underground surfaces and so I need the extra "Set EP Ground Construction" component. Admittedly, the constructions on the underground surfaces should have a minimal effect on the modeling of the surface temperature above the zone (the roof construction is most important) but it made sense to me that results would be more accurate by setting all of the constructions of the zone to the ground material. The current Ground Zone component ensures that all surfaces of the zone are assigned the ground material construction. It also ensures that all walls and floor surfaces have a ground boundary condition regardless of where they sit in relation to the rhino model origin.
3. The distFromFlrOrSrf input can take either a number representing the distance from the floor of zones at which you would like to build a microclimate map or any surface on which you would like to see temperature variation. So the input is flexible and allow you to both build micro-climate maps quickly or take a longer time building them with more customization. For a visual of what you can do by inputting surfaces into this component, see this thermal animation of a section through a building that I designed for my thesis:
https://www.youtube.com/watch?v=WJz1Eojph8E&list=PLruLh1AdY-Sj3ehUTSfKa1IHPSiuJU52A&index=3
For an example of a file using a numerical input for the microclimate map, see here:
http://hydrashare.github.io/hydra/viewer?owner=chriswmackey&fork=hydra_2&id=Indoor_Microclimate_Map
4. The component has since been renamed (sometime in early July) to be called "Honeybee_Microclimate Map Analysis". Originally, I developed the component to help me understand thermal diversity within zones but realized after building it out that the same method could be used to give deeper understandings of the outdoor environment. So, at present, it can do both indoor and outdoor microclimate maps. The only shortcoming at present is that the outdoor microclimate map uses EnergyPlus's oversimplified means of accounting for outdoor wind (a simple wind profile that does nto account for obstructions). This shortcoming will be addressed once the first stable release of butterfly is out or I manage to work in components into LB that use the botlzman lattice particle collision method to approximate outdoor wind speeds. Other than this shortcoming, you can trust that all results you are getting from these components are to a high degree of accuracy (meaning that all air temperature and MRT values are accurate).
5. Thanks for pointing this out. This is a mistake in my labeling of the file names and I will fix this before the end of today. When you use the workflow with the PMV recipe, these values are actual PMV/PPD values. When you use the Adaptive comfort recipe, these values are "degrees from neutral temperature" and "Comfortable Or Not" values. When you use the workflow with the UTCI recipe, these values are also "degrees from neutral temperature" and "Comfortable Or Not" values but they are different for UTCI than they are for the adaptive model. Specifically, the neutral temperature and comfort zone for UTCI is defined to be the same as it is in this publication:
https://www.ipma.pt/en/enciclopedia/amb.atmosfera/index.bioclima/index.html?page=utci.xml
Hope this helps and let me know if you have any more questions,
-Chris…
t file** - ply file with just x,y,z locations. I got it from a 3d scanner. Here is how first few lines of file looks like - ply format ascii 1.0 comment VCGLIB generated element vertex 6183 property float x property float y property float z end_header -32.3271 -43.9859 11.5124 -32.0631 -43.983 11.4945 12.9266 -44.4913 28.2031 13.1701 -44.4918 28.2568 13.4138 -44.4892 28.2531 13.6581 -44.4834 28.1941 13.9012 -44.4851 28.2684 ... ... ... In case you need the data - please email me on **nisha.m234@gmail.com**. **Algorithm:** I am trying to find principal curvatures for extracting the ridges and valleys. The steps I am following is: 1. Take a point x 2. Find its k nearest neighbors. I used k from 3 to 20. 3. average the k nearest neighbors => gives (_x, _y, _z) 4. compute covariance matrix 5. Now I take eigen values and eigen vectors of this covariance matrix 6. I get u, v and n here from eigen vectors. u is a vector corresponding to largest eigen value v corresponding to 2nd largest n is 3rd smallest vector corresponding to smallest eigen value 7. Then for transforming the point(x,y,z) I compute matrix T T = [ui ] [u ] [x - _x] [vi ] = [v ] x [y - _y] [ni ] [n ] [z - _z] 8. for each i of the k nearest neighbors:<br> [ n1 ] [u1*u1 u1*v1 v1*v1] [ a ]<br> [ n2 ] = [u2*u2 u2*v2 v2*v2] [ b ] <br> [... ] [ ... ... ... ] [ c ] <br> [ nk ] [uk*uk uk*vk vk*vk]<br> Solve this for a, b and c with least squares 9. this equations will give me a,b,c 10. now I compute eigen values of matrix [a b b a ] 11. This will give me 2 eigen values. one is Kmin and another Kmax. **My Problem:** The output is no where close to finding the correct Ridges and Valleys. I am totally Stuck and frustrated. I am not sure where exactly I am getting it wrong. I think the normal's are not computed correctly. But I am not sure. I am very new to graphics programming and so this maths, normals, shaders go way above my head. Any help will be appreciated. **PLEASE PLEASE HELP!!** **Resources:** I am using Visual Studio 2010 + Eigen Library + ANN Library. **Other Options used** I tried using MeshLab. I used ball pivoting triangles remeshing in MeshLab and then applied the polkadot3d shader. If correctly identifies the ridges and valleys. But I am not able to code it. **My Function:** //the function outputs to ply file void getEigen() { int nPts; // actual number of data points ANNpointArray dataPts; // data points ANNpoint queryPt; // query point ANNidxArray nnIdx;// near neighbor indices ANNdistArray dists; // near neighbor distances ANNkd_tree* kdTree; // search structure //for k = 25 and esp = 2, seems to got few ridges queryPt = annAllocPt(dim); // allocate query point dataPts = annAllocPts(maxPts, dim); // allocate data points nnIdx = new ANNidx[k]; // allocate near neigh indices dists = new ANNdist[k]; // allocate near neighbor dists nPts = 0; // read data points ifstream dataStream; dataStream.open(inputFile, ios::in);// open data file dataIn = &dataStream; ifstream queryStream; queryStream.open("input/query.
pts", ios::in);// open data file queryIn = &queryStream; while (nPts < maxPts && readPt(*dataIn, dataPts[nPts])) nPts++; kdTree = new ANNkd_tree( // build search structure dataPts, // the data points nPts, // number of points dim); // dimension of space while (readPt(*queryIn, queryPt)) // read query points { kdTree->annkSearch( // search queryPt, // query point k, // number of near neighbors nnIdx, // nearest neighbors (returned) dists, // distance (returned) eps); // error bound double x = queryPt[0]; double y = queryPt[1]; double z = queryPt[2]; double _x = 0.0; double _y = 0.0; double _z = 0.0; #pragma region Compute covariance matrix for (int i = 0; i < k; i++) { _x += dataPts[nnIdx[i]][0]; _y += dataPts[nnIdx[i]][1]; _z += dataPts[nnIdx[i]][2]; } _x = _x/k; _y = _y/k; _z = _z/k; double A[3][3] = {0,0,0,0,0,0,0,0,0}; for (int i = 0; i < k; i++) { double X = dataPts[nnIdx[i]][0]; double Y = dataPts[nnIdx[i]][1]; double Z = dataPts[nnIdx[i]][2]; A[0][0] += (X-_x) * (X-_x); A[0][1] += (X-_x) * (Y-_y); A[0][2] += (X-_x) * (Z-_z); A[1][0] += (Y-_y) * (X-_x); A[1][1] += (Y-_y) * (Y-_y); A[1][2] += (Y-_y) * (Z-_z); A[2][0] += (Z-_z) * (X-_x); A[2][1] += (Z-_z) * (Y-_y); A[2][2] += (Z-_z) * (Z-_z); } MatrixXd C(3,3); C <<A[0][0]/k, A[0][1]/k, A[0][2]/k, A[1][0]/k, A[1][1]/k, A[1][2]/k, A[2][0]/k, A[2][1]/k, A[2][2]/k; #pragma endregion EigenSolver<MatrixXd> es(C); MatrixXd Eval = es.eigenvalues().real().asDiagonal(); MatrixXd Evec = es.eigenvectors().real(); MatrixXd u,v,n; double a = Eval.row(0).col(0).value(); double b = Eval.row(1).col(1).value(); double c = Eval.row(2).col(2).value(); #pragma region SET U V N if(a>b && a>c) { u = Evec.row(0); if(b>c) { v = Eval.row(1); n = Eval.row(2);} else { v = Eval.row(2); n = Eval.row(1);} } else if(b>a && b>c) { u = Evec.row(1); if(a>c) { v = Eval.row(0); n = Eval.row(2);} else { v = Eval.row(2); n = Eval.row(0);} } else { u = Eval.row(2); if(a>b) { v = Eval.row(0); n = Eval.row(1);} else { v = Eval.row(1); n = Eval.row(0);} } #pragma endregion MatrixXd O(3,3); O <<u, v, n; MatrixXd UV(k,3); VectorXd N(k,1); for( int i=0; i<k; i++) { double x = dataPts[nnIdx[i]][0];; double y = dataPts[nnIdx[i]][1];; double z = dataPts[nnIdx[i]][2];; MatrixXd X(3,1); X << x-_x, y-_y, z-_z; MatrixXd T = O * X; double ui = T.row(0).col(0).value(); double vi = T.row(1).col(0).value(); double ni = T.row(2).col(0).value(); UV.row(i) << ui * ui, ui * vi, vi * vi; N.row(i) << ni; } Vector3d S = UV.colPivHouseholderQr().solve(N); MatrixXd II(2,2); II << S.row(0).value(), S.row(1).value(), S.row(1).value(), S.row(2).value(); EigenSolver<MatrixXd> es2(II); MatrixXd Eval2 = es2.eigenvalues().real().asDiagonal(); MatrixXd Evec2 = es2.eigenvectors().real(); double kmin, kmax; if(Eval2.row(0).col(0).value() < Eval2.row(1).col(1).value()) { kmin = Eval2.row(0).col(0).value(); kmax = Eval2.row(1).col(1).value(); } else { kmax = Eval2.row(0).col(0).value(); kmin = Eval2.row(1).col(1).value(); } double thresh = 0.0020078; if (kmin < thresh && kmax > thresh ) cout << x << " " << y << " " << z << " " << 255 << " " << 0 << " " << 0 << endl; else cout << x << " " << y << " " << z << " " << 255 << " " << 255 << " " << 255 << endl; } delete [] nnIdx; delete [] dists; delete kdTree; annClose(); } Thanks, NISHA…
ange’ for its 2016 cycle, as a starting point to investigate principles of natural formation processes and interpret them as innovative architectonic spaces. These concepts are carefully interwoven with spatial, performance-based, and structural criteria in order to create full-scale working prototypes.
The three-week long programme is formulated as a two-phase process. During the two-week initial phase, participants benefit from the unique atmosphere and facilities of AA’s London home. The second phase, lasting for a week, shifts to AA’s woodland site in Hooke Park and revolves around the robotic fabrication and assembly of a full-scale architectural intervention.
Prominent Features of the programme:
• Teaching team: Participants engage in an active learning environment where the large tutor to student ratio (5:1) allows for personalized tutorials and debates.
• Facilities: AA Digital Prototyping Lab (DPL) offers laser cutting, CNC milling, and 3d printing facilities. The facilities at AA Hooke Park allow for the fabrication of one-to-one scale prototypes with a 3-axis CNC router, various woodworking power tools, and robotic fabrication.
• Computational skills: The toolset of Summer DLAB includes but is not limited to Rhinoceros, Processing, Grasshopper, and various analysis tools.
• Theoretical understanding: The dissemination of fundamental design techniques and relevant critical thinking methodologies through theoretical sessions and seminars forms one of the major goals of Summer DLAB.
• Professional awareness: Participants ranging from 2nd year students to PhD candidates and full-time professionals experience a highly-focused collaborative educational model which promotes research-based design and making.
• Robotic Fabrication: According to the specific agenda of each year, scaled working models are produced via advanced digital machining tools, followed by the fabrication of a one-to-one scale prototype with the Kuka KR150 robot.
• Lecture series: Taking advantage of its unique location, London, Summer DLAB creates a vibrant atmosphere with its intense lecture programme.
Eligibility: The workshop is open to architecture and design students and professionals worldwide.
Accreditation: Participants receive the AA Visiting School Certificate with the completion of the Programme.
Applications: The AA Visiting School requires a fee of £1900 per participant, which includes a £60 Visiting Membership fee. A deposit of £381 is required when registering with the online form. The deadline for applications is 11 July 2016. No portfolio or CV is required. Online application link:
https://www.aaschool.ac.uk/STUDY/ONLINEAPPLICATION/visitingApplication.php?schoolID=392
Return train tickets between London-Hooke Park, accommodation & food in Hooke Park, and materials from Digital Prototyping Lab (DPL) are included in the fees.
For inquiries, please contact:
elif.erdine@aaschool.ac.uk (Programme Director)
alexandros.kallegias@aaschool.ac.uk (Programme Director)
…