") ;
+ m_WriterM.OutText( "") ;
+ m_WriterM.OutText( "
") ;
+
+ return true ;
+}
+
+//----------------------------------------------------------------------------
+bool
+ExportThreeJS::FinishAmbient()
+{
+
+ /*
+ ORGANIZZAZIONE DELLA SCENA
+ - renderizzo prima le mesh trasparenti ordinate per distanza decrescente
+ - renderizzo tutti gli altri oggetti
+ */
+
+ // aggiungo alla lista di oggetti le mesh trasparenti riordinandole per distanza
+ // renderizzo prima le mesh (facce) lontane
+
+ m_lTranspSurf.sort([]( const sSurfDist& a, const sSurfDist& b) { return a.dDistance > b.dDistance; }) ;
+
+ //scorro le superfici trasparenti
+ for ( sSurfDist sCurrSurvDist : m_lTranspSurf)
+ {
+ m_Writer.OutText( " // ---------------------------------------------------------------------") ;
+ // aggiungo le mesh trasparenti alla mia lista di oggetti e alla scena (front e back)
+ m_Writer.OutText( " list_of_objects.push(front_surf_mesh" + sCurrSurvDist.sName + ");") ;
+ m_Writer.OutText( " list_of_objects.push(back_surf_mesh" + sCurrSurvDist.sName + ");") ;
+ }
+
+ // carico il gruppo radice
+ // carico nella scena tutti gli oggetti
+ m_Writer.OutText( " for (var i = 0; i < list_of_objects.length; i++)") ;
+ m_Writer.OutText( " {") ;
+ m_Writer.OutText( " scene.add(list_of_objects[i])") ;
+ m_Writer.OutText( " };");
+
+ // controllo menu Gui
+ m_Writer.OutText( " var center;") ;
+ m_Writer.OutText( " var boxCreated = false;") ;
+ m_Writer.OutText( " var box;") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " /*") ;
+ m_Writer.OutText( " const helper = new THREE.CameraHelper( camera );") ;
+ m_Writer.OutText( " scene.add( helper );") ;
+ m_Writer.OutText( " */") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " var controls = {") ;
+ m_Writer.OutText( " element: null,") ;
+ m_Writer.OutText( " motion : true,") ;
+ m_Writer.OutText( " tar : orbitControls.target,") ;
+ m_Writer.OutText( " reset : function() {") ;
+ m_Writer.OutText( " zoom = 1;") ;
+ m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + ", " + ToString( m_dHalfWidth) + ", " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_ZNear) + ", " + ToString( m_ZFar) + ");") ;
+ m_Writer.OutText( " camera.position.x = " + ToString( m_ptCamera.y) + ";") ;
+ m_Writer.OutText( " camera.position.y = " + ToString( m_ptCamera.z) + ";") ;
+ m_Writer.OutText( " camera.position.z = " + ToString( m_ptCamera.x) + ";") ;
+ m_Writer.OutText( " camera.lookAt(new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + "));") ;
+ m_Writer.OutText( " orbitControls = new OrbitControls(camera, document.getElementById('WebGL-output'));") ;
+ m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " document.getElementsByClassName('obit-controls-gizmo')[0].remove();") ;
+ m_Writer.OutText( " controlsGizmo = new OrbitControlsGizmo(orbitControls, { size: 100, padding : 8 });") ;
+ m_Writer.OutText( " document.body.appendChild(controlsGizmo.domElement);") ;
+ m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchmove', false);") ;
+ m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchstart', false);") ;
+ m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchend', false);") ;
+ m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchcancel', false);") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " if (boxCreated) {") ;
+ m_Writer.OutText( " box = new THREE.BoxHelper(controls.element, 0xff0000);") ;
+ m_Writer.OutText( " camera.position.y = " + ToString( m_ptMin.y + ( m_dimZ * 1.1)) + ";") ; //115%
+ m_Writer.OutText( " var center = box.geometry.boundingSphere.center;") ;
+ m_Writer.OutText( " orbitControls.target = center;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " },") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " }") ;
+
+ // Cerco il parametro dall'url del gruppo da selezionare
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " // Lettura Parametri -------------- url -------") ;
+ m_Writer.OutText( " const queryString = window.location.search;") ;
+ m_Writer.OutText( " if (queryString != '') {") ;
+ m_Writer.OutText( " const urlParams = new URLSearchParams(queryString);") ;
+ m_Writer.OutText( " const element = urlParams.get('id')") ;
+ //m_Writer.OutText( " element = element.normalize('NFD').replace(/[\u0300-\u036f]/g, '') ") ;
+ m_Writer.OutText( " findGroupByNameAndId(groupRoot, element);") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " // --------------------------------------------") ;
+
+
+ // funzione per ricavare un gruppo dato l'ID (name + ID)
+ m_Writer.OutText( "" );
+ m_Writer.OutText( " function findGroupByNameAndId(CurrentGroup, Id) {") ;
+ m_Writer.OutText( " CurrentGroup.children.forEach(element => {") ;
+ m_Writer.OutText( " if (element.name == Id) {") ;
+ // --- m_Writer.OutText( " ScanElements(element, true);") ; <---- original
+ m_Writer.OutText( " // creo il box per telecamera -----") ;
+ m_Writer.OutText( " controls.element = element;") ;
+ m_Writer.OutText( " createBox(element);") ;
+ m_Writer.OutText( " // ----------------------------------") ;
+ m_Writer.OutText( " EvidenziaLoadPage(element);") ;
+ m_Writer.OutText( " trovato = true;");
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " if (element.children.length != 0) {") ;
+ m_Writer.OutText( " findGroupByNameAndId(element, Id);") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " });") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " // --------------------------------------------") ;
+ m_Writer.OutText( "") ;
+
+ // funzione per ricavare il gruppo selezionato dal menu
+ // --- m_Writer.OutText( " selectElement = function(val) {") ;
+ // --- m_Writer.OutText(" ScanElements(val, true);");
+ // --- m_Writer.OutText( " }") ;
+
+ // funzione per creare il box al gruppo selezionato
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " function createBox(element) {") ;
+ m_Writer.OutText( " var box = new THREE.BoxHelper(element, 0xff0000);") ;
+ m_Writer.OutText( " camera.position.y = " + ToString(m_ptMin.y + (m_dimZ * 1.1))+ ";") ; //115%
+ m_Writer.OutText( " var center = box.geometry.boundingSphere.center;") ;
+ m_Writer.OutText( " orbitControls.target = center;") ;
+ m_Writer.OutText(" controls.tar.x = center.x;") ;
+ m_Writer.OutText(" controls.tar.y = center.y;") ;
+ m_Writer.OutText(" controls.tar.z = center.z;") ;
+ m_Writer.OutText(" boxCreated = true;") ;
+ m_Writer.OutText(" }");
+ m_Writer.OutText(" // --------------------------------------------");
+ m_Writer.OutText( "") ;
+
+ // creazione del menu Gui
+ m_Writer.OutText( " var gui = new dat.GUI({ width: 200 });") ;
+ m_Writer.OutText( " gui.add(controls, 'motion').name('Rotation');") ;
+ m_Writer.OutText( " gui.add(controls, 'reset').name('Reset camera');") ;
+ m_Writer.OutText( " document.getElementsByClassName('dg main a')[0].style.marginRight = '0px';") ;
+ m_Writer.OutText(" // --------------------------------------------") ;
+
+ // funzione per evidenziare un gruppo selezionato (per timer) 0xFBF719
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " function EnlightGroup(SelGroup) {") ;
+ m_Writer.OutText( " if (SelGroup !== null) {");
+ m_Writer.OutText( " SelGroup.children.forEach(element => {") ;
+ m_Writer.OutText( " if (!(element instanceof THREE.Group)) {") ;
+ m_Writer.OutText( " if (element instanceof THREE.Line) { //linea") ;
+ m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (element instanceof THREE.Mesh) { //mesh") ;
+ m_Writer.OutText( " element.material.color = new THREE.Color(0x00ff00);") ;
+ m_Writer.OutText( " element.material.emissive = new THREE.Color(0xFBF719);") ;
+ m_Writer.OutText( " element.material.emissiveIntensity = 1.2;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (element instanceof THREE.Points) { //punto") ;
+ m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (element instanceof THREE.Vector3) { //vettore") ;
+ m_Writer.OutText( " element.line.material.color = new THREE.Color(0xFBF719);") ;
+ m_Writer.OutText( " element.cone.material.color = new THREE.Color(0xFBF719);") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (element instanceof THREE.Object3D) { //frame") ;
+ m_Writer.OutText( " element.line.material.color = new THREE.Color(0xFBF719);") ;
+ m_Writer.OutText( " element.cone.material.color = new THREE.Color(0xFBF719);") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else {") ;
+ m_Writer.OutText( " EnlightGroup(element);") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " });") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " // --------------------------------------------") ;
+ m_Writer.OutText( "") ;
+
+ // funzione per riportare il colore del gruppo selezionato a quello originale (per timer)
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " function GetColorBack(SelGroup) {") ;
+ m_Writer.OutText( " if (SelGroup !== null) {") ;
+ m_Writer.OutText( " SelGroup.children.forEach(element => {") ;
+ m_Writer.OutText( " if (!(element instanceof THREE.Group)) {") ;
+ m_Writer.OutText( " if (element instanceof THREE.Line) { //linea") ;
+ m_Writer.OutText( " element.material.color = element.material.oldColor;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (element instanceof THREE.Mesh) { //mesh") ;
+ m_Writer.OutText( " element.material.color = element.material.oldColor;") ;
+ m_Writer.OutText( " element.material.emissive = new THREE.Color(0x000000);") ;
+ m_Writer.OutText( " element.material.emissiveIntensity = 1;") ;
+ m_Writer.OutText( " }");
+ m_Writer.OutText( " else if (element instanceof THREE.Points) { //punto") ;
+ m_Writer.OutText( " element.material.color = element.material.oldColor;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (element instanceof THREE.Vector3) { //vettore") ;
+ m_Writer.OutText( " element.line.material.color = element.oldColor;") ;
+ m_Writer.OutText( " element.cone.material.color = element.oldColor; ") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (element instanceof THREE.Object3D) { //frame") ;
+ m_Writer.OutText( " element.line.material.color = element.oldColor;") ;
+ m_Writer.OutText( " element.cone.material.color = element.oldColor;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else {") ;
+ m_Writer.OutText( " GetColorBack(element);") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " });") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " // --------------------------------------------") ;
+ m_Writer.OutText( "") ;
+
+ // funzione per tenere evidenziato il gruppo selezionato (funzione con il timer)
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " function EvidenziaLoadPage(ChoosenGroup) {") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " if (ChoosenGroup === null) {") ;
+ m_Writer.OutText( " return;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " var i = 0;") ;
+ m_Writer.OutText( " var YellowSet = false;") ;
+ m_Writer.OutText( " var OrigColSet = false;") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " function animation() {") ;
+ m_Writer.OutText( " var timer = setTimeout(function() {") ;
+ m_Writer.OutText( " i++;") ;
+ m_Writer.OutText( " //console.log(i); //delete it") ;
+ m_Writer.OutText( " if (!YellowSet && i < 10)") ;
+ m_Writer.OutText( " {") ;
+ m_Writer.OutText( " // coloro di giallo !!!") ;
+ m_Writer.OutText( " EnlightGroup(ChoosenGroup);") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " YellowSet = true;") ;
+ m_Writer.OutText( " OrigColSet = false;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (!OrigColSet && (i >= 10 && i < 20))") ;
+ m_Writer.OutText( " {") ;
+ m_Writer.OutText( " // riporto i colori originali ") ;
+ m_Writer.OutText( " GetColorBack(ChoosenGroup);") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " YellowSet = false;") ;
+ m_Writer.OutText( " OrigColSet = true;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " else if (i == 20)") ;
+ m_Writer.OutText( " {") ;
+ m_Writer.OutText( " i = 0;") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " animation();") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " }, 25); //1.5 seconds test") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " animation(); // prima chimata") ;
+ m_Writer.OutText( "") ;
+ m_Writer.OutText( " }") ;
+ m_Writer.OutText( " // --------------------------------------------") ;
+ m_Writer.OutText( "") ;
+
+ // funzione per riportare il colore del gruppo selezionato a quello originale
+ // --- m_Writer.OutText(" GetColorBack = function(SelGroup) {") ;
+ // --- m_Writer.OutText(" if (SelGroup != = null) {") ;
+ // --- m_Writer.OutText(" SelGroup.children.forEach(element => {") ;
+ // --- m_Writer.OutText(" if (!(element instanceof THREE.Group)) {") ;
+ // --- m_Writer.OutText(" if (element instanceof THREE.Line) { //linea") ;
+ // --- m_Writer.OutText(" element.material.color = element.material.oldColor;") ;
+ // --- m_Writer.OutText(" }") ;
+ // --- m_Writer.OutText(" else if (element instanceof THREE.Mesh) { //mesh") ;
+ // --- m_Writer.OutText(" element.material.color = element.material.oldColor;");
+ // --- m_Writer.OutText(" }") ;
+ // --- m_Writer.OutText(" else if (element instanceof THREE.Points) { //punto");
+ // --- m_Writer.OutText(" element.material.color = element.material.oldColor;");
+ // --- m_Writer.OutText(" }");
+ // --- m_Writer.OutText(" else if (element instanceof THREE.Vector3) { //vettore");
+ // --- m_Writer.OutText(" element.line.material.color = element.oldColor;");
+ // --- m_Writer.OutText(" element.cone.material.color = element.oldColor;");
+ // --- m_Writer.OutText(" }");
+ // --- m_Writer.OutText(" else if (element instanceof THREE.Object3D) { //frame");
+ // --- m_Writer.OutText(" element.line.material.color = element.oldColor;");
+ // --- m_Writer.OutText(" element.cone.material.color = element.oldColor;");
+ // --- m_Writer.OutText(" }");
+ // --- m_Writer.OutText(" }");
+ // --- m_Writer.OutText(" else {");
+ // --- m_Writer.OutText(" GetColorBack(element);");
+ // --- m_Writer.OutText(" }");
+ // --- m_Writer.OutText(" });");
+ // --- m_Writer.OutText(" };");
+ // --- m_Writer.OutText(" }");
+
+ // funzione per evidenziare gli elementi dei un gruppo
+ // ---m_Writer.OutText( " ScanElements = function(SelGroup, c) {") ;
+ // ---m_Writer.OutText( " if(c){") ;
+ // ---m_Writer.OutText( " if (!first) {") ;
+ // ---m_Writer.OutText( " GetColorBack(LastGroupSelected);") ;
+ // ---m_Writer.OutText( " }") ;
+ // ---m_Writer.OutText( " first = false;") ;
+ // ---m_Writer.OutText( " LastGroupSelected = SelGroup;") ;
+ // ---m_Writer.OutText( " }") ;
+ // ---m_Writer.OutText( " SelGroup.children.forEach(element => {") ;
+ // ---m_Writer.OutText( " if (!(element instanceof THREE.Group)) {") ;
+ // ---m_Writer.OutText( " if (element instanceof THREE.Line) { //linea") ;
+ // ---m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
+ // ---m_Writer.OutText( " }") ;
+ // ---m_Writer.OutText( " else if (element instanceof THREE.Mesh) { //mesh") ;
+ // ---m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
+ // ---m_Writer.OutText( " }") ;
+ // ---m_Writer.OutText( " else if (element instanceof THREE.Points) { //punto") ;
+ // ---m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
+ // ---m_Writer.OutText( " }");
+ // ---m_Writer.OutText( " else if (element instanceof THREE.Vector3) { //vettore") ;
+ // ---m_Writer.OutText( " element.line.material.color = new THREE.Color(0xFBF719);") ;
+ // ---m_Writer.OutText( " element.cone.material.color = new THREE.Color(0xFBF719);") ;
+ // ---m_Writer.OutText( " }") ;
+ // ---m_Writer.OutText( " else if (element instanceof THREE.Object3D) { //frame") ;
+ // ---m_Writer.OutText( " element.line.material.color = new THREE.Color(0xFBF719);") ;
+ // ---m_Writer.OutText( " element.cone.material.color = new THREE.Color(0xFBF719);") ;
+ // ---m_Writer.OutText( " }") ;
+ // ---m_Writer.OutText( " }") ;
+ // ---m_Writer.OutText( " else {") ;
+ // ---m_Writer.OutText( " ScanElements(element, false);") ;
+ // ---m_Writer.OutText( " }") ;
+ // ---m_Writer.OutText( " });") ;
+ // ---m_Writer.OutText( " }") ;
+
+ // funzione render per la scena
+ m_Writer.OutText( " function renderScene() {") ;
+ //m_Writer.OutText( "const div = document.getElementById('zoom_test');"); // div per controllo parametri
+ //m_Writer.OutText( "div.textContent = " + ToString( m_dDistance) +";") ; // div per controllo parametri
+
+ m_Writer.OutText( " var delta = clock.get") ;
+ m_Writer.OutText( " orbitControls.update(zoom, " + ToString( m_dHalfWidth/2)+ ", " + ToString( m_dHalfHeight/2) + ");") ; // aggiornamento telecamera
+ // --- m_Writer.OutText( " camera.zoom = zoom;") ; <---- original
+ m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
+ m_Writer.OutText( " camera.zoom = zoom + orbitControls.ComputedZoom - 1;") ;
+ m_Writer.OutText( " camera.updateProjectionMatrix();") ; // aggiornamento matrice di proiezione su piano Near di clipping
+ m_Writer.OutText( " requestAnimationFrame(renderScene);") ;
+ m_Writer.OutText( " renderer.render(scene, camera);") ;
+ m_Writer.OutText( " }") ;
+
+ // aggiungo il canvas alla pagina html con la mia scena
+ m_Writer.OutText( " document.getElementById('WebGL-output').appendChild(renderer.domElement);") ;
+ m_Writer.OutText( " document.body.appendChild(controlsGizmo.domElement);") ;
+ m_Writer.OutText( " renderScene();") ;
+ m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchmove', false);") ;
+ m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchstart', false);") ;
+ m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchend', false);") ;
+ m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchcancel', false);") ;
+ m_Writer.OutText( " }") ;
+
+ // funzione resize della pagina
+ m_Writer.OutText( " function onResize() {") ;
+ m_Writer.OutText( " camera.aspect = window.innerWidth / window.innerHeight;") ;
+ m_Writer.OutText( " camera.updateProjectionMatrix();") ;
+ m_Writer.OutText( " renderer.setSize(window.innerWidth, window.innerHeight);") ;
+ m_Writer.OutText( " }") ;
+
+ //funzione per lo zoom della pagina
+ m_Writer.OutText( " function zoomView(){") ;
+ m_Writer.OutText( " zoom += event.wheelDeltaY * 0.00025;") ;
+ m_Writer.OutText( " zoom = Math.max( Math.min( zoom, 10000000 ), 0.00000001);") ;
+ m_Writer.OutText( " };") ;
+
+ // richiamo della funzione init() e dichiarazione degli eventi in javascript per controllo della scena
+ m_Writer.OutText( " window.onload = init") ;
+ // m_Writer.OutText( " window.addEventListener('resize', onResize, false);") ;
+ m_Writer.OutText( " window.addEventListener('wheel', zoomView, false);") ;
+ m_Writer.OutText( " ") ;
+ m_Writer.OutText( " ") ;
+ m_Writer.OutText( "") ;
+
+
+
+ // Termino scrittura del File del Menu
+ m_WriterM.OutText( "