DPM3 Presentation - Menger City

Page 1

DPM3 / MENGER CITY GROUP 12 Tom Cooper-Cocks, Pouya Zhand, Aida Kirikbayeva


The idea behind this project began with the Menger sponge. Steven Holl references the menger sponge in his Sarphatistraat offices and it introduces the concept of porosity. “The layers of perforated screens are developed in three dimensions, analogous to the “Menger Sponge” principle of openings that are continuously cut in planes and constantly approaching zero volume.”


Bridge of Hope Skyscraper Mohammed Adib, Ivan Arellano, Jordi Cunill, Maria Teresa Farre, Christian Koester, Davide Roncato

Taking the idea of porosity further.. what if the child cubes were exposed on all 6 faces?

Nomad City Luca D’Amico, Luca Tesio


MENGER SPONGE -- remove corner cubes ((i==0) and (j==0) and (k==0)) or ((i==0) and (j==0) and (k==2)) or ((i==2) and (j==0) and (k==0)) or ((i==2) and (j==0) and (k==2)) or ((i==2) and (j==2) and (k==0)) or ((i==2) and (j==2) and (k==2)) or ((i==0) and (j==2) and (k==0)) or ((i==0) and (j==2) and (k==2)) --inversion of resultant sponge


--turn cubes into structural framework addmodifier childBox (Lattice ()) childBox.modifiers[#Lattice].Strut_Radius = 0.4/ currentLevel childBox.modifiers[#Lattice].Joint_Radius = 0.4/ currentLevel --keep parentBox addmodifier parentBox (Lattice ())

--add ‘pods’ pod= copy childbox (addmodifier pod (Lattice ()) pod.modifiers[#Lattice].Joint_Radius = (0.6/ currentLevel) pod.modifiers[#Lattice].Joint_Segs = 3 scale pod [0.5,0.5,0.5]


-- turn pod into spheres chold.modifiers[#Lattice].Joint_Radius = (4/ (currentLevel^2)) --level 2 sponge --level 3 inverted sponge


BRANCHING rootTree = cone() to box() height, radius1 radius2 become redundant rotation fixed to 90 offset set to 1 - can be extended to create non-connected cubes branch depth, min and max remain variable and allow for random generation



in coordsys rootBox1 createChildren myBranch 1



Final script based upon the Recursive Menger Sponge Script and Branching Script by Wassim Jabi ResetMaxFile #noPrompt utility MengerCity “Menger City” ( global maxLevels=2 global rootBox1=box() global branchesArray = #() -- Branching global branchingDepth = 3 global branchingNumberMin = 3 global branchingNumberMax = 8 -- Offset/Translation global offsetFactorMin = -1 global offsetFactorMax = 1.5 -- Unfolding/Rotation global branchingXAngleMin = 90 global branchingXAngleMax = 90 -- Height/Scale global heightFactorMin = 1 global heightFactorMax = 1 group “Branching” ( --spinner branchingDepth_spinner “Depth: “ type:#integer range:[1,1000,branchingDepth] toolTip:”Total recusion steps” spinner branchingNumberMin_spinner “Min: “ type:#integer range:[0,100000,branchingNumberMin] toolTip:”Minimum number to branch out at each step” spinner branchingNumberMax_spinner “Max: “ type:#integer range:[0,100000,branchingNumberMax] toolTip:”Maximum number to branch out at each step” ) group “Offset” ( spinner offsetFactorMin_spinner “Min: “ type:#float range:[0.0,100000,heightFactorMin] toolTip:”Minimum distance offset factor to slide child along parent” spinner offsetFactorMax_spinner “Max: “ type:#float range:[0.0,100000,heightFactorMax] toolTip:”Maximum distance offset factor to slide child along parent” ) button generate_button “Generate Level 2” enabled:true button generate2_button “Generate Level 3” enabled:true fn createChildren porentBox currentLevel = ( index=1 children= #() if currentLevel < maxLevels then ( for i=0 to 2 by 1 do ( for j=0 to 2 by 1 do ( for k=0 to 2 by 1 do


(

childBox=box width:(porentBox.width/3) length:(porentBox.length/3) height:(porentBox.height/3) childBox.pos.x=porentBox.pos.x - (porentBox.width/2) + (childBox.width/2) + (childBox.width)*i childBox.pos.y=porentBox.pos.y - (porentBox.length/2) + (childBox.length/2) + (childBox.length)*j childBox.pos.z=porentBox.pos.z + (childBox.height)*k childBox.wirecolor=white if (((i==1) and (j==0) and (k==1)) or ((i==0) and (j==1) and (k==1)) or ((i==1) and (j==2) and (k==1)) or ((i==2) and (j==1) and (k==1)) or ((i==1) and (j==1) and (k==2)) or ((i==1) and (j==1) and (k==0)) or --------------------------- additional cubes removed ((i==0) and (j==0) and (k==0)) or ((i==0) and (j==0) and (k==2)) or ((i==2) and (j==0) and (k==0)) or ((i==2) and (j==0) and (k==2)) or ((i==2) and (j==2) and (k==0)) or ((i==2) and (j==2) and (k==2)) or ((i==0) and (j==2) and (k==0)) or ((i==0) and (j==2) and (k==2)) or ---------------------------((i==1) and (j==1) and (k==1))) then ( delete childBox; ) else ( ( append children childBox addmodifier childBox (Lattice ()) childBox.modifiers[#Lattice].Strut_Radius = 0.5 childBox.modifiers[#Lattice].Joint_Radius = 0.5

/*rotX = random -10.0 10.0 rotY = random -10.0 10.0 rotZ = random -10.0 10.0 about porentBox rotate childBox (eulerAngles rotX rotY rotZ) */ ) pod= copy childbox (addmodifier pod (Lattice ()) pod.modifiers[#Lattice].Joint_Radius = (0.6/currentLevel) pod.modifiers[#Lattice].Joint_Segs = 3) scale pod [0.5,0.5,0.5] move pod [0,0,2/currentLevel]


)

)

) )

addmodifier porentBox (Lattice ()) porentBox.modifiers[#Lattice].Strut_Radius = 0.6 porentBox.modifiers[#Lattice].Joint_Radius = 0.6 currentLevel = currentLevel +1 for i=1 to children.count by 1 do ( createChildren children[i] currentLevel

)

)

)

fn branch rootBox1 depth = ( if (depth < branchingDepth) then ( numberOfBranches = (random branchingNumberMin branchingNumberMax) for x = 1 to numberofBranches do ( myBranch = copy rootBox1 myBranch.parent = rootBox1 myBranch.height = (rootBox1.height) /*myRot = eulerAngles 90 0 0 in coordsys rootBox1 rotate myBranch myRot myRot2 = eulerAngles 0 0 90 in coordsys rootBox1 rotate myBranch myRot2 myRot1 = eulerAngles 0 90 0 in coordsys rootBox1 rotate myBranch myRot1*/ in coordsys rootBox1 move myBranch [0,0, ((random offSetFactorMin offSetFactorMax)*-rootBox1.height)] in coordsys rootBox1 move myBranch [0,((random offSetFactorMin offSetFactorMax)*-rootBox1.height),0] in coordsys rootBox1 move myBranch [((random offSetFactorMin offSetFactorMax)*-rootBox1.height),0,0] --Applying menger function to branches --------------------------------------------in coordsys rootBox1 createChildren myBranch 1 --------------------------------------------append branchesArray myBranch branch myBranch (depth + 1) ) ) )


on generate_button pressed do ( maxLevels=2 rootTree=rootBox1 append branchesArray rootTree branch rootTree 1 ) on generate2_button pressed do ( maxLevels=3 rootTree=rootBox1 append branchesArray rootTree branch rootTree 1 ) /* on branchingDepth_spinner changed amt do ( branchingDepth = amt ) */ on branchingNumberMin_spinner changed amt do ( branchingNumberMin = amt ) on branchingNumberMax_spinner changed amt do ( branchingNumberMax = amt ) on offsetFactorMin_spinner changed amt do ( offsetFactorMin = amt ) on offsetFactorMax_spinner changed amt do ( offsetFactorMax = amt ) )


Group 12 Tom Cooper-Cocks, Pouya Zhand, Aida Kirikbayeva


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.