From baf418e11bd2d9bbccb28b9669bfd915f6326257 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 26 Mar 2024 08:11:56 +0100 Subject: [PATCH] Fix deploy IIS01 + recupero versione IIS01 attuale --- .gitlab-ci.yml | 2 +- .../THREEJS_DOORS/CubeRef/cubeControls.js | 891 ++++++++++++++++++ TestArea_IIS01/THREEJS_DOORS/Images/Logo.png | Bin 0 -> 25199 bytes TestArea_IIS01/THREEJS_DOORS/Images/Thumbs.db | Bin 0 -> 8192 bytes TestArea_IIS01/THREEJS_DOORS/index.html | 261 ++++- TestArea_IIS01/THREEJS_DOORS/style.css | 56 +- 6 files changed, 1183 insertions(+), 27 deletions(-) create mode 100644 TestArea_IIS01/THREEJS_DOORS/CubeRef/cubeControls.js create mode 100644 TestArea_IIS01/THREEJS_DOORS/Images/Logo.png create mode 100644 TestArea_IIS01/THREEJS_DOORS/Images/Thumbs.db diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 955363c..a6fa7ed 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -34,7 +34,7 @@ variables: $mountCmd = "net use X: $env:NET_SHARE_X /u:$env:NET_USERQ $SDRIVE_PASSWD" Write-Output $mountCmd; net use X: $env:NET_SHARE_X /u:$env:NET_USERQ $SDRIVE_PASSWD - ROBOCOPY /MIR $env:SRC_PATH\$env:DIR_PATH\ X:\PROVA_SAM\$env:DIR_PATH\ + ROBOCOPY /MIR $env:SRC_PATH\$env:DIR_PATH\ X:\$env:DIR_PATH\ SLEEP 2 net use X: /delete diff --git a/TestArea_IIS01/THREEJS_DOORS/CubeRef/cubeControls.js b/TestArea_IIS01/THREEJS_DOORS/CubeRef/cubeControls.js new file mode 100644 index 0000000..3233912 --- /dev/null +++ b/TestArea_IIS01/THREEJS_DOORS/CubeRef/cubeControls.js @@ -0,0 +1,891 @@ +import * as THREE1 from "../Libs/node_modules/three/build/three.module.js"; + +const MAINCOLOR = 0xDDDDDD ; +const ACCENTCOLOR = 0xF7F7F7 ; +const OUTLINECOLOR = 0xCCCCCC ; + +export default class ViewCubeControls extends THREE1.EventDispatcher { + constructor( camera, cubeSize, edgeSize, domElement, orbitControls) { + super() ; + this.cubeSize = cubeSize ; + this.edgeSize = edgeSize ; + this.domElement = domElement ; + this._cube = new ViewCube({ + size: this.cubeSize, + edge: this.edgeSize, + outline: true, + bgColor: MAINCOLOR, + hoverColor: ACCENTCOLOR, + outlineColor: OUTLINECOLOR + }) ; + this._blockRot = false ; + this._TopBottom = false ; + this._camera = camera ; + this._orbitControls = orbitControls ; + this._dir = null ; + this._lastSelFace = null ; + this._currSelFace = null ; + this._color = null ; + this._name = null ; + this._name_click = null ; + this._interp = null ; + this._animation = null ; + this._faceList = [] ; + this._red = 0xd9534f ; + this._green = 0x5cb85c ; + this._blue = 0x0275d8 ; + this._vers = null ; + this._rot = null ; + this._handleMouseMove = this._handleMouseMove.bind( this) ; + this._handleMouseClick = this._handleMouseClick.bind( this) ; + this._listen() ; + } + + _listen() { + this.domElement.addEventListener( 'mousemove', this._handleMouseMove) ; + this.domElement.addEventListener( 'click', this._handleMouseClick) ; + } + + _handleMouseClick( event) { + const x = ( event.offsetX / event.target.clientWidth) * 2 - 1 ; + const y = -( event.offsetY / event.target.clientHeight) * 2 + 1 ; + this._checkSideTouch( x, y) ; + } + + _checkSideTouch( x, y) { + const raycaster = new THREE1.Raycaster() ; + raycaster.setFromCamera( { x, y }, this._camera) ; + const intersects = raycaster.intersectObjects( this._cube.children, true) ; + if ( intersects.length) { + for ( let { object } of intersects) { + if ( object.name) { + this._name_click = object.name ; + this._rotateTheCube( object.name) ; + break ; + } + } + } + } + + _rotateTheCube( side) { + switch ( side) { + case FACES.FRONT: + this._setCubeAngles( 0, 0, 0) ; + break ; + case FACES.RIGHT: + this._setCubeAngles( 0, -90, 0) ; + break ; + case FACES.BACK: + this._setCubeAngles( 0, -180, 0) ; + break ; + case FACES.LEFT: + this._setCubeAngles( 0, -270, 0) ; + break ; + case FACES.TOP: + this._setCubeAngles( 90, 0, 0) ; + break ; + case FACES.BOTTOM: + this._setCubeAngles( -90, 0, 0) ; + break ; + case FACES.TOP_FRONT_EDGE: + this._setCubeAngles( 45, 0, 0) ; + break ; + case FACES.TOP_RIGHT_EDGE: + this._setCubeAngles( 45, -90, 0) ; + break ; + case FACES.TOP_BACK_EDGE: + this._setCubeAngles( 45, -180, 0) ; + break ; + case FACES.TOP_LEFT_EDGE: + this._setCubeAngles( 45, -270, 0) ; + break ; + case FACES.BOTTOM_FRONT_EDGE: + this._setCubeAngles( -45, 0, 0) ; + break ; + case FACES.BOTTOM_RIGHT_EDGE: + this._setCubeAngles( -45, -90, 0) ; + break ; + case FACES.BOTTOM_BACK_EDGE: + this._setCubeAngles( -45, -180, 0) ; + break ; + case FACES.BOTTOM_LEFT_EDGE: + this._setCubeAngles( -45, -270, 0) ; + break ; + case FACES.FRONT_RIGHT_EDGE: + this._setCubeAngles( 0, -45, 0) ; + break ; + case FACES.BACK_RIGHT_EDGE: + this._setCubeAngles( 0, -135, 0) ; + break ; + case FACES.BACK_LEFT_EDGE: + this._setCubeAngles( 0, -225, 0) ; + break ; + case FACES.FRONT_LEFT_EDGE: + this._setCubeAngles( 0, -315, 0) ; + break ; + case FACES.TOP_FRONT_RIGHT_CORNER: + this._setCubeAngles( 45, -45, 0) ; + break ; + case FACES.TOP_BACK_RIGHT_CORNER: + this._setCubeAngles(45, -135, 0); + break; + case FACES.TOP_BACK_LEFT_CORNER: + this._setCubeAngles( 45, -225, 0) ; + break ; + case FACES.TOP_FRONT_LEFT_CORNER: + this._setCubeAngles( 45, -315, 0) ; + break ; + case FACES.BOTTOM_FRONT_RIGHT_CORNER: + this._setCubeAngles(-45, -45, 0); + break ; + case FACES.BOTTOM_BACK_RIGHT_CORNER: + this._setCubeAngles( -45, -135, 0) ; + break ; + case FACES.BOTTOM_BACK_LEFT_CORNER: + this._setCubeAngles( -45, -225, 0) ; + break ; + case FACES.BOTTOM_FRONT_LEFT_CORNER: + this._setCubeAngles( -45, -315, 0) ; + break ; + default: + break ; + } + } + + _setCubeAngles( x, y, z) { + const base = this._cube.rotation ; + this._blockRot = true ; + this._animation = { + base: { + x: base.x, + y: base.y, + z: base.z + }, + delta: { + x: calculateAngleDelta( base.x, x * toRad, 'x'), + y: calculateAngleDelta( base.y, y * toRad, 'y'), + z: calculateAngleDelta( base.z, z * toRad, 'z') + }, + duration: 500, + time: Date.now() + } ; + } + + _handleMouseMove( event) { + const x = ( event.offsetX / event.target.clientWidth) * 2 - 1 ; + const y = -( event.offsetY / event.target.clientHeight) * 2 + 1 ; + this._checkSideOver( x, y) ; + } + + + _checkSideOver(x, y) { + const raycaster = new THREE1.Raycaster() ; + raycaster.setFromCamera( { x, y }, this._camera) ; + const intersects = raycaster.intersectObjects( this._cube.children, true) ; + + // check hover + if ( intersects.length) { + for ( let { object } of intersects) { + if ( object.name) { + const prop = CUBE_FACES.find( prop => prop.name === object.name) ; + object.parent.children.forEach( function( child) { + if ( child.name === object.name) { + child.material.color.setHex(ACCENTCOLOR); + } + }); + break; + } + } + + if ( intersects[0].object.name != null){ + this._name = intersects[0].object.name ; + } + } + else { + this._name = null ; + } + } + + update( orbitControls) { + this._animate() ; + this._orbitControls = orbitControls ; + } + + _animate() { + this._orbitControls.object.updateMatrix() ; + var invRotMat = new THREE1.Matrix4() ; + invRotMat.extractRotation( this._orbitControls.object.matrix) ; + invRotMat.invert() ; + var euler = new THREE1.Euler() ; + euler.setFromRotationMatrix( invRotMat) ; + this._cube.rotation.set( euler.x, euler.y, euler.z) ; + + if( this._animation){ + const now = Date.now() ; + const { duration, time } = this._animation; + const alpha = Math.min((( now - time) / duration), 1) ; + this._interp = alpha ; + if ( alpha == 1) { + this._animation = null ; + this._blockRot = false ; + if ( this._name_click == 1 || this._name_click == 6){ + this._TopBottomRotation( this._name_click, this._orbitControls) ; + } + } + this.dispatchEvent({ + type: 'angle-change', + quaternion: this._cube.quaternion.clone(), + t: alpha + }) ; + } + else { + this._interp = null ; + } + } + + _TopBottomRotation( type, orbit){ + const duration = 150 ; + const start = performance.now() ; + const maxAlpha = 1 ; + + var theta_i = orbit.object.rotation.z ; + var theta_tn = 0 ; + var theta_to = 0 ; + var theta_t = theta_i ; + var theta_tt = theta_i ; + var somma = 0 ; + + function loop() { + const now = performance.now() ; + const delta = now - start ; + const alpha = Math.min( delta/duration, maxAlpha); + if ( type == 1){ + if ( theta_i >= -Math.PI / 2 && theta_i <= Math.PI / 2){ + theta_tt = theta_t ; + if ( theta_i >= 0){ + theta_t = theta_i - alpha * ( Math.PI / 2 + theta_i) ; + var jump = theta_t - theta_tt ; + somma += jump ; + orbit.rotateLeft( - jump) ; + } + if( theta_i < 0) { + theta_t = theta_i - alpha * ( Math.PI / 2 + theta_i); + var jump = theta_t - theta_tt ; + orbit.rotateLeft( - jump) ; + } + } + else { + theta_tt = theta_t ; + if ( theta_i >= 0){ + theta_t = theta_i + alpha * ( Math.PI/2 + Math.PI - theta_i) ; + var jump = theta_t - theta_tt ; + orbit.rotateLeft( - jump) ; + } + if ( theta_i < 0){ + theta_t = theta_i + alpha * (- theta_i - Math.PI / 2) ; + var jump = theta_t - theta_tt ; + orbit.rotateLeft( - jump) ; + } + } + } + if ( type == 6){ + if( theta_i >= -Math.PI/2 && theta_i <= Math.PI / 2){ + theta_tt = theta_t ; + if ( theta_i >= 0){ + theta_t = theta_i + alpha * ( Math.PI / 2 - theta_i) ; + var jump = theta_t - theta_tt ; + orbit.rotateLeft( jump) ; + } + if( theta_i < 0){ + theta_t = theta_i + alpha * ( Math.PI / 2 - theta_i) ; + var jump = theta_t - theta_tt ; + orbit.rotateLeft( jump) ; + } + } + else{ + theta_tt = theta_t ; + if ( theta_i >= 0){ + theta_t = theta_i - alpha * ( theta_i - Math.PI / 2) ; + var jump = theta_t - theta_tt ; + orbit.rotateLeft(jump); + } + if (theta_i < 0){ + theta_t = theta_i + alpha * ( Math.PI + Math.PI / 2 + theta_i); + var jump = theta_t - theta_tt ; + orbit.rotateLeft( - jump) ; + } + } + } + + + orbit.update() ; + if ( alpha !== maxAlpha){ + return requestAnimationFrame( loop) ; + } + } + + loop() ; + + } + + _animateCubeRotation({ base, delta }, alpha) { + const ease = (Math.sin(((alpha * 2) - 1) * Math.PI * 0.5) + 1) * 0.5 ; + let angleX = -TWOPI + base.x + delta.x * ease ; + let angleY = -TWOPI + base.y + delta.y * ease ; + let angleZ = -TWOPI + base.z + delta.z * ease ; + this._cube.rotation.set( angleX % TWOPI, angleY % TWOPI, angleZ % TWOPI) ; + } + + _colorCube() { + // defining standard color ( tone mapping Toy ) + var blue = this._blue ; + var red = this._red ; + var green = this._green ; + + // main faces + this._cube.children[0].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[0].children[1].material.color = new THREE1.Color( green) ; + this._cube.children[0].children[2].material.color = new THREE1.Color( red) ; + this._cube.children[0].children[3].material.color = new THREE1.Color( green) ; + this._cube.children[0].children[4].material.color = new THREE1.Color( blue) ; + this._cube.children[0].children[5].material.color = new THREE1.Color( blue) ; + + // other faces + this._cube.children[1].children[0].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[1].children[0].children[1].material.color = new THREE1.Color( green) ; + this._cube.children[1].children[0].children[2].material.color = new THREE1.Color( blue) ; + this._cube.children[1].children[1].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[1].children[1].children[1].material.color = new THREE1.Color( red) ; + this._cube.children[1].children[1].children[2].material.color = new THREE1.Color( blue) ; + this._cube.children[1].children[2].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[1].children[2].children[1].material.color = new THREE1.Color( green); + this._cube.children[1].children[2].children[2].material.color = new THREE1.Color( blue) ; + this._cube.children[1].children[3].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[1].children[3].children[1].material.color = new THREE1.Color( red) ; + this._cube.children[1].children[3].children[2].material.color = new THREE1.Color (blue) ; + this._cube.children[2].children[0].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[2].children[0].children[1].material.color = new THREE1.Color( green); + this._cube.children[2].children[0].children[2].material.color = new THREE1.Color( blue) ; + this._cube.children[2].children[1].children[0].material.color = new THREE1.Color( green); + this._cube.children[2].children[1].children[1].material.color = new THREE1.Color( red) ; + this._cube.children[2].children[1].children[2].material.color = new THREE1.Color( blue); + this._cube.children[2].children[2].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[2].children[2].children[1].material.color = new THREE1.Color( green) ; + this._cube.children[2].children[2].children[2].material.color = new THREE1.Color( blue) ; + this._cube.children[2].children[3].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[2].children[3].children[1].material.color = new THREE1.Color( red) ; + this._cube.children[2].children[3].children[2].material.color = new THREE1.Color( blue); + this._cube.children[3].children[0].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[3].children[0].children[1].material.color = new THREE1.Color( blue); + this._cube.children[3].children[1].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[3].children[1].children[1].material.color = new THREE1.Color( blue); + this._cube.children[3].children[2].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[3].children[2].children[1].material.color = new THREE1.Color( blue); + this._cube.children[3].children[3].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[3].children[3].children[1].material.color = new THREE1.Color( blue) ; + this._cube.children[4].children[0].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[4].children[0].children[1].material.color = new THREE1.Color( blue) ; + this._cube.children[4].children[1].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[4].children[1].children[1].material.color = new THREE1.Color( blue) ; + this._cube.children[4].children[2].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[4].children[2].children[1].material.color = new THREE1.Color( blue); + this._cube.children[4].children[3].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[4].children[3].children[1].material.color = new THREE1.Color( blue) ; + this._cube.children[5].children[0].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[5].children[0].children[1].material.color = new THREE1.Color( green) ; + this._cube.children[5].children[1].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[5].children[1].children[1].material.color = new THREE1.Color( red) ; + this._cube.children[5].children[2].children[0].material.color = new THREE1.Color( red) ; + this._cube.children[5].children[2].children[1].material.color = new THREE1.Color( green) ; + this._cube.children[5].children[3].children[0].material.color = new THREE1.Color( green) ; + this._cube.children[5].children[3].children[1].material.color = new THREE1.Color( red) ; + + // setting second Color for raytracaing effect + this._cube.children[0].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[0].children[1].material.oldColor = new THREE1.Color( green); + this._cube.children[0].children[2].material.oldColor = new THREE1.Color( red) ; + this._cube.children[0].children[3].material.oldColor = new THREE1.Color( green); + this._cube.children[0].children[4].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[0].children[5].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[1].children[0].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[1].children[0].children[1].material.oldColor = new THREE1.Color( green) ; + this._cube.children[1].children[0].children[2].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[1].children[1].children[0].material.oldColor = new THREE1.Color( green) ; + this._cube.children[1].children[1].children[1].material.oldColor = new THREE1.Color( red) ; + this._cube.children[1].children[1].children[2].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[1].children[2].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[1].children[2].children[1].material.oldColor = new THREE1.Color( green); + this._cube.children[1].children[2].children[2].material.oldColor = new THREE1.Color( blue); + this._cube.children[1].children[3].children[0].material.oldColor = new THREE1.Color( green) ; + this._cube.children[1].children[3].children[1].material.oldColor = new THREE1.Color( red) ; + this._cube.children[1].children[3].children[2].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[2].children[0].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[2].children[0].children[1].material.oldColor = new THREE1.Color( green) ; + this._cube.children[2].children[0].children[2].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[2].children[1].children[0].material.oldColor = new THREE1.Color( green); + this._cube.children[2].children[1].children[1].material.oldColor = new THREE1.Color( red) ; + this._cube.children[2].children[1].children[2].material.oldColor = new THREE1.Color( blue); + this._cube.children[2].children[2].children[0].material.oldColor = new THREE1.Color( red); + this._cube.children[2].children[2].children[1].material.oldColor = new THREE1.Color( green); + this._cube.children[2].children[2].children[2].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[2].children[3].children[0].material.oldColor = new THREE1.Color( green); + this._cube.children[2].children[3].children[1].material.oldColor = new THREE1.Color( red) ; + this._cube.children[2].children[3].children[2].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[3].children[0].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[3].children[0].children[1].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[3].children[1].children[0].material.oldColor = new THREE1.Color( green) ; + this._cube.children[3].children[1].children[1].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[3].children[2].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[3].children[2].children[1].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[3].children[3].children[0].material.oldColor = new THREE1.Color( green) ; + this._cube.children[3].children[3].children[1].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[4].children[0].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[4].children[0].children[1].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[4].children[1].children[0].material.oldColor = new THREE1.Color( green) ; + this._cube.children[4].children[1].children[1].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[4].children[2].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[4].children[2].children[1].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[4].children[3].children[0].material.oldColor = new THREE1.Color( green) ; + this._cube.children[4].children[3].children[1].material.oldColor = new THREE1.Color( blue) ; + this._cube.children[5].children[0].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[5].children[0].children[1].material.oldColor = new THREE1.Color(green) ; + this._cube.children[5].children[1].children[0].material.oldColor = new THREE1.Color( green) ; + this._cube.children[5].children[1].children[1].material.oldColor = new THREE1.Color( red) ; + this._cube.children[5].children[2].children[0].material.oldColor = new THREE1.Color( red) ; + this._cube.children[5].children[2].children[1].material.oldColor = new THREE1.Color( green) ; + this._cube.children[5].children[3].children[0].material.oldColor = new THREE1.Color( green) ; + this._cube.children[5].children[3].children[1].material.oldColor = new THREE1.Color( red) ; + + // adding faces to list + this._face_list = [] ; + this._face_list.push( this._cube.children[0].children[0]) ; + this._face_list.push( this._cube.children[0].children[1]) ; + this._face_list.push( this._cube.children[0].children[2]) ; + this._face_list.push( this._cube.children[0].children[3]) ; + this._face_list.push( this._cube.children[0].children[4]) ; + this._face_list.push( this._cube.children[0].children[5]) ; + this._face_list.push( this._cube.children[1].children[0].children[0]) ; + this._face_list.push( this._cube.children[1].children[0].children[1]) ; + this._face_list.push( this._cube.children[1].children[0].children[2]) ; + this._face_list.push( this._cube.children[1].children[1].children[0]) ; + this._face_list.push( this._cube.children[1].children[1].children[1]) ; + this._face_list.push( this._cube.children[1].children[1].children[2]) ; + this._face_list.push( this._cube.children[1].children[2].children[0]) ; + this._face_list.push( this._cube.children[1].children[2].children[1]) ; + this._face_list.push( this._cube.children[1].children[2].children[2]) ; + this._face_list.push( this._cube.children[1].children[3].children[0]) ; + this._face_list.push( this._cube.children[1].children[3].children[1]) ; + this._face_list.push( this._cube.children[1].children[3].children[2]) ; + this._face_list.push( this._cube.children[2].children[0].children[0]) ; + this._face_list.push( this._cube.children[2].children[0].children[1]) ; + this._face_list.push( this._cube.children[2].children[0].children[2]) ; + this._face_list.push( this._cube.children[2].children[1].children[0]) ; + this._face_list.push( this._cube.children[2].children[1].children[1]) ; + this._face_list.push( this._cube.children[2].children[1].children[2]) ; + this._face_list.push( this._cube.children[2].children[2].children[0]) ; + this._face_list.push( this._cube.children[2].children[2].children[1]) ; + this._face_list.push( this._cube.children[2].children[2].children[2]) ; + this._face_list.push( this._cube.children[2].children[3].children[0]) ; + this._face_list.push( this._cube.children[2].children[3].children[1]) ; + this._face_list.push( this._cube.children[2].children[3].children[2]) ; + this._face_list.push( this._cube.children[3].children[0].children[0]) ; + this._face_list.push( this._cube.children[3].children[0].children[1]) ; + this._face_list.push( this._cube.children[3].children[1].children[0]) ; + this._face_list.push( this._cube.children[3].children[1].children[1]) ; + this._face_list.push( this._cube.children[3].children[2].children[0]) ; + this._face_list.push( this._cube.children[3].children[2].children[1]) ; + this._face_list.push( this._cube.children[3].children[3].children[0]) ; + this._face_list.push( this._cube.children[3].children[3].children[1]) ; + this._face_list.push( this._cube.children[4].children[0].children[0]) ; + this._face_list.push( this._cube.children[4].children[0].children[1]) ; + this._face_list.push( this._cube.children[4].children[1].children[0]) ; + this._face_list.push( this._cube.children[4].children[1].children[1]) ; + this._face_list.push( this._cube.children[4].children[2].children[0]) ; + this._face_list.push( this._cube.children[4].children[2].children[1]) ; + this._face_list.push( this._cube.children[4].children[3].children[0]) ; + this._face_list.push( this._cube.children[4].children[3].children[1]) ; + this._face_list.push( this._cube.children[5].children[0].children[0]) ; + this._face_list.push( this._cube.children[5].children[0].children[1]) ; + this._face_list.push( this._cube.children[5].children[1].children[0]) ; + this._face_list.push( this._cube.children[5].children[1].children[1]) ; + this._face_list.push( this._cube.children[5].children[2].children[0]) ; + this._face_list.push( this._cube.children[5].children[2].children[1]) ; + this._face_list.push( this._cube.children[5].children[3].children[0]) ; + this._face_list.push( this._cube.children[5].children[3].children[1]) ; + } + + _getVersorAndRotation() { + switch ( this._name) { + case 2: //FRONT + this._vers = new THREE1.Vector3( 0, 0, 1) ; + this._rot = new THREE1.Vector3( 0 * toRad, 0 * toRad, 0 * toRad) ; + break ; + case 4: //BACK + this._vers = new THREE1.Vector3( 0, 0, -1) ; + this._rot = new THREE1.Vector3( 0 * toRad, 180 * toRad, 0 * toRad) ; + break ; + case 3: //RIGHT + this._vers = new THREE1.Vector3( 1, 0, 0) ; + this._rot = new THREE1.Vector3( 0 * toRad, -90 * toRad, 0 * toRad) ; + break ; + case 5: //LEFT + this._vers = new THREE1.Vector3( -1, 0, 0) ; + this._rot = new THREE1.Vector3( 0 * toRad, -270 * toRad, 0 * toRad) ; + break ; + case 1: //TOP + this._vers = new THREE1.Vector3( 0, 1, 0) ; + this._rot = new THREE1.Vector3( 90 * toRad, 0 * toRad, 0 * toRad) ; + break ; + case 6: //BOTTOM + this._vers = new THREE1.Vector3( 0, -1, 0) ; + this._rot = new THREE1.Vector3( -90 * toRad, 0 * toRad, 0 * toRad) ; + break ; + case 11: //FRONT-RIGHT + this._vers = new THREE1.Vector3( 1 / Math.sqrt( 2), 0, 1 / Math.sqrt( 2)) ; + this._rot = new THREE1.Vector3( 0 * toRad, -45 * toRad, 0 * toRad) ; + break ; + case 7: //FRONT-TOP + this._vers = new THREE1.Vector3( 0, 1 / Math.sqrt( 2), 1 / Math.sqrt( 2)) ; + this._rot = new THREE1.Vector3(45 * toRad, 0 * toRad, 0 * toRad) ; + break ; + case 14: //FRONT-LEFT + this._vers = new THREE1.Vector3( -1 / Math.sqrt( 2), 0, 1 / Math.sqrt( 2)) ; + this._rot = new THREE1.Vector3( 0 * toRad, -315 * toRad, 0 * toRad) ; + break ; + case 15: //FRONT-BOTTOM + this._vers = new THREE1.Vector3( 0, -1 / Math.sqrt( 2), 1 / Math.sqrt( 2)) ; + this._rot = new THREE1.Vector3(-45 * toRad, 0 * toRad, 0 * toRad) ; + break ; + case 12: //BACK-RIGHT + this._vers = new THREE1.Vector3( 1 / Math.sqrt( 2), 0, -1 / Math.sqrt( 2)) ; + this._rot = new THREE1.Vector3( 0 * toRad, -135 * toRad, 0 * toRad) ; + break ; + case 9: //BACK-TOP + this._vers = new THREE1.Vector3( 0, 1 / Math.sqrt( 2), -1 / Math.sqrt( 2)) ; + this._rot = new THREE1.Vector3( 45 * toRad, -180 * toRad, 0 * toRad) ; + break ; + case 13: //BACK-LEFT + this._vers = new THREE1.Vector3( -1 / Math.sqrt(2), 0, -1 / Math.sqrt(2)) ; + this._rot = new THREE1.Vector3(0 * toRad, -225 * toRad, 0 * toRad) ; + break ; + case 17: //BACK-BOTTOM + this._vers = new THREE1.Vector3( 0, -1 / Math.sqrt( 2), -1 / Math.sqrt( 2)) ; + this._rot = new THREE1.Vector3( -45 * toRad, -180 * toRad, 0 * toRad) ; + break ; + case 8: //RIGHT-TOP + this._vers = new THREE1.Vector3( 1 / Math.sqrt( 2), 1 / Math.sqrt( 2), 0) ; + this._rot = new THREE1.Vector3( 45 * toRad, -90 * toRad, 0 * toRad) ; + break ; + case 16: //RIGHT-BOTTOM + this._vers = new THREE1.Vector3( 1 / Math.sqrt(2), -1 / Math.sqrt(2), 0) ; + this._rot = new THREE1.Vector3( -45 * toRad, -90 * toRad, 0 * toRad) ; + break ; + case 10: //LEFT-TOP + this._vers = new THREE1.Vector3( -1 / Math.sqrt(2), 1 / Math.sqrt(2), 0) ; + this._rot = new THREE1.Vector3( 45 * toRad, -270 * toRad, 0 * toRad) ; + break ; + case 18: //LEFT-BOTTOM + this._vers = new THREE1.Vector3( -1 / Math.sqrt(2), -1 / Math.sqrt(2), 0) ; + this._rot = new THREE1.Vector3(-45 * toRad, 270 * toRad, 0 * toRad) ; + break ; + case 21: //TOP-LEFT-BACK + this._vers = new THREE1.Vector3( -1 / Math.sqrt( 3), 1 / Math.sqrt( 3), -1 / Math.sqrt( 3)) ; + this._rot = new THREE1.Vector3( 45 * toRad, -225 * toRad, 0 * toRad) ; + break ; + case 20: //TOP-BACK-RIGHT + this._vers = new THREE1.Vector3( 1 / Math.sqrt( 3), 1 / Math.sqrt( 3), -1 / Math.sqrt( 3)) ; + this._rot = new THREE1.Vector3( 45 * toRad, -135 * toRad, 0 * toRad) ; + break ; + case 19: //TOP-RIGHT-FRONT + this._vers = new THREE1.Vector3( 1 / Math.sqrt( 3), 1 / Math.sqrt( 3), 1 / Math.sqrt( 3)) ; + this._rot = new THREE1.Vector3( 45 * toRad, -45 * toRad, 0 * toRad) ; + break ; + case 22: //TOP-FRONT-LEFT + this._vers = new THREE1.Vector3( -1 / Math.sqrt( 3), 1 / Math.sqrt( 3), 1 / Math.sqrt( 3)) ; + this._rot = new THREE1.Vector3( 45 * toRad, -315 * toRad, 0 * toRad) ; + break ; + case 26: //BOTTOM-LEFT-FRONT + this._vers = new THREE1.Vector3( -1 / Math.sqrt( 3), -1 / Math.sqrt( 3), 1 / Math.sqrt( 3)) ; + this._rot = new THREE1.Vector3(-45 * toRad, -315 * toRad, 0 * toRad); + break ; + case 23: //BOTTOM-FRONT-RIGHT + this._vers = new THREE1.Vector3( 1 / Math.sqrt( 3), -1 / Math.sqrt( 3), 1 / Math.sqrt( 3)) ; + this._rot = new THREE1.Vector3(-45 * toRad, -45 * toRad, 0 * toRad); + break ; + case 25: //BOTTOM-LEFT-BACK + this._vers = new THREE1.Vector3( -1 / Math.sqrt( 3), -1 / Math.sqrt( 3), -1 / Math.sqrt( 3)) ; + this._rot = new THREE1.Vector3(-45 * toRad, -225 * toRad, 0 * toRad); + break ; + case 24: //BOTTOM-BACK-RIGHT + this._vers = new THREE1.Vector3( 1 / Math.sqrt( 3), -1 / Math.sqrt( 3), -1 / Math.sqrt( 3)) ; + this._rot = new THREE1.Vector3(-45 * toRad, -135 * toRad, 0 * toRad) ; + break ; + } + } + + setQuaternion( quaternion) { + this._cube.setRotationFromQuaternion( quaternion) ; + } + + getObject() { + return this._cube ; + } +} + +class ViewCube extends THREE1.Object3D { + constructor({ + size = 60, + edge = 5, + outline = true, + bgColor = 0xCCCCCC, + hoverColor = 0xFFFFFF, + outlineColor = 0x999999 + }) { + super() ; + this._cubeSize = size ; + this._edgeSize = edge ; + this._outline = outline ; + this._bgColor = bgColor ; + this._hoverColor = hoverColor ; + this._outlineColor = outlineColor ; + this._build() ; + } + _build() { + const faceSize = this._cubeSize - this._edgeSize * 2 ; + const faceOffset = this._cubeSize / 2 ; + const borderSize = this._edgeSize ; + + /* faces: front, right, back, left, top, bottom */ + const cubeFaces = this._createCubeFaces( faceSize, faceOffset); + + for ( let [i, props] of BOX_FACES.entries()) { + cubeFaces.children[i].name = props.name ; + cubeFaces.children[i].material.color.setHex( this._bgColor) ; + cubeFaces.children[i].material.map = props.map ; + } + this.add( cubeFaces) ; + + /* corners: top, bottom */ + const corners = [] ; + for ( let [i, props] of CORNER_FACES.entries()) { + const corner = this._createCornerFaces( borderSize, faceOffset, props.name, { color: this._bgColor}) ; + corner.rotateOnAxis( new THREE1.Vector3( 0, 1, 0), ( i % 4) * 90 * toRad) ; + corners.push( corner) ; + } + const topCorners = new THREE1.Group() ; + const bottomCorners = new THREE1.Group() ; + this.add( topCorners.add( ...corners.slice(0, 4))) ; + this.add( bottomCorners.add( ...corners.slice(4)).rotateOnAxis( new THREE1.Vector3( 1, 0, 0), 180 * toRad)) ; + + /* edges: top + bottom */ + const edges = [] ; + for ( let [i, props] of EDGE_FACES.entries()) { + const edge = this._createHorzEdgeFaces( faceSize, borderSize, faceOffset, props.name, { color: this._bgColor}) ; + edge.rotateOnAxis( new THREE1.Vector3(0, 1, 0), (i % 4) * 90 * toRad) ; + edges.push( edge) ; + } + const topEdges = new THREE1.Group() ; + const bottomEdges = new THREE1.Group() ; + this.add( topEdges.add( ...edges.slice(0, 4))) ; + this.add( bottomEdges.add( ...edges.slice(4)).rotateOnAxis( new THREE1.Vector3(1, 0, 0), 180 * toRad)) ; + + /* edges on the side */ + const sideEdges = new THREE1.Group() ; + for ( let [i, props] of EDGE_FACES_SIDE.entries()) { + const edge = this._createVertEdgeFaces( borderSize, faceSize, faceOffset, props.name, { color: this._bgColor}) ; + edge.rotateOnAxis( new THREE1.Vector3( 0, 1, 0), i * 90 * toRad) ; + sideEdges.add( edge) ; + } + this.add( sideEdges) ; + + if ( this._outline) { + this.add( this._createCubeOutline( this._cubeSize)) ; + } + } + _createFace( size, position, { axis = [0, 1, 0], angle = 0, name = "", matProps = {} } = {}) { + if ( ! Array.isArray( size)) size = [size, size] ; + const material = new THREE1.MeshBasicMaterial( matProps) ; + const geometry = new THREE1.PlaneGeometry( size[0], size[1]) ; + const face = new THREE1.Mesh( geometry, material) ; + face.name = name ; + face.rotateOnAxis( new THREE1.Vector3( ...axis), angle * toRad) ; + face.position.set( ...position); + return face ; + } + _createCubeFaces( faceSize, offset) { + const faces = new THREE1.Object3D() ; + faces.add( this._createFace( faceSize, [0, 0, offset], { axis: [0, 1, 0], angle: 0 })); + faces.add( this._createFace( faceSize, [offset, 0, 0], { axis: [0, 1, 0], angle: 90 })); + faces.add( this._createFace( faceSize, [0, 0, -offset], { axis: [0, 1, 0], angle: 180 })); + faces.add( this._createFace( faceSize, [-offset, 0, 0], { axis: [0, 1, 0], angle: 270 })); + faces.add(( this._createFace( faceSize, [0, offset, 0], { axis: [1, 0, 0], angle: -90 })).rotateOnAxis( new THREE1.Vector3(0,0,1), -Math.PI / 2)) ; + faces.add( this._createFace( faceSize, [0, -offset, 0], { axis: [1, 0, 0], angle: 90 }).rotateOnAxis( new THREE1.Vector3(0,0,1), Math.PI / 2)) ; + return faces; + } + _createCornerFaces( faceSize, offset, name = "", matProps = {}) { + const corner = new THREE1.Object3D() ; + const borderOffset = offset - faceSize / 2 ; + corner.add(this._createFace( faceSize, [borderOffset, borderOffset, offset], { axis: [0, 1, 0], angle: 0, matProps, name })) ; + corner.add( this._createFace( faceSize, [offset, borderOffset, borderOffset], { axis: [0, 1, 0], angle: 90, matProps, name })) ; + corner.add( this._createFace( faceSize, [borderOffset, offset, borderOffset], { axis: [1, 0, 0], angle: -90, matProps, name })) ; + return corner ; + } + _createHorzEdgeFaces( w, h, offset, name = "", matProps = {}) { + const edge = new THREE1.Object3D() ; + const borderOffset = offset - h / 2 ; + edge.add( this._createFace( [w, h], [0, borderOffset, offset], { axis: [0, 1, 0], angle: 0, name, matProps })) ; + edge.add( this._createFace( [w, h], [0, offset, borderOffset], { axis: [1, 0, 0], angle: -90, name, matProps })) ; + return edge ; + } + _createVertEdgeFaces( w, h, offset, name = "", matProps = {}) { + const edge = new THREE1.Object3D() ; + const borderOffset = offset - w / 2 ; + edge.add( this._createFace([w, h], [borderOffset, 0, offset], { axis: [0, 1, 0], angle: 0, name, matProps })) ; + edge.add( this._createFace([w, h], [offset, 0, borderOffset], { axis: [0, 1, 0], angle: 90, name, matProps })) ; + return edge; + } + _createCubeOutline( size) { + const geometry = new THREE1.BoxGeometry( size, size, size) ; + const geo = new THREE1.EdgesGeometry( geometry); + const mat = new THREE1.LineBasicMaterial({ color: this._outlineColor, linewidth: 1 }) ; + const wireframe = new THREE1.LineSegments( geo, mat) ; + return wireframe ; + } +} + +var toRad = Math.PI / 180 ; +var TWOPI = 2 * Math.PI ; + +function calculateAngleDelta( from, to, axis) { + + const direct = to - from ; + const altA = direct - TWOPI ; + const altB = direct + TWOPI ; + + if ( Math.abs( direct) > Math.abs( altA)) { + return altA ; + } + else if ( Math.abs( direct) > Math.abs( altB)) { + return altB ; + } + + // direzione sempre compresa tra [-PI, +PI] + return direct ; +} + +function createTextSprite( text, props) { + const fontface = props.font || 'Helvetica' ; + const fontsize = props.fontSize || 30 ; + const width = props.width || 200 ; + const height = props.height || 200 ; + const bgColor = props.color ? props.bgColor.join(', ') : "255, 255, 255, 1.0" ; + const fgColor = props.color ? props.color.join(', ') : "0, 0, 0, 1.0" ; + const canvas = document.createElement( 'canvas') ; + canvas.width = width ; + canvas.height = height ; + const context = canvas.getContext( '2d'); + context.font = `bold ${fontsize}px ${fontface}` ; + context.fillStyle = `rgba(${bgColor})` ; + context.fillRect( 0, 0, width, height) ; + // get size data (height depends only on font size) + const metrics = context.measureText( text); + const textWidth = metrics.width ; + // text color + context.fillStyle = `rgba(${fgColor})`; + context.fillText( text, width / 2 - textWidth / 2, height / 2 + fontsize / 2 - 2) ; + // canvas contents will be used for a texture + const texture = new THREE1.Texture( canvas) + texture.minFilter = THREE1.LinearFilter ; + texture.needsUpdate = true ; + return texture ; +} + +var FACES = { + TOP: 1, + FRONT: 2, + RIGHT: 3, + BACK: 4, + LEFT: 5, + BOTTOM: 6, + + TOP_FRONT_EDGE: 7, + TOP_RIGHT_EDGE: 8, + TOP_BACK_EDGE: 9, + TOP_LEFT_EDGE: 10, + + FRONT_RIGHT_EDGE: 11, + BACK_RIGHT_EDGE: 12, + BACK_LEFT_EDGE: 13, + FRONT_LEFT_EDGE: 14, + + BOTTOM_FRONT_EDGE: 15, + BOTTOM_RIGHT_EDGE: 16, + BOTTOM_BACK_EDGE: 17, + BOTTOM_LEFT_EDGE: 18, + + TOP_FRONT_RIGHT_CORNER: 19, + TOP_BACK_RIGHT_CORNER: 20, + TOP_BACK_LEFT_CORNER: 21, + TOP_FRONT_LEFT_CORNER: 22, + + BOTTOM_FRONT_RIGHT_CORNER: 23, + BOTTOM_BACK_RIGHT_CORNER: 24, + BOTTOM_BACK_LEFT_CORNER: 25, + BOTTOM_FRONT_LEFT_CORNER: 26 +}; + +var BOX_FACES = [ + { + name: FACES.FRONT, + map: createTextSprite( "RIGHT", { fontSize: 60, font: "Arial Narrow, sans-serif" }) + }, + { + name: FACES.RIGHT, + map: createTextSprite( "FRONT", { fontSize: 60, font: "Arial Narrow, sans-serif" }) + }, + { + name: FACES.BACK, + map: createTextSprite( "LEFT", { fontSize: 60, font: "Arial Narrow, sans-serif" }) + }, + { + name: FACES.LEFT, + map: createTextSprite( "BACK", { fontSize: 60, font: "Arial Narrow, sans-serif" }) + }, + { + name: FACES.TOP, + map: createTextSprite( "TOP", { fontSize: 60, font: "Arial Narrow, sans-serif" }) + }, + { + name: FACES.BOTTOM, + map: createTextSprite( "BOTTOM", { fontSize: 40, font: "Arial Narrow, sans-serif" }) + } +]; +var CORNER_FACES = [ + { name: FACES.TOP_FRONT_RIGHT_CORNER }, + { name: FACES.TOP_BACK_RIGHT_CORNER }, + { name: FACES.TOP_BACK_LEFT_CORNER }, + { name: FACES.TOP_FRONT_LEFT_CORNER }, + { name: FACES.BOTTOM_BACK_RIGHT_CORNER }, + { name: FACES.BOTTOM_FRONT_RIGHT_CORNER }, + { name: FACES.BOTTOM_FRONT_LEFT_CORNER }, + { name: FACES.BOTTOM_BACK_LEFT_CORNER } +]; +var EDGE_FACES = [ + { name: FACES.TOP_FRONT_EDGE }, + { name: FACES.TOP_RIGHT_EDGE }, + { name: FACES.TOP_BACK_EDGE }, + { name: FACES.TOP_LEFT_EDGE }, + // flip back and front bottom edges + { name: FACES.BOTTOM_BACK_EDGE }, + { name: FACES.BOTTOM_RIGHT_EDGE }, + { name: FACES.BOTTOM_FRONT_EDGE }, + { name: FACES.BOTTOM_LEFT_EDGE }, +]; +var EDGE_FACES_SIDE = [ + { name: FACES.FRONT_RIGHT_EDGE }, + { name: FACES.BACK_RIGHT_EDGE }, + { name: FACES.BACK_LEFT_EDGE }, + { name: FACES.FRONT_LEFT_EDGE } +]; +// merge them all to ease the traversing +var CUBE_FACES = [...BOX_FACES, ...CORNER_FACES, ...EDGE_FACES, ...EDGE_FACES_SIDE] ; \ No newline at end of file diff --git a/TestArea_IIS01/THREEJS_DOORS/Images/Logo.png b/TestArea_IIS01/THREEJS_DOORS/Images/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6962a14d65bdfaf44cf5fa87d99f64edda525b8f GIT binary patch literal 25199 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 literal 0 HcmV?d00001 diff --git a/TestArea_IIS01/THREEJS_DOORS/Images/Thumbs.db b/TestArea_IIS01/THREEJS_DOORS/Images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..02bca49fe703ddd133249dd21d2ca4dcb07eea84 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/TestArea_IIS01/THREEJS_DOORS/index.html b/TestArea_IIS01/THREEJS_DOORS/index.html index c7e3efa..40d85ae 100644 --- a/TestArea_IIS01/THREEJS_DOORS/index.html +++ b/TestArea_IIS01/THREEJS_DOORS/index.html @@ -17,26 +17,39 @@
- - -
+
+ +
+
+ +
+
+
+
+ Camera settings : 
+ Zoom : Wheel-Scroll 
+ Pan : Mouse-Left and Drag ( hold ) 
+ Rotate : Mouse-Right and Drag ( hold ) 
+ Type : Key-O ( orthographic ) 
+        Key-P ( perspective ) 
+                        
+ Toggle Auto-rotation : Key-R 
+                        
+ Toggle Show-Dimension : Key-D
+                    
+
+
- +
+ \ No newline at end of file diff --git a/TestArea_IIS01/THREEJS_DOORS/style.css b/TestArea_IIS01/THREEJS_DOORS/style.css index 6229b49..7b70eb1 100644 --- a/TestArea_IIS01/THREEJS_DOORS/style.css +++ b/TestArea_IIS01/THREEJS_DOORS/style.css @@ -12,17 +12,51 @@ canvas { height: 100% ; } -#Info{ - position: fixed ; - top: 10 ; - left: 10 ; - /*border : 1px solid white ;*/ - width: 100% ; - height: 100px ; - color : white ; - font-size: 1.25em ; +#divMenu { + position: fixed ; + top: 10px ; + right: 10px ; + background-color: transparent ; + width: 250px ; } -#helpButton{ - text-decoration: underline ; +.container { + width: 100% ; + height: auto ; + margin-bottom: 10px ; +} + +.container::after { + content: "" ; + display: table ; + clear: both ; +} + +.container img { + width: 100% ; + height: auto ; + display: block ; +} + +#helpButton { + text-decoration: underline ; + float: right ; + height: auto ; +} + +#infoDiv { + width: 100% ; + height: auto ; + color: white ; + background-color: transparent ; + font-size: 0.9em ; +} + +#RefRender { + position: fixed ; + width: 200px ; + height: 200px ; + bottom: 10px ; + right: 10px ; + border: 1px solid black ; }