-
-
Save acamilo/08e9b0511a3977ea5c31a3bacf7de65c to your computer and use it in GitHub Desktop.
A parametric shelf divider system
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Your code here | |
import eu.mihosoft.vrl.v3d.parametrics.*; | |
ArrayList<CSG> makeDividers(){ | |
LengthParameter thickness = new LengthParameter("Material Thickness",6.2,[10,1]) | |
LengthParameter foamThick = new LengthParameter("Foam Thickness",25,[40,1]) | |
LengthParameter height = new LengthParameter("Divider Height",60,[200,1]) | |
LengthParameter sheetX = new LengthParameter("sheetX",590,[914.4,1])// rows | |
LengthParameter sheetY = new LengthParameter("sheetY",590,[609.6,1])//columns | |
ArrayList<CSG> parts = new ArrayList<CSG>() | |
int rows = sheetX.getMM()/height.getMM() | |
int columns = sheetY.getMM()/height.getMM() | |
println "Making cube sizes rows:"+rows+" cols:"+columns | |
CSG rowSlat = new Cube( sheetX.getMM(),// X dimention | |
height.getMM(),// Y dimention | |
thickness.getMM()// Z dimention | |
).toCSG() | |
.rotx(90) | |
.toZMin() | |
.toXMin() | |
.toYMin() | |
CSG colSlat = new Cube( height.getMM(),// X dimention | |
sheetY.getMM(),// Y dimention | |
thickness.getMM()// Z dimention | |
).toCSG() | |
.roty(90) | |
.toZMin() | |
.toXMin() | |
.toYMin() | |
ArrayList<CSG> rowparts = new ArrayList<CSG>() | |
ArrayList<CSG> colparts = new ArrayList<CSG>() | |
for(int i=1;i<columns+1;i++){ | |
double movement = i*height.getMM() | |
println "Moving row slat " +movement | |
CSG moved = rowSlat | |
.movey(movement) | |
rowparts.add(moved) | |
} | |
for(int i=1;i<rows+1;i++){ | |
CSG moved = colSlat | |
.movex(i*height.getMM()) | |
.movez(height.getMM()/2) | |
for(CSG c:rowparts){ | |
moved=moved.difference(c) | |
} | |
colparts.add( | |
moved | |
.setManufactuing({incoming -> | |
return incoming | |
.roty(90) | |
.toZMin() | |
}) | |
) | |
} | |
rowparts = rowparts.collect{ | |
CSG moved=it; | |
for(CSG c:colparts){ | |
moved=moved.difference(c.movez(-height.getMM()/2)) | |
.setManufactuing({incoming -> | |
return incoming | |
.rotx(90) | |
.toZMin() | |
}) | |
} | |
return moved | |
} | |
parts.addAll(rowparts) | |
parts.addAll(colparts) | |
for (int i=0;i<parts.size();i++){ | |
int index=i; | |
parts[i] = parts[i] | |
.setParameter(thickness) | |
.setParameter(foamThick) | |
.setParameter(height) | |
.setParameter(sheetX) | |
.setParameter(sheetY) | |
.setRegenerate({ makeDividers().get(index)}) | |
} | |
return parts.collect { it.prepForManufacturing() } | |
} | |
CSGDatabase.clear()//set up the database to force only the default values in | |
return makeDividers() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment