verb-nurbs
Version:
A library for creating and manipulating NURBS surfaces and curves in many languages
144 lines (104 loc) • 3.87 kB
HTML
<html>
<head>
<title>Surface-Surface Intersection</title>
<script src="js/verb.min.js"></script>
<script src="js/three.min.js"></script>
<script src="js/verbToThreeConversion.js"></script>
<script src="js/OrbitControls.js"></script>
<script src="js/codemirror.js"></script>
<script src="js/javascript.js"></script>
<script src="js/threeBasic.js"></script>
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,300' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="css/codemirror.css">
<link rel="stylesheet" href="css/example.css">
<link rel="stylesheet" href="css/colorforth.css">
</head>
<body>
<div id="button">Show/Hide Code</div>
<div id="viewer" class="col">
<div id="title"></div>
</div>
<div id="code-container" class="col scroll-y"></div>
</body>
<script id="script">
setupScene();
function exNurbsSurfacePlane(){
var degree = 3
, knots = [0, 0, 0, 0, 0.333, 0.666, 1, 1, 1, 1]
, pts = [ [ [0, 0, -10], [10, 0, 0], [20, 0, 0], [30, 0, 0] , [40, 0, 0], [50, 0, 9] ],
[ [0, -10, 0], [10, -10, 10], [20, -10, 10], [30, -10, 0] , [40, -10, 0], [50, -10, 0] ],
[ [0, -20, 0], [10, -20, 10], [20, -20, 10], [30, -20, 0] , [40, -20, -2], [50, -20, 0] ],
[ [0, -30, 0], [10, -30, 0], [20, -30, 0], [30, -30, 0] , [40, -30, 0], [50, -30, 0] ],
[ [0, -40, 0], [10, -40, 0], [20, -40, 0], [30, -40, 4] , [40, -40, -20], [50, -40, 0] ],
[ [0, -50, 12], [10, -50, 0], [20, -50, 0], [30, -50, 0] , [50, -50, 0], [50, -50, 15] ], ];
srf1 = new verb.geom.NurbsSurface.byKnotsControlPointsWeights( degree, degree, knots, knots, pts );
var p5 = [50,-50,3]
, p6 = [50,0,3]
, p7 = [0,0,3]
, p8 = [0,-50,5];
srf2 = verb.geom.NurbsSurface.byCorners( p5, p6, p7, p8 );
}
function exPlaneCylindricalSurface(){
var axis = [0,0,1]
, xaxis = [1,0,0]
, base = [0,0,0]
, height = 50
, radius = 30;
srf1 = new verb.geom.CylindricalSurface( axis, xaxis, base, height, radius );
var p5 = [50,50,50]
, p6 = [-50,50,50]
, p7 = [-50,-50,0]
, p8 = [50,-50,0];
srf2 = verb.geom.NurbsSurface.byCorners( p5, p6, p7, p8 );
}
function exTorusCylindricalSurface(){
// center, xaxis, yaxis, radius
var profile = new verb.geom.Circle( [5,0,0], [1,0,0], [0,0,1], 2 );
var base = [0,0,0];
var axis = [0,0,1];
var angle = 2 * Math.PI
srf1 = new verb.geom.RevolvedSurface( profile, base, axis, angle );
var axis = [-1,0,0]
, xaxis = [0,0,1]
, base = [8,0,0]
, height = 16
, radius = 2;
srf2 = new verb.geom.CylindricalSurface( axis, xaxis, base, height, radius );
}
function exTorusCylindricalSurface2(){
// center, xaxis, yaxis, radius
var profile = new verb.geom.Circle( [5,0,0], [1,0,0], [0,0,1], 2 );
var base = [0,0,0];
var axis = [0,0,1];
var angle = 2 * Math.PI
srf1 = new verb.geom.RevolvedSurface( profile, base, axis, angle );
var axis = [-1,0,0]
, xaxis = [0,0,1]
, base = [8,0,1]
, height = 16
, radius = 2;
srf2 = new verb.geom.CylindricalSurface( axis, xaxis, base, height, radius );
}
exNurbsSurfacePlane();
//exPlaneCylindricalSurface();
//exTorusCylindricalSurface();
//exTorusCylindricalSurface2();
addMeshToScene( srf1.toThreeGeometry() );
addMeshToScene( srf2.toThreeGeometry() );
var res;
var runs = 10;
var d1 = Date.now();
for (var i = 0 ; i < runs; i++){
res = verb.geom.Intersect.surfaces( srf1, srf2, 1e-6 );
}
var d2 = Date.now();
console.log( "intersected in ", (d2 - d1) / runs, " ms and " + res.length + " curves were discovered");
for (var i = 0; i < res.length; i++){
var res2 = res[i].toThreeGeometry();
addCurveToScene( res2 );
}
renderScene();
</script>
<script src="js/example.js"></script>
</html>