the river Plate is an unexplored opportunity. The grid that configures the city’s urban tissue remains oblivious to its context, imposing a constant order. Its relationship with the river is one of mutual exclusion; as soon as the grid reaches the river it stops, but never modifies its nature. There is one happy exception to this condition – the northern riverside area of Buenos Aires called ‘Tigre’, which responds to the topography of the natural delta. In this workshop, projects will embrace the boundary between river and city as a means of managing alternative metropolitan ecosystems. By challenging the traditional relationship between architectural, urban and natural forces, students will propose new territorial organisations that develop both floating and rooted structures that are responsive to the nature of the delta. In this research workshop students have the opportunity to develop a range of computational techniques in order to explore alternative design opportunities. Week 1 Organised in teams, students will work with the articulation of the grid and the river. The goal is to produce several iterations analysing the potential transformation of the grid as it reaches the riverbank. This analysis will form the basis of an urban design proposal that establishes a new relationship between the city and the river. Design tutors, including Victor Orive, Arturo Revilla and professionals from the A A and other institutions, will provide digital tutorials and lectures on their own urban design research and projects. Week 2 During this phase we will address how such conditions affect discrete objects and/or a field of objects. The goal is to design a pavilion and study how a gradual change in field conditions will affect its size, porosity and orientation. This will unfold new opportunities to redefine the relationship between form and function.
Applications
The deadline for applications is 2 July 2012. All participants travelling from abroad are responsible for securing any visa required. After payment of fees, the AA can provide a letter confirming participation in the workshop. A portfolio or CV is not required, only the online application form and payment.
Fees
The AA Visiting School requires a fee of £695 per participant, which includes a £50 Visiting Membership. If you are already a member, the total fee will be reduced automatically by £50 by the online payment system. Fees are non refundable. Fees do not include flights. Accommodation during the workshop is not provided, but advice on accommodation options can be given. Students need to bring their own laptops, digital equipment and model making tools. Please ensure this equipment is covered by your own insurance as the AA takes no responsibility for items lost or stolen at the workshop.
Eligibility The workshop is open to architecture and design students and professionals worldwide.…
() Sub Main()
' user input
Dim intHowManyTrees : intHowManyTrees = Rhino.GetInteger("how many trees is a forest",20,1,50) Dim intHowManyGenerations : intHowManyGenerations = Rhino.GetInteger("how many generations is a tree?",6,1,10) Dim dblForestLength : dblForestLength = Rhino.GetReal("was is the desired length of your forest",50) Dim dblForestWidth : dblForestWidth = Rhino.GetReal("was is the desired width of your forest",50) Dim dblInitLength : dblInitLength = Rhino.GetReal("was is the desired length of the first main Branch?",10) Dim ang : ang = Rhino.GetReal("angle of rotation", 30, 1, 180) Dim scale : scale = Rhino.GetReal("scale of branch", 0.9) 'loop for number of generations i 'ReDim arrgenerations (Ubound (intHowManyGenerations)) Dim layer_0 : layer_0 = Rhino.AddLayer("0") Dim i For i=0 To intHowManyTrees Dim arrSeed : arrSeed = Array(Rnd*dblForestLength, Rnd*dblForestWidth,0) Dim strLine : strLine = Rhino.AddLine(Array (arrSeed(0), arrSeed (1), arrSeed (2)+Rnd*3), Array(arrSeed(0), arrSeed(1),arrSeed(2)+Rnd*dblInitLength+3))
Call Rhino.ObjectLayer (strLine, "0" ) Call Rhino.ObjectName (strLine, i) Next Dim j,vec ReDim arrbranch (intHowManyGenerations) For i=1 To intHowManyGenerations 'select the elements arrbranch (i) = Rhino.ObjectsByLayer (i-1) Dim strBranch For j=0 To Ubound(arrBranch(i)) strBranch = arrBranch(i)(j) Dim strParentName : strParentName = Rhino.ObjectName(strBranch) ' get start and end points Dim arrStartPt : arrStartPt = Rhino.CurveStartPoint(strBranch) Dim arrEndPt : arrEndPt = Rhino.CurveEndPoint(strBranch)
' get a vector between start and end vec = Rhino.VectorCreate(arrEndPt, arrStartPt) ''''' vec(x,y,z)
' scale vector vec = Rhino.VectorScale(vec, scale)
' rotate vectors Dim arrPlane : arrPlane = Rhino.CurvePerpFrame (strBranch, Rhino.CurveDomain(strBranch)(1))
Dim arrRotAxis Dim layer layer = Rhino.AddLayer ( i )
arrRotAxis = arrPlane(Int(Rnd*3)) Dim vec1 : vec1 = Rhino.VectorRotate(vec, ang, arrRotAxis) ' add the vector to the end point Dim newEndPt : newEndPt = Rhino.VectorAdd(arrEndPt, vec1)
Dim line1: line1 = Rhino.AddLine(arrEndPt, newEndPt) Call Rhino.ObjectLayer (line1, i) Call Rhino.ObjectName(line1, strParentName)
If rnd<0.8 Then arrRotAxis = arrPlane(Int(Rnd*3)) Dim vec2 : vec2 = Rhino.VectorRotate(vec, -ang, arrRotAxis) Dim newEndPt2 : newEndPt2 = Rhino.VectorAdd(arrEndPt, vec2)
Dim line2: line2 = Rhino.AddLine(arrEndPt, newEndPt2) Call Rhino.ObjectLayer (line2, i) Call Rhino.ObjectName(line2, strParentName) End If
If rnd<0.2 Then arrRotAxis = arrPlane(Int(Rnd*3)) Dim vec3 : vec3 = Rhino.VectorRotate(vec, ang*(rnd-0.5)*2, arrRotAxis) Dim newEndPt3 : newEndPt3 = Rhino.VectorAdd(arrEndPt, vec3)
Dim line3: line3 = Rhino.AddLine(arrEndPt, newEndPt3) Call Rhino.ObjectLayer (line3, i) Call Rhino.ObjectName(line3, strParentName) End If Next Next End Sub
Any kind of help would be highly appreciated…
r spatial studies farther down the road, but I digress; on to my Grasshopper script:
I've built a Grasshopper script that will display a point field for a given topography map (curves extracted from contour lines). The idea here is to display higher levels of density where the highest slopes are within a given topo map.
The file works, but I'm wondering if there is a simpler way of going about this, since my file contains so much redundant info (open the cluster "Pt:50" to see what I mean). My Grasshopper Kung-Fu skills aren't anywhere near expert yet, so I defer to the experts out there for a simpler solution. Here's my breakdown:
1. Start at curve start point, and find closest point within the group of curves.
2. Get distance to that closest point, and find second point along said curve at that distance.
3. Repeat process along curve starting at each new point at each new process.
Thanks in advance for any suggestions/comments!
Cheers,
cb…
of the roof is getting higher results than expected (for city at north hemisphere), and higher than the south side of the (vertical) roof, (that is abnormal for the latitude).
The expected results should be like that of PVGIS:
ORIENTATION
ANGLE
PVGIS
DIVA
N
22
649
824
S
22
970
860
FLAT
0
829
867
N
43
504
525
S
43
1020
873
N
90
278
233
S
90
781
707
Can anyone guess the reason, or did anyone face this problem in the past? what do you think I should change?
Attached you may find the .gh file and the climate data file.
Thank you very much for your time.…
ago Galapagos was finished. The only problem was that most of the results were 0 (kg). I also got some error messages from GSA. I think that is the bug you mentioned. When the sliders have some specific values, I get an error that GSA needs to shut down, but when I manually close GSA, the optimization continues. So I have to watch the progress, but that is no problem for me. Because I ran the optimization during the night, I didn't recognize any specific combinations of the number sliders. But I will keep an eye on it the next time and I will let you know.
I was thinking about adding a stiffness check, because that improve the results. I checked online and I found that the specific modulus is used for optimization purposes. So I have to divide the elastic modulus by the total weight of the structure, and this value needs to be maximized. But is this elastic modulus just the 2,1*10^5 N/mm2 of steel, or do I have to calculate this for every element by dividing the stress by the strain? I'm not sure how to apply this stiffness check..I looked for some example files, because you once posted on the geometry gym blogspot a truss optimization project. But in the added version of the file, no stiffness check was performed.
Best regards,
Stefan…
d of interpenetrating surfaces somewhere:
Now all links (except a possible single ball on the very end of odd numbered ball series) are four balls long, including the jostled ones. Without that step, those items simply don't appear in the output, leaving way too big of gaps to ignore, eventually leaving huge gaps at later stages of segment doubling:
So if I turn the jostling multiplication factor way down it should work imperceptibly:
Ta-dah! The jostling strategy WORKS! Granted, only in this special case where I know I'm dealing with adjacent pairs of worms along a curve, not generic objects arranged in space by some artist.
Now I just need to wrap the multiple Python script components I'm stringing together into one script.
How long does the full 2400 balls take, finally? It took 12 Python scripts that merge pairs, to achieve this breakdown: 2400 -> 1200 -> 600 -> 300 -> 150 -> 75 -> 38 -> 19 -> 9 -> 5 -> 3 -> 2 -> 1. Time was 2 minutes 50 seconds, so there is some extra struggle for 2X as many balls as 1200 that took 1 minute 20 seconds, but only ten more seconds.
…
Added by Nik Willmore at 9:06pm on February 17, 2016
.0004. [1 of 7] Writing simulation parameters...5. [2 of 6] No context surfaces...6. [3 of 6] Writing geometry...7. [4 of 6] Writing materials and constructions...8. [5 of 7] Writing schedules...9. [6 of 7] Writing loads and ideal air system...10. [7 of 7] Writing outputs...11. ...... idf file is successfully written to : c:\ladybug\unnamed\EnergyPlus\unnamed.idf12. 13. Analysis is running!...14. c:\ladybug\unnamed\EnergyPlus\eplusout.csv15. ......
Done! Read below for errors and warnings:
16. 17. Program Version,EnergyPlus, Version 8.2.7-777c1f8d79, YMD=2015.02.28 16:09,IDD_Version 8.2.718. 19. ** Warning ** IP: Note -- Some missing fields have been filled with defaults. See the audit output file for details.20. 21. ** Warning ** Version: in IDF="'8.2.7'" not the same as expected="8.2"22. 23. ** Warning ** ManageSizing: For a zone sizing run, there must be at least 1 Sizing:Zone input object. SimulationControl Zone Sizing option ignored.24. 25. ** Warning ** ManageSizing: For a plant sizing run, there must be at least 1 Sizing:Plant object input. SimulationControl Plant Sizing option ignored.26. 27. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=F73533B3C6894C67936B_GLZP_1228. 29. ** ~~~ ** Opening Surface creating error=F73533B3C6894C67936B_GLZP_12_GLZ_1230. 31. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=F73533B3C6894C67936B_GLZP_2532. 33. ** ~~~ ** Opening Surface creating error=F73533B3C6894C67936B_GLZP_25_GLZ_2534. 35. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=F73533B3C6894C67936B_GLZP_2836. 37. ** ~~~ ** Opening Surface creating error=F73533B3C6894C67936B_GLZP_28_GLZ_2838. 39. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_940. 41. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_9_GLZ_942. 43. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_1044. 45. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_10_GLZ_1046. 47. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_1148. 49. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_11_GLZ_1150. 51. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_1552. 53. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_15_GLZ_1554. 55. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_2456. 57. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_24_GLZ_2458. 59. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_2560. 61. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_25_GLZ_2562. 63. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_3064. 65. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_30_GLZ_3066. 67. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_3268. 69. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_32_GLZ_3270. 71. ** Severe ** GetHTSubSurfaceData: Surface Openings have too much area for base surface=4BDFD67E6D0E486796CC_GLZP_3472. 73. ** ~~~ ** Opening Surface creating error=4BDFD67E6D0E486796CC_GLZP_34_GLZ_3474. 75. ** Warning ** GetSurfaceData: Very small surface area[2.94495E-004], Surface=F73533B3C6894C67936B_GLZP_076. 77. ** Warning ** GetSurfaceData: Very small surface area[3.84753E-004], Surface=F73533B3C6894C67936B_GLZP_178. 79. ** Warning ** GetSurfaceData: Very small surface area[9.16905E-004], Surface=F73533B3C6894C67936B_GLZP_380. 81. ** Warning ** GetSurfaceData: Very small surface area[4.96186E-004], Surface=F73533B3C6894C67936B_GLZP_482. 83. ** Warning ** GetSurfaceData: Very small surface area[2.37373E-005], Surface=F73533B3C6894C67936B_GLZP_684. 85. ** Warning ** GetSurfaceData: Very small surface area[6.35824E-004], Surface=F73533B3C6894C67936B_GLZP_786. 87. ** Warning ** GetSurfaceData: Very small surface area[5.86549E-004], Surface=F73533B3C6894C67936B_GLZP_888. 89. ** Warning ** GetSurfaceData: Very small surface area[7.63765E-004], Surface=F73533B3C6894C67936B_GLZP_1090. 91. ** Severe ** GetSurfaceData: Zero or negative surface area[-8.09566E-004], Surface=F73533B3C6894C67936B_GLZP_1292. 93. ** Warning ** GetSurfaceData: Very small surface area[1.51701E-004], Surface=F73533B3C6894C67936B_GLZP_1394. 95. ** Warning ** GetSurfaceData: Very small surface area[9.29917E-004], Surface=F73533B3C6894C67936B_GLZP_1596. 97. ** Warning ** GetSurfaceData: Very small surface area[2.94451E-004], Surface=F73533B3C6894C67936B_GLZP_1698. 99. ** Warning ** GetSurfaceData: Very small surface area[8.03294E-004], Surface=F73533B3C6894C67936B_GLZP_17100. 101. ** Warning ** GetSurfaceData: Very small surface area[6.83026E-004], Surface=F73533B3C6894C67936B_GLZP_18102. 103. ** Warning ** GetSurfaceData: Very small surface area[9.29917E-004], Surface=F73533B3C6894C67936B_GLZP_20104. 105. ** Warning ** GetSurfaceData: Very small surface area[3.19851E-005], Surface=F73533B3C6894C67936B_GLZP_21106. 107. ** Warning ** GetSurfaceData: Very small surface area[7.63765E-004], Surface=F73533B3C6894C67936B_GLZP_23108. 109. ** Severe ** GetSurfaceData: Zero or negative surface area[-4.05899E-004], Surface=F73533B3C6894C67936B_GLZP_25110. 111. ** Warning ** GetSurfaceData: Very small surface area[6.35824E-004], Surface=F73533B3C6894C67936B_GLZP_27112. 113. ** Severe ** GetSurfaceData: Zero or negative surface area[-9.91146E-004], Surface=F73533B3C6894C67936B_GLZP_28114. 115. ** Warning ** GetSurfaceData: Very small surface area[2.70158E-004], Surface=F73533B3C6894C67936B_GLZP_29116. 117. ** Warning ** GetSurfaceData: Very small surface area[3.22781E-004], Surface=F73533B3C6894C67936B_GLZP_30118. 119. ** Warning ** GetSurfaceData: Very small surface area[4.67821E-004], Surface=F73533B3C6894C67936B_GLZP_33120. 121. ** Warning ** GetSurfaceData: Very small surface area[3.22737E-004], Surface=F73533B3C6894C67936B_GLZP_34122. 123. ** Warning ** GetSurfaceData: Very small surface area[2.65634E-004], Surface=4BDFD67E6D0E486796CC_GLZP_0124. 125. ** Warning ** GetSurfaceData: Very small surface area[4.70736E-004], Surface=4BDFD67E6D0E486796CC_GLZP_1126. 127. ** Warning ** GetSurfaceData: Very small surface area[3.42507E-004], Surface=4BDFD67E6D0E486796CC_GLZP_3128. 129. ** Warning ** GetSurfaceData: Very small surface area[5.89276E-004], Surface=4BDFD67E6D0E486796CC_GLZP_4130. 131. ** Warning ** GetSurfaceData: Very small surface area[1.91146E-004], Surface=4BDFD67E6D0E486796CC_GLZP_6132. 133. ** Warning ** GetSurfaceData: Very small surface area[9.71205E-004], Surface=4BDFD67E6D0E486796CC_GLZP_7134. 135. ** Warning ** GetSurfaceData: Very small surface area[4.34494E-004], Surface=4BDFD67E6D0E486796CC_GLZP_8136. 137. ** Severe ** GetSurfaceData: Zero or negative surface area[-3.60159E-004], Surface=4BDFD67E6D0E486796CC_GLZP_9138. 139. ** Severe ** GetSurfaceData: Zero or negative surface area[-1.11946E-004], Surface=4BDFD67E6D0E486796CC_GLZP_10140. 141. ** Severe ** GetSurfaceData: Zero or negative surface area[-3.41257E-004], Surface=4BDFD67E6D0E486796CC_GLZP_11142. 143. ** Severe ** GetSurfaceData: Zero or negative surface area[-8.21483E-005], Surface=4BDFD67E6D0E486796CC_GLZP_15144. 145. ** Warning ** GetSurfaceData: Very small surface area[2.65716E-004], Surface=4BDFD67E6D0E486796CC_GLZP_16146. 147. ** Warning ** GetSurfaceData: Very small surface area[4.84044E-004], Surface=4BDFD67E6D0E486796CC_GLZP_17148. 149. ** Warning ** GetSurfaceData: Very small surface area[7.12297E-004], Surface=4BDFD67E6D0E486796CC_GLZP_19150. 151. ** Warning ** GetSurfaceData: Very small surface area[6.14324E-004], Surface=4BDFD67E6D0E486796CC_GLZP_22152. 153. ** Warning ** GetSurfaceData: Very small surface area[8.88887E-004], Surface=4BDFD67E6D0E486796CC_GLZP_23154. 155. ** Severe ** GetSurfaceData: Zero or negative surface area[-9.89060E-004], Surface=4BDFD67E6D0E486796CC_GLZP_24156. 157. ** Severe ** GetSurfaceData: Zero or negative surface area[-1.14849E-003], Surface=4BDFD67E6D0E486796CC_GLZP_25158. 159. ** Warning ** GetSurfaceData: Very small surface area[4.00479E-004], Surface=4BDFD67E6D0E486796CC_GLZP_27160. 161. ** Warning ** GetSurfaceData: Very small surface area[6.63061E-005], Surface=4BDFD67E6D0E486796CC_GLZP_28162. 163. ** Warning ** GetSurfaceData: Very small surface area[1.09018E-004], Surface=4BDFD67E6D0E486796CC_GLZP_29164. 165. ** Severe ** GetSurfaceData: Zero or negative surface area[-2.49326E-005], Surface=4BDFD67E6D0E486796CC_GLZP_30166. 167. ** Severe ** GetSurfaceData: Zero or negative surface area[-3.17446E-004], Surface=4BDFD67E6D0E486796CC_GLZP_32168. 169. ** Warning ** GetSurfaceData: Very small surface area[8.60686E-004], Surface=4BDFD67E6D0E486796CC_GLZP_33170. 171. ** Severe ** GetSurfaceData: Zero or negative surface area[-2.48515E-005], Surface=4BDFD67E6D0E486796CC_GLZP_34172. 173. ** Fatal ** GetSurfaceData: Errors discovered, program terminates.174. 175. ...Summary of Errors that led to program termination:176. 177. ..... Reference severe error count=24178. 179. ..... Last severe error=GetSurfaceData: Zero or negative surface area[-2.48515E-005], Surface=4BDFD67E6D0E486796CC_GLZP_34180. 181. ************* Warning: Node connection errors not checked - most system input has not been read (see previous warning).182. 183. ************* Fatal error -- final processing. Program exited before simulations began. See previous error messages.184. 185. ************* EnergyPlus Warmup Error Summary. During Warmup: 0 Warning; 0 Severe Errors.186. 187. ************* EnergyPlus Sizing Error Summary. During Sizing: 2 Warning; 0 Severe Errors.188. 189. ************* EnergyPlus Terminated--Fatal Error Detected. 41 Warning; 24 Severe Errors; Elapsed Time=00hr 00min 1.51sec190.…
ach object has a "Source" property (layer, parent, object) - my fix causes it to look at this source property in order to determine where to draw the plot width value from. I was already doing this for color and material, but had neglected to do it for plot width.
2. The "Print Preview" viewport display option is calling the "PrintDisplay" command in Rhino, which you will notice takes a "Thickness" value - this is the conversion factor between plot weights/print widths (in mm) and the number of pixels in absolute screen width. As you note, this is a relative and not an absolute width in model units, so it does not change when you zoom. In most design applications it would be quite strange to specify the print widths of your geometry in absolute units - e.g. setting your lines to be 50 ft thick. In illustrator you are always working in "Paper Space" whereas in Rhino you have to be aware of the differences between Model Space and Paper Space (or Layout Space in Rhino terminology.)
My lineweight preview component operates on the basis of pixels - if you tell it "2" it will display a 2px-wide line irrespective of your zoom. The 4x conversion ratio you note is purely a function of the setting of your PrintDisplay command in Rhino.
3. The good news is my custom preview component ALSO supports "Absolute" lineweights in world-space units - so that they create a line that gets fatter when you zoom in and thinner when you zoom out (though it can't get thinner than a pixel, naturally.) Set the "Absolute" toggle (the 4th option" on the component - I think it will create the "Illustrator-like" behavior you're looking for, without having to create surfaces from your lines.
4. The dynamic pipeline component updates when the by-object plot weight changes. It does not update when the layer-level plot weight changes. In the end I have had to make some judgment calls about what kinds of changes should trigger a component refresh: too sensitive, and a definition could be forced to recompute unnecessarily on every little change; too insensitive, and you require too many forced refreshes.
In general I have focused on triggering updates from object-level attribute changes (Where they conceptually represent data about THIS OBJECT) and NOT from layer-level attribute changes (Where they conceptually represent data about a category). The Layer Table is the component that is designed to report changes to layer-level settings - and with "Auto Update" enabled on this component, it will in fact trigger an update on layer-level attribute changes.
With this approach, you may have to match up your geometry to the layers it belongs to, and then use the layer table component to retrieve the plot weight settings. The definition shown below is an example of how to do this. It assumes you are using layer-level plot weights.
…
u can display:
1. All angles
2. Angles that are smaller than a number(chose number from the CONTROLS group)
3. Only the angles around a specific node (chose node from the CONTROLS group)
Can you please explain a little better what you are trying to do?
Do you want to create pipes around all the mesh edges?
If so, what is the rule for the pipe's radius?
If it starts or ends on a node that has at least one angle<50 then its radius is 100?
And if not?…
Added by nikos tzar at 10:10am on September 8, 2014
ent" grid (not that simple, mind: regulations et all)... it "loads" the desired plane (an instance definition: 40 planes available) in the appropriate layer (automatically created) and then place any seat "combo" (out of 50 available, i.e. instance definitions of 2 types: business/economy). It's so fast that when you alter the 2d grid ... it can keep-up live with the delete this [all blocks using the previous grid] re-load that [new blocks using the current grid] sequance. Tested up to 5K seats (for the next 7444447, he he) - BTW: these are rather far more complex than your "cells". Seats are multi-nested and multi-layered thus you can control rather easily what Rhino displays in Views in what detail.
…