Skip to content

Instantly share code, notes, and snippets.

@acamilo
Forked from madhephaestus/shelfDividers.groovy
Last active August 18, 2016 14:21
Show Gist options
  • Save acamilo/08e9b0511a3977ea5c31a3bacf7de65c to your computer and use it in GitHub Desktop.
Save acamilo/08e9b0511a3977ea5c31a3bacf7de65c to your computer and use it in GitHub Desktop.
A parametric shelf divider system
//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