he plug-in supports intuitive design of paneling concepts as well as rationalize complex geometry into a format suitable for analysis and fabrication. The plug-in is closely integrated with Rhino 7 and is widely used for architectural and other building designers.
Download
The new PanelingTools for the new Rhino 7.2 is now available. You can access Rhino 7 evaluation and upgrades from here…
Documentation
For documentation and examples, please check:
PanelingTools Manual for detailed description of commands and options.
PanelingTools for Grasshopper Manual includes tutorials and description of PT-GH components.
Paneling Scripting page has a listing of paneling methods for RhinoScript.
Paneling Tutorials page has links to video tutorials.
Paneling Short Clips page has short video tutorials that covers the core functionality of PanelingTools.
Paneling Gallery page has users projects with PanelingTools.
Videos
**NEW** PanelingTools Webinar Course - December 2014 learn how Paneling tools works and how best to integrate it into your design process.
Paneling Tools Webinar - February 11, 2011
Paneling Tools Webinar on Vimeo
Feedback
Please tell us what you think and how you are using PanelingTools to help shape future development.
Join the PanelingTools Group in Rhino Forum and post photos, news and discussions. Make sure to tag with keyword “PanelingTools”.
For questions and feedback, contact the developer.
Source: McNeel Wiki
Keshia C. Stich
Grid Paneling Group
…
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)…
giornata inaugurale sarà dedicata alla free-lecture introduttiva finalizzata alla realizzazione di un modello d'architettura complesso attraverso l'utilizzo di comandi e tecniche avanzate di rappresentazione con Grasshopper (plug-in parametrica di Rhinoceros) e 3dsMax. Sarà illustrato inoltre il potenziale di V-ray per 3dsMax realizzando un rendering concettuale. Durante il mini-corso dell' openDAY verranno mostrate le caratteristiche e le potenzialità degli strumenti per far luce sui nuovi valori assunti dalla modellazione 3D. La modellazione 3D sta interessando un pubblico sempre più vasto inserendosi in una nuova fase di ampia disponibilità per conoscenze, software, hardware di prototipazione e modelli. Pur mantenendo tutti i suoi valori già noti la questione si è talmente ampliata fino ad interessare norme giuridiche (diritti sui modelli ,concorrenza con offerte di servizi apparentemente simili, informazioni deformate e onfusione nei media) Makers University[http://www.makersuniversity.com], in collaborazione con parametricart, vi propone un punto di vista ampio e sintetico su queste tematiche.
Al termine della free-lecture, sarà illustrata l'offerta formativa [CLICCA QUI] di parametricart riferita ai corsi che si terranno nei mesi di Gennaio e Febbraio 2013 inseriti all'interno della più ampia programmazione della Makers University. SONO PREVISTE TARIFFE PROMOZIONALI PER COLORO CHE SI ISCRIVERANNO AI CORSI durante l'OpenDAY.
La lezione e la presentazione si terranno nel nuovo spazio co-working il PEDONE.
PROGRAMMAZIONE
- I temi della Makers University [Leo Sorge];
- Modellazione della parametricTower (concept di architettura complessa) utilizzando Grasshopper, applicativo per la modellazione parametrica [VIDEO] [Michele Calvano];
- Modellazione di una copertura reticolare 3D a completamento della parametricTower con 3dsMax utilizzando tecniche di modellazione mesh complesse [Wissam Wahbeh];
- Rendering con V-ray per 3dsMax illustrando la nuova interfaccia nodale [Wissam Wahbeh].
- Question Time per chiarimenti sugli argomenti illustrati.
COME
L'openDAY sarà aperto a tutti gli interessati,completamente gratuito e sarà replicato in tre sessioni di uguali contenuti organizzate nei seguenti orari:
Sessione [1] 11,30 - 13,30
Sessione [2] 15,30 - 17,30
Sessione [3] 17,30 - 19,30
Per necessità di organizzazione è importante la prenotazione all'evento utilizzando il form in fondo alla pagina specificando nella stringa apposita, il nome dell'evento e la sessione (es. open day sessione 1) oltre agli altri dati richiesti.…
1 JUN to 31 DECBetween hours 1:00 to 24:00Current document units is in MetersConversion to Meters will be applied = 1.000[1 of 7] Writing simulation parameters...Ground temperature data contains monthly average temperatures at 3 different depths .5 meters (1st)2 meters (2nd)4meters (3rd)respectively[2 of 6] No context surfaces...[3 of 6] Writing geometry...[4 of 6] Writing materials and constructions...[5 of 7] Writing schedules...[6 of 7] Writing loads and ideal air system...[7 of 7] Writing outputs......... idf file is successfully written to : c:\ladybug\unnamed\EnergyPlus\unnamed.idf
Analysis is running!...c:\ladybug\unnamed\EnergyPlus\eplusout.csv......
Done! Read below for errors and warnings:
Program Version,EnergyPlus, Version 8.3.0-6d97d074ea, YMD=2015.05.24 11:32,IDD_Version 8.3.0
** Warning ** IP: Note -- Some missing fields have been filled with defaults. See the audit output file for details.
** Warning ** Version: in IDF="'8.1.0'" not the same as expected="8.3"
************* Beginning Zone Sizing Calculations
** Severe ** GetSurfaceData: Some Outward Facing angles of subsurfaces differ significantly from base surface.
** ~~~ ** ...use Output:Diagnostics,DisplayExtraWarnings; to show more details on individual surfaces.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=AW0 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=AW0 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=AW0 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.1101)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=AW0 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.1101)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=AW1 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.1101)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=AW1 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=AW1 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=AW1 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.1101)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=AW2 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=AW2 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=AW2 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=AW2 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=AW3 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=AW3 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=EW1 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=EW1 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=GLZ_0_EW1_1F6383543B434F648813 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=0.9038)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=GLZ_0_EW1_1F6383543B434F648813 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=0.9038)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=GLZ_0_EW1_1F6383543B434F648813 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=16.0967)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=GLZ_0_EW1_1F6383543B434F648813 is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=16.0967)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 6 of back surface=FLOOR is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 7 of back surface=FLOOR is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 8 of back surface=FLOOR is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.1101)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 9 of back surface=FLOOR is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 5 of back surface=CIELING is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 6 of back surface=CIELING is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=17.1101)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 7 of back surface=CIELING is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 8 of back surface=CIELING is in front of receiving surface=EW0
** ~~~ ** (Dot Product indicator=30.0900)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=AW6 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=AW6 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=WALLW1 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=WALLW1 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=WALLW1 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=WALLW1 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=GLZ_0_WALLW1_103854D39BEF453D8A4E is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=GLZ_0_WALLW1_103854D39BEF453D8A4E is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=GLZ_0_WALLW1_103854D39BEF453D8A4E is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=GLZ_0_WALLW1_103854D39BEF453D8A4E is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=EW0 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=EW0 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=GLZ_0_EW0_6AEDE94222384E5B8950 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=1.4709)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=GLZ_0_EW0_6AEDE94222384E5B8950 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=1.4709)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=GLZ_0_EW0_6AEDE94222384E5B8950 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=15.6696)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 4 of back surface=GLZ_0_EW0_6AEDE94222384E5B8950 is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=15.6696)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 1 of back surface=FLOOR is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=FLOOR is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 2 of back surface=CIELING is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Severe ** Problem in interior solar distribution calculation (CHKBKS)
** ~~~ ** Solar Distribution = FullInteriorExterior will not work in Zone="APRATMENT1"
** ~~~ ** because vertex 3 of back surface=CIELING is in front of receiving surface=EW1
** ~~~ ** (Dot Product indicator=17.0963)
** ~~~ ** Check surface geometry; if OK, use Solar Distribution = FullExterior instead.
** Warning ** ManageSizing: For a plant sizing run, there must be at least 1 Sizing:Plant object input. SimulationControl Plant Sizing option ignored.
************* Testing Individual Branch Integrity
************* All Branches passed integrity testing
************* Testing Individual Supply Air Path Integrity
************* All Supply Air Paths passed integrity testing
************* Testing Individual Return Air Path Integrity
************* All Return Air Paths passed integrity testing
************* No node connection errors were found.
************* Beginning Simulation
************* Simulation Error Summary *************
** Warning ** The following Report Variables were requested but not generated
** ~~~ ** because IDF did not contain these elements or misspelled variable name -- check .rdd file
************* Key=*, VarName=ZONE PACKAGED TERMINAL HEAT PUMP TOTAL COOLING ENERGY, Frequency=Hourly
************* Key=*, VarName=ZONE PACKAGED TERMINAL HEAT PUMP TOTAL HEATING ENERGY, Frequency=Hourly
************* Key=*, VarName=CHILLER ELECTRIC ENERGY, Frequency=Hourly
************* Key=*, VarName=BOILER HEATING ENERGY, Frequency=Hourly
************* Key=*, VarName=FAN ELECTRIC ENERGY, Frequency=Hourly
************* Key=*, VarName=ZONE VENTILATION FAN ELECTRIC ENERGY, Frequency=Hourly
************* Key=*, VarName=ZONE VENTILATION TOTAL HEAT LOSS ENERGY, Frequency=Hourly
************* Key=*, VarName=ZONE VENTILATION TOTAL HEAT GAIN ENERGY, Frequency=Hourly
************* There are 1 unused schedules in input.
************* There are 1 unused week schedules in input.
************* There are 3 unused day schedules in input.
************* Use Output:Diagnostics,DisplayUnusedSchedules; to see them.
************* EnergyPlus Warmup Error Summary. During Warmup: 0 Warning; 0 Severe Errors.
************* EnergyPlus Sizing Error Summary. During Sizing: 1 Warning; 49 Severe Errors.
************* EnergyPlus Completed Successfully-- 4 Warning; 49 Severe Errors; Elapsed Time=00hr 00min 4.59sec
Thanks Abraham.I really appreciate it.
Another thing ' I posted a discussion few days ago and got no replies.And this forum is the only 'Hope' for me..Can you quickly check it?thanks.
N
http://www.grasshopper3d.com/group/ladybug/forum/topics/free-form-external-wall-with-glazing-workflow?xg_source=activity
…
a nodi, permette di sfruttara le potenza della programmazione, senza necessariamente avere competenze avanzate.
Con Grasshopper potrete avere accesso ai segreti della modellazione generativa, un nuovo linguaggio progettuale che sta cambiando il mondo del design, a partire dalla gioielleria, fino ad arrivare all'architettura.
Durante il corso sarà possibile comprendere le caratteristiche di funzionamento del programma e applicarlo alla creazione di oggetti complessi che potranno essere stampati in 3D, oppure renderizzati. La durata è di 30 ore e alla fine del percorso verrà rilasciato il certificato McNeel.
Il Programma
Il corso spiega i concetti base di modellazione parametrica e generativa. Nello specifico:
Interfaccia e comandi
Parametri e componenti
Interopazione con Rhinoceros
Strumenti di parametrizzazione
Combinazione dati
Data tree
Creazioni di superfici attraverso algoritmi di paneling
Teoria degli attrattori
Gestione strumenti mesh
Creazione di Cluster
Durante il corso saranno proposte esercitazioni pratiche sul campo di utilizzo preferito dallo studente
Il docente
Antonino Marsala, è un formatore certificato McNeel con alle spalle oltre 11 anni di esperienza nel settore della modellazione 3D. Oltre ad occuparsi di formazione, collabora con aziende orafe e di architettura per la messa in pratica dei principi di modellazione generativa, applicandoli a casi reali.
FAQ
Quanto costa il corso?
Il prezzo del corso è di 500,00 € + IVA che potranno essere saldati in una soluzione unica. Nel caso di iscrizione di gruppo, potrà essere applicato uno sconto.
Cosa posso portare e cosa non devo portare all'evento?
Gli organizzatori forniranno computer con il software già installato. Nel caso vogliate portare il vostro computer, vi forniremo una versione trial da 90giorni di Rihnoceros e Grasshopper
Dove posso contattare l'organizzatore per qualsiasi domanda?
antonio@mandarinoblu.com
334 24 20 203
La mia registrazione o il mio biglietto è trasferibile?
Si, purchè venga comunicato il cambiamento entro 48 ore dalla partena del corso
…
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…
ly fabricated interventions and interactive electronic performance art installations in Barra Funda. Along with other experts, these tutors will teach how to use and apply new design technologies, notably Rhino and Grasshopper (and numerous plug-ins including GECO, Galapagos, Kangaroo and RhinoCam); Arduino and Processing; and the use of laser-cutters, rapid- prototype machines and CNC routers and mills.
Alan Dempsey of NEX, was in 2010, selected by the Centre for European Architecture/Chicago Athenaeum as one of the 40 most significant architects in the EU under 40. In 2008 he was selected by the British Council as one of the six most significant Design Entrepreneurs. He previously worked with Future Systems, OCEAN and Homa Farjadi. Alan was an AA Unit Tutor and is Director of the AA Independent’s Group (www.independentsgroup.net), which facilitates research into the use of computational design and fabrication. Alan has lectured, exhibited and been published worldwide. His work has received a number of awards, including a LEAF award for Spencer Dock Bridge, and a D&AD pencil for the [C]space DRL 10 Pavilion.
Robert Stuart Smith of Kokkugiais a Studio Course Master at the AA DRL. Robert previously worked for Lab Architecture Studio and Nicholas Grimshaw & Partners. He focuses on self-organisational systems and developmental growth, pursuing polyvalent and environmentally responsive affect. He leads consultation to Cecil Balmond on non-linear algorithmic design research. Kokkugia has projects in the USA, UK and Mexico, and is exhibited and published internationally.
Iván Ivanoff is an artist, programmer, and researcher. He searches for new forms of communication for the society of the future and is the director of different Media Labs worldwide. He founded the artistic collaborative i2off.org+r3nder.net, which develops multi-media and interactive projects, and Estado Lateral Media Lab to investigate and develop new technologies.
The Barra Funda district of São Paulo was once characterised by a mix of small industrial, commercial and residential programmes, but, as economic policies have favoured larger production industries, numerous companies have abandoned the area. In response, the workshop proposes the creation of new types of smaller industries to produce a mix of both consumption and production, manifested through micro-manufacturing interventions that can co-exist alongside retail and housing. Computational design and digital fabrication could be used to help create these new micro-industries, which in turn will help empower local craftsman to produce and sell directly to consumers through micro-manufacturing, located in small urban workshops.
The workshop will tap into emergent gallery scene of Barra Funda and local initiatives that use computational technology to introduce a new cultural and economic impetus. The workshop is a part of the International Festival of Electronic Language (FILE), an exhibition of interactive electronic technology, and will import these electronic technologies out of the galler, collaborating with local manufacturers, artists, and activists, with a goal of disseminating a high-tech yet low-cost and small-scale fabrication systems to promote this new micro-industrial movement. The workshop is open to architecture and design students and professionals worldwide.…
rring to the above image)
Area
effective
effective
Second
Elastic
Elastic
Plastic
Radius
Second
Elastic
Plastic
Radius
of
Vy shear
Vz shear
Moment
Modulus
Modulus
Modulus
of
Moment
Modulus
Modulus
of
Section
Area
Area
of Area
upper
lower
Gyration
of Area
Gyration
(strong axis)
(strong axis)
(strong axis)
(strong axis)
(strong axis)
(weak axis)
(weak axis)
(weak axis)
(weak axis)
A
Ay
Az
Iy
Wy
Wy
Wply
i_y
Iz
Wz
Wplz
i_z
cm2
cm2
cm2
cm4
cm3
cm3
cm3
cm
cm4
cm3
cm3
cm
I have a very similar table which I could import to the Karamba table. But I have i_v or i_u values as well as radius of inertia for instance.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dimensjon
Masse
Areal
akse
Ix
Wpx
ix
akse
Iy
Wpy
iy
akse
Iv
Wpv
iv
Width
Thickness
Radius R
[kg/m]
[mm2]
[mm4]
[mm3]
[mm]
[mm4]
[mm3]
[mm]
[mm4]
[mm3]
[mm]
[mm]
[mm]
[mm]
L 20x3
0.89
113
x-x
4,000
290
5.9
y-y
4,000
290
5.9
v-v
1,700
200
3.9
20
3
4
L 20x4
1.15
146
x-x
5,000
360
5.8
y-y
5,000
360
5.8
v-v
2,200
240
3.8
20
4
4
L 25x3
1.12
143
x-x
8,200
460
7.6
y-y
8,200
460
7.6
v-v
3,400
330
4.9
25
3
4
L 25x4
1.46
186
x-x
10,300
590
7.4
y-y
10,300
590
7.4
v-v
4,300
400
4.8
25
4
4
L 30x3
1.37
175
x-x
14,600
680
9.1
y-y
14,600
680
9.1
v-v
6,100
510
5.9
30
3
5
L 30x4
1.79
228
x-x
18,400
870
9.0
y-y
18,400
870
9.0
v-v
7,700
620
5.8
30
4
5
L 36x3
1.66
211
x-x
25,800
990
11.1
y-y
25,800
990
11.1
v-v
10,700
760
7.1
36
3
5
L 36x4
2.16
276
x-x
32,900
1,280
10.9
y-y
32,900
1,280
10.9
v-v
13,700
930
7.0
36
4
5
L 36x5
2.65
338
x-x
39,500
1,560
10.8
y-y
39,500
1,560
10.8
v-v
16,500
1,090
7.0
36
5
5
I have diagonals (bracings) which can buckle in these "non-regular" directions too, and they do. If I could add those values then in the Karamba model I could assign specific buckling scenarios..... I can see another challenge which will be at the ModifyElement component, I will not be able to choose these buckling lengths, in these directions.
Do you think this functionality can be added within short, or should I try to find another way to model these members?
Br, Balazs
…
nts for Ladybug too. They are based on PVWatts v1 online calculator, supporting crystalline silicon fixed tilt photovoltaics.
You can download them from here, or use the Update Ladbybug component instead. If you take the first option, after downloading check if .ghuser files are blocked (right click -> "Properties" and select "Unblock").
You can download the example files from here.
Video tutorials will follow in the coming period.
In the very essence these components help you answer the question: "How much energy can my roof, building facade, solar parking... generate if I would populate them with PV panels"?
They allow definition of different types of losses (snow, age, shading...) which may affect your PV system:
And can find its optimal tilt and orientation:
Or analyse its performance, energy value, consumption, emissions...
By Djordje Spasic and Jason Sensibaugh, with invaluable support of Dr. Frank Vignola, Dr. Jason M. Keith, Paul Gilman, Chris Mackey, Mostapha Sadeghipour Roudsari, Niraj Palsule, Joseph Cunningham and Christopher Weiss.
Thank you for reading, and hope you will enjoy using the components!
EDIT: From march 27 2017, Ladybug Photovoltaics components support thin-film modules as well.
References:
1) System losses:
PVWatts v5 Manual, Dobos, NREL, 2014
2) Sun postion equations by Michalsky (1988):
SAM Photovoltaic Model Technical Reference, Gilman, NREL, 2014
edited by Jason Sensibaugh
3) Angle of incidence for fixed arrays:
PVWatts Version 1 Technical Reference, Dobos, NREL, 2013
4) Plane-of-Array diffuse irradiance by Perez 1990 algorithm:
PVPMC Sandia National Laboratories
SAM Photovoltaic Model Technical Reference, Gilman, NREL, 2014
5) Sandia PV Array Performance Module Cover:
PVWatts Version 1 Technical Reference, Dobos, NREL, 2013
6) Sandia Thermal Model, Module Temperature and Cell Temperature Models:
Photovoltaic Array Performance Model, King, Boys, Kratochvill, Sandia National Laboratories, 2004
7) CEC Module Model: Maximum power voltage and Maximum power current from:
Exact analytical solutions of the parameters of real solar cells using Lambert W-function, Jain, Kapoor, Solar Energy Materials and Solar Cells, V81 2004, P269–277
8) PVFORM version 3.3 adapted Module and Inverter Models:
PVWatts Version 1 Technical Reference, Dobos, NREL, 2013
9) Sunpath diagram shading:
Using sun path charts to estimate the effects of shading on PV arrays, Frank Vignola, University of Oregon, 2004
Instruction manual for the Solar Pathfinder, Solar Pathfinder TM, 2008
10) Tilt and orientation factor:
Application for Purchased Systems Oregon Department of Energy
solmetric.com
11) Photovoltaics performance metrics:
Solar PV system performance assessment guideline, Honda, Lechner, Raju, Tolich, Mokri, San Jose state university, 2012
CACHE Modules on Energy in the Curriculum Solar Energy, Keith, Palsule, Mississippi State University
Inventory of Carbon & Energy (ICE) Version 2.0, Hammond, Jones, SERT University of Bath, 2011
The Energy Return on Energy Investment (EROI) of Photovoltaics: Methodology and Comparisons with Fossil Fuel Life Cycles, Raugei, Fullana-i-Palmer, Fthenakis, Elsevier Vol 45, Jun 2012
12) Calculating albedo: Metenorm 6 Handbook part II: Theory, Meteotest 2007
13) Magnetic declination:
Geomag 0.9.2015, Christopher Weiss…
.
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
…