lathe
Version:
A discrete solid modeller using BSPs
90 lines (76 loc) • 2.02 kB
JavaScript
requirejs.config({
baseUrl:'..',
paths: {
'underscore': '../../node_modules/underscore/underscore',
'backbone-events': '../../node_modules/backbone-events/lib/backbone-events',
},
});
requirejs([
'lib/plane2d',
'lib/line2d',
'lib/polygon2d',
'lib/bsp',
'examples/js/booleanexample',
],
function(
Plane2D,
Line2D,
Polygon2D,
BSP,
BooleanExample) {
var Node = BSP.Node;
var Cell = BSP.Cell;
var worldRegion = Polygon2D.world;
var createConvexTree = function(planes) {
if (planes.length) {
var frontNode = new Cell(false);
var backNode = createConvexTree(planes.slice(1));
var v = new Node(planes[0], backNode, frontNode);
return v;
} else {
return new Cell(true);
}
}
var t1 =
new Node(
new Plane2D(0,-1,-1),
createConvexTree([new Plane2D(1,1,10), new Plane2D(-1,0,-1)]),
createConvexTree([new Plane2D(1,-1,10), new Plane2D(-1,0,-1)]));
t1.createSHPs(Line2D);
var t2 =
new Node(
new Plane2D(-1,0,-3),
createConvexTree([new Plane2D(0,-1,-2), new Plane2D(1,1,12)]),
createConvexTree([new Plane2D(0,-1,1), new Plane2D(-1,1,5)]));
t2.createSHPs(Line2D);
new BooleanExample(t1, t2, Line2D);
var t3 = createConvexTree([
new Plane2D(1,0,5),
new Plane2D(0,1,1),
new Plane2D(0,-1,0),
new Plane2D(-1,0,0),
])
t3.createSHPs(Line2D);
var t4 = createConvexTree([
new Plane2D(0,-1,-1),
new Plane2D(1,1,12),
new Plane2D(-1,0,-1)
])
t4.createSHPs(Line2D);
// Example for the oppositely coincident SHPs, similar to the 3D case
new BooleanExample(t3, t4, Line2D);
// Example of non-overlapping
var t5 = createConvexTree([
new Plane2D(0,1,0),
new Plane2D(-1,-1,12),
new Plane2D(1,0,-1)
])
t5.createSHPs(Line2D);
var t6 = createConvexTree([
new Plane2D(0,-1,-1),
new Plane2D(1,1,12),
new Plane2D(-1,0,-1)
])
t6.createSHPs(Line2D);
new BooleanExample(t5, t6, Line2D);
});