88 * @licence MIT License
99 */
1010
11- const jscad = require ( '@jscad/modeling' )
12- const { colors , geometries , maths , extrusions } = jscad
11+ import { colorize , geom2 , vec3 , mat4 , extrudeFromSlices , slice } from '@jscad/modeling'
12+ import { cuboid , circle , bezier , translate } from '@ jscad/modeling'
1313
14- const { cuboid, circle } = jscad . primitives
15- const { translate } = jscad . transforms
16- const { slice } = jscad . extrusions
17- const { bezier } = jscad . curves
18-
19- const main = ( ) => [
14+ export const main = ( ) => [
2015 box4x4 ( [ - 8 , - 4 , 2 ] , [ 1 , 0 , 0 ] ) ,
2116 box4x4 ( [ 8 , 4 , 12 ] , [ 0 , 1 , 0 ] ) ,
2217 tube ( [
@@ -38,45 +33,45 @@ const tube = (bezierControlPoints) => {
3833 // Create the initial slice
3934 const circ = circle ( { radius : 1 , segments : 32 } )
4035 const l = bezierControlPoints . length - 1
41- const circPoints = geometries . geom2 . toPoints ( circ )
42- let tubeSlice = slice . fromPoints ( circPoints )
36+ const circPoints = geom2 . toPoints ( circ )
37+ let tubeSlice = slice . fromVertices ( circPoints )
4338
4439 // Rotate it close to the direction we are going in. Rotation gets funky around 180˚
45- const bezierDelta = maths . vec3 . clone ( [
40+ const bezierDelta = vec3 . clone ( [
4641 bezierControlPoints [ l ] [ 0 ] - bezierControlPoints [ 0 ] [ 0 ] ,
4742 bezierControlPoints [ l ] [ 1 ] - bezierControlPoints [ 0 ] [ 1 ] ,
4843 bezierControlPoints [ l ] [ 2 ] - bezierControlPoints [ 0 ] [ 2 ]
4944 ] )
50- tubeSlice = slice . transform ( rotationMatrixFromVectors ( maths . vec3 . clone ( [ 0 , 0 , 1 ] ) , bezierDelta ) , tubeSlice )
45+ tubeSlice = slice . transform ( rotationMatrixFromVectors ( vec3 . clone ( [ 0 , 0 , 1 ] ) , bezierDelta ) , tubeSlice )
5146
5247 // Create the bezier function
5348 const tubeCurve = bezier . create ( bezierControlPoints )
5449
5550 // ...and extrude.
56- return extrusions . extrudeFromSlices ( {
51+ return extrudeFromSlices ( {
5752 numberOfSlices : 60 ,
5853 capStart : true ,
5954 capEnd : true ,
6055 callback : function ( progress , count , base ) {
6156 const positionArray = bezier . valueAt ( progress , tubeCurve )
6257 const tangentArray = bezier . tangentAt ( progress , tubeCurve )
63- const rotationMatrix = rotationMatrixFromVectors ( bezierDelta , maths . vec3 . clone ( tangentArray ) )
64- const translationMatrix = maths . mat4 . fromTranslation ( maths . mat4 . create ( ) , positionArray )
65- return slice . transform ( maths . mat4 . multiply ( translationMatrix , translationMatrix , rotationMatrix ) , base )
58+ const rotationMatrix = rotationMatrixFromVectors ( bezierDelta , vec3 . clone ( tangentArray ) )
59+ const translationMatrix = mat4 . fromTranslation ( mat4 . create ( ) , positionArray )
60+ return slice . transform ( mat4 . multiply ( translationMatrix , translationMatrix , rotationMatrix ) , base )
6661 }
6762 } , tubeSlice )
6863}
6964
7065const rotationMatrixFromVectors = ( srcVector , targetVector ) => {
7166 // From https://gist.github.com/kevinmoran/b45980723e53edeb8a5a43c49f134724
72- srcVector = maths . vec3 . normalize ( maths . vec3 . create ( ) , srcVector )
73- targetVector = maths . vec3 . normalize ( maths . vec3 . create ( ) , targetVector )
67+ srcVector = vec3 . normalize ( vec3 . create ( ) , srcVector )
68+ targetVector = vec3 . normalize ( vec3 . create ( ) , targetVector )
7469
75- const axis = maths . vec3 . cross ( maths . vec3 . create ( ) , targetVector , srcVector )
76- const cosA = maths . vec3 . dot ( targetVector , srcVector )
70+ const axis = vec3 . cross ( vec3 . create ( ) , targetVector , srcVector )
71+ const cosA = vec3 . dot ( targetVector , srcVector )
7772 const k = 1 / ( 1 + cosA )
7873
79- return maths . mat4 . fromValues (
74+ return mat4 . fromValues (
8075 ( axis [ 0 ] * axis [ 0 ] * k ) + cosA , ( axis [ 1 ] * axis [ 0 ] * k ) - axis [ 2 ] , ( axis [ 2 ] * axis [ 0 ] * k ) + axis [ 1 ] , 0 ,
8176 ( axis [ 0 ] * axis [ 1 ] * k ) + axis [ 2 ] , ( axis [ 1 ] * axis [ 1 ] * k ) + cosA , ( axis [ 2 ] * axis [ 1 ] * k ) - axis [ 0 ] , 0 ,
8277 ( axis [ 0 ] * axis [ 2 ] * k ) - axis [ 1 ] , ( axis [ 1 ] * axis [ 2 ] * k ) + axis [ 0 ] , ( axis [ 2 ] * axis [ 2 ] * k ) + cosA , 0 ,
@@ -86,7 +81,5 @@ const rotationMatrixFromVectors = (srcVector, targetVector) => {
8681
8782const box4x4 = ( translation , color ) => {
8883 const b = cuboid ( { size : [ 4 , 4 , 4 ] } )
89- return colors . colorize ( color , translate ( translation , b ) )
84+ return colorize ( color , translate ( translation , b ) )
9085}
91-
92- module . exports = { main }
0 commit comments