Files
EgtExchange/ExportThreeJS.cpp
T
Riccardo Elitropi 09bdbe99d6 EgtExchange :
- modifica selezione qrcode e gestione delle mesh
- aggiunta comandi da tastiera.
2022-10-12 14:24:10 +02:00

3140 lines
222 KiB
C++

//----------------------------------------------------------------------------
// EgalWare 2022-2022
//----------------------------------------------------------------------------
// File : ExportThreeJS.cpp Data : 05.07.22 Versione : 1.5h2
// Contenuto : Implementazione della classe per l'esportazione in formato html (javascript).
//
//
//
// Modifiche : 21.07.22 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
//--------------------------- Include ----------------------------------------
#include "stdafx.h"
#include "ExportThreeJS.h"
#include "DllMain.h"
#include "/EgtDev/Include/EExDllMain.h"
#include "/EgtDev/Include/EGkGeomDB.h"
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h"
#include "/EgtDev/Include/EGkGdbIterator.h"
#include "/EgtDev/Include/EGnStringUtils.h"
#include "/EgtDev/Include/SELkKeyProc.h"
#include "/EgtDev/Include/EgtKeyCodes.h"
#include "/EgtDev/Include/EgtStringConverter.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
#include <fstream>
#include "/EgtDev/Include/EGkGeoVector3d.h"
#include "/EgtDev/Include/EGkCurveLine.h"
#include "/EgtDev/Include/EGkGeoPoint3d.h"
#include "/EgtDev/Include/EGKCurve.h"
#include "/EgtDev/Include/EGkGeoConst.h"
#include "/EgtDev/Include/EGkExtText.h"
#include "/EgtDev/Include/EGkSurfBezier.h"
#include "/EgtDev/Include/EGkGeoFrame3d.h"
#include "/EgtDev/Include/EGkFrame3d.h"
#include "/EgtDev/Include/EGkExtDimension.h"
#include "/EgtDev/Include/EGrScene.h"
#include "/EgtDev/Include/EGkCurveComposite.h"
using namespace std ;
//----------------------------------------------------------------------------
IExportThreeJS*
CreateExportThreeJS( void)
{
// verifico la chiave e le opzioni
if ( ! GetEExNetHwKey() && ! TestKeyForEEx( GetEExKey(), KEYOPT_EEX_EXPBASE, GetEExLogger()))
return nullptr ;
// creo l'oggetto
return static_cast<IExportThreeJS*> ( new( nothrow) ExportThreeJS) ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::SetOptions( int nFilter)
{
m_nFilter = nFilter ;
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::Export( IGeomDB* pGDB, int nId, const string& sFile, IEGrScene* pScene, bool bUdm)
{
// verifico il DB geometrico
if ( pGDB == nullptr) {
LOG_ERROR( GetEExLogger(), "ExportThreeJS : Error on GeomDB")
return false ;
}
// verifico l'Id dell'oggetto da esportare
if ( ! pGDB->ExistsObj( nId)) {
LOG_ERROR( GetEExLogger(), "ExportThreeJS : Error on Id")
return false ;
}
// creo il frame
m_frTHREEJSFrame.Set( ORIG, Y_AX, Z_AX, X_AX) ;
// apro il file di testo in scrittura
m_Writer.Close() ;
if ( ! m_Writer.Init( sFile)) {
LOG_ERROR( GetEExLogger(), "ExportThreeJS : Error on open file")
return false ;
}
// prelevo le unità di misura
m_bUdm_mm = bUdm;
m_sUdm = "in";
if (m_bUdm_mm) {
m_sUdm = "mm";
}
// prelevo il Box3D globale (per ingombro e punto luce)
BBox3d b3Globbox ;
pGDB->GetGlobalBBox( nId, b3Globbox, BBF_ONLY_VISIBLE) ;
b3Globbox.GetMinDim( m_ptMin, m_dimX, m_dimY, m_dimZ) ;
// m_dScala = max( m_dimX, m_dimY, m_dimZ) / 200 ;
m_ptMin.ToLoc( m_frTHREEJSFrame) ;
// setto i filter
// m_nFilter = nFilter;
// creazione parte iniziale della pagina html
bool bOk = HeadAmbient( pScene, pGDB, nId) ;
// creo un iteratore
PtrOwner<IGdbIterator> pIter( CreateGdbIterator( pGDB)) ;
if ( IsNull( pIter))
return false ;
pIter->GoTo( nId) ;
// esporto l'oggetto e i suoi eventuali figli
bOk = ExportObject( *pIter, pGDB, m_nGroupCount) ;
// fine creazione menù con elementi globali
m_Writer.OutText( " groupRoot.add(group0)");
// creazione parte finale della pagina html
bOk = FinishAmbient() ;
// chiudo il file
if ( ! m_Writer.Close())
bOk = false ;
return bOk;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
{
// ================================================================
// CREAZIONE PARTE INIZIALE DELLA SCENA ===========================
// ================================================================
// prelevo le impostazioni della camera da EGTCAM5
pScene->GetOrthoCamParam( &m_dHalfWidth, &m_dHalfHeight, &m_ZNear, &m_ZFar) ;
m_ptCenter = pScene->GetCenter() ;
double dAngVertDeg, dAngOrizzDeg, dDist ;
pScene->GetCamera( &dAngVertDeg, &dAngOrizzDeg, &dDist) ;
Vector3d vtDirCamera = FromSpherical( 1, dAngVertDeg, dAngOrizzDeg) ;
m_ptCamera = m_ptCenter + dDist * vtDirCamera ;
m_dDistance = dDist ;
m_dCameraPhi = dAngVertDeg;
m_dCameraTheta = dAngOrizzDeg;
// prelevo i parametri della griglia
double dSnapStep ;
int nExtStep ;
pScene->GetGridParam( dSnapStep, nExtStep) ;
m_spath = ""; // <----- da far scegliere all'utente
// scrittura parte iniziale del codice e librerie
m_Writer.OutText( "<!DOCTYPE html>") ;
m_Writer.OutText( "<html>") ;
m_Writer.OutText( " <head>") ; // <HEAD>
m_Writer.OutText( " <link rel = 'stylesheet' href = '" + m_spath + "./Lib/Css/Bootstrap/bootstrap.min.css'/>") ;
m_Writer.OutText( " <link rel = 'stylesheet' href = '" + m_spath + "./Lib/Css/Bootstrap/bootstrap-icons.css'/>") ;
m_Writer.OutText( " <link rel = 'stylesheet' href = '" + m_spath + "./Lib/Css/fontawesome/css/all.min.css'/>");
m_Writer.OutText( " <link rel = 'stylesheet' href = '" + m_spath + "./Lib/Css/StileScena.css'/>") ;
m_Writer.OutText( " <script type = 'text/javascript' src = '" + m_spath + "./Lib/jquery.js'></script>") ;
//m_Writer.OutText( " <script type = 'text/javascript' src = '" + m_spath + "./Lib/Controls/dat.gui.js'></script>") ;
m_Writer.OutText( " <script type = 'text/javascript'>") ; // script per il toggle del menu a sinistra
m_Writer.OutText( " $(document).ready(function() {") ;
m_Writer.OutText( " $('#listSearch').on('keyup', function() {") ;
m_Writer.OutText( " var value = $(this).val().toLowerCase();") ;
m_Writer.OutText( " $('ol').filter(function() {") ;
m_Writer.OutText( " $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " $('#btn_canc').on('click', function() {") ;
m_Writer.OutText( " var value = '';") ;
m_Writer.OutText( " $('ol').filter(function() {") ;
m_Writer.OutText( " $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)") ;
m_Writer.OutText( " $('#listSearch').val('');") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " </script>");
m_Writer.OutText( " <meta charset = 'UTF-8'>") ;
m_Writer.OutText( " <meta name = 'viewport' content = 'initial-scale = 1, minimum-scale = 1, maximum-scale = 1'>") ;
m_Writer.OutText( " </head>") ; // </HEAD>
// body
m_Writer.OutText( " <body>") ; // <BODY>
m_Writer.OutText( " <div id = 'ContProgBar'>") ; // div che contiene il caricamento della pagina
m_Writer.OutText( " <div class = 'row h-100 justify-content-center p-0' >") ;
m_Writer.OutText( " <div class = 'col-12 my-auto'>") ;
m_Writer.OutText( " <div class = 'row m-0 p-0'>") ;
m_Writer.OutText( " <div class = 'col-12 my-auto'>") ;
m_Writer.OutText( " <div class = 'loader' class = 'd-flex align-items-center justify-content-center' style = 'width:30em; height:30em;'></div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div id = 'LOGOMID' class = 'p-0'>") ;
m_Writer.OutText( " <div class = 'text-white justify-content-center text-center'>") ;
m_Writer.OutText( " <img src = './Lib/immagini/LogoQ.png' class = 'border-0 m-0 p-0' style = 'height:5em; width:5em;'/>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row m-0 p-0'>") ;
m_Writer.OutText( " <div class = 'col-12 my-auto align-self-center'>") ;
m_Writer.OutText( " <div class = 'text-white justify-content-center text-center'>EGALWARE</div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row m-0 p-0'>") ;
m_Writer.OutText( " <div class = 'col-12 my-auto align-self-center'>") ;
m_Writer.OutText( " <div class = 'text-white justify-content-center text-center'> <i>'A new way to create between hardware and software'</i></div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>");
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div id='WebGL-output'></div>") ; // div che contiene il canvas per la scena di THREEJS
m_Writer.OutText( " <div class = 'btn p-0' class = 'btn_del_Menu p-0' id = 'btn_Menu' style = 'background-color: rgba(27,27,27,0.7); visibility: hidden;'>") ; // bottone laterale sinistro del menu (overlapping)
m_Writer.OutText( " <span class = 'fas fa-bars'></span>") ;
m_Writer.OutText( " </div>") ;
// --- Menu in basso con misure, ingombri e selezione
m_Writer.OutText( " <div id = 'strisciaFinale' style = 'position: absolute; width: 100%; bottom: 0px; visibility: hidden;' class = 'd-flex justify-content-center'>") ;
m_Writer.OutText( " <div id = 'divInfo' class = 'row p-1 m-1 justify-content-center'>") ;
m_Writer.OutText( " <div id = 'divBox' class = 'row border-bottom'>") ;
m_Writer.OutText( " <div class = 'col-3 d-flex justify-content-left'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small' id = 'Ibox'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-cube'></i><span id = 'sBoxVal'></span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'col-3 d-flex justify-content-left'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small'>") ;
m_Writer.OutText( " <span id = 'sBdx'>&Delta;x: 0 " + m_sUdm + "</span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'col-3 d-flex justify-content-left'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small'>") ;
m_Writer.OutText( " <span id = 'sBdy'>&Delta;y : 0 " + m_sUdm + "</span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'col-3 d-flex justify-content-left'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small'>") ;
m_Writer.OutText( " <span id = 'sBdz'>&Delta;z : 0 " + m_sUdm + "</span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div id = 'divDistance2' class = 'row justify-content-center'>") ;
m_Writer.OutText( " <div class = 'col-3 d-flex justify-content-left'>") ;
m_Writer.OutText( " <div class = 'input-group-sm justify-content-left small' id = 'Idis'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-ruler'></i> <span id = 'sDistVal'>0 " + m_sUdm + "</span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'col-3 d-flex justify-content-left'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small'>") ;
m_Writer.OutText( " <span id = 'sDdx'>&Delta;x: 0 " + m_sUdm + "</span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'col-3 d-flex justify-content-left'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small'>") ;
m_Writer.OutText( " <span id = 'sDdy'>&Delta;y : 0 " + m_sUdm + "</span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'col-3 d-flex justify-content-left'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small'>") ;
m_Writer.OutText( " <span id = 'sDdz'>&Delta;z : 0 " + m_sUdm + "</span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div id = 'DivSel' class = 'row p-1 m-1 justify-content-center'>") ;
m_Writer.OutText( " <div class = 'row'>");
m_Writer.OutText( " <div class = 'col-12 d-flex justify-content-center'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small' id = 'Isel'>") ;
m_Writer.OutText( " <i class = 'fas fa-mouse-pointer'></i> <span id = 'sSelVal'> not enabled </span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row'>") ;
m_Writer.OutText( " <div class = 'col-12 d-flex justify-content-center'>") ;
m_Writer.OutText( " <div class = 'input-group-sm small'>") ;
m_Writer.OutText( " <span id = 'sSid'> Id : none</span>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
// --- Contenitore del Logo
m_Writer.OutText( " <div class = 'ContLogo' style = 'visibility: hidden;' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Open Menu'>") ;
m_Writer.OutText( " <img src = 'Lib/immagini/LogoV.png' class = 'img-fluid'></img>") ;
m_Writer.OutText( " </div>") ;
// --- Menu a destra con i controlli
m_Writer.OutText( " <div class = 'controlMenu' style = 'visibility: hidden;'>") ;
//m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-1 small text-white text-bold border-0'>Info</div>") ;
//m_Writer.OutText( " <div class = 'row m-0 m-0 p-0 justify-content-center'>") ;
//m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTINFO' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Informations'>") ;
//m_Writer.OutText( " <i class = 'fa-solid fa-question'></i>") ;
//m_Writer.OutText( " </button>") ;
//m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-1 small text-white text-bold border-0'>View</div>") ;
m_Writer.OutText( " <div class = 'row m-0 m-0 p-0 justify-content-center'>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTORTHO' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Orthographic view'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-grip-lines-vertical'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTPERS' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Perspective view'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-lines-leaning'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-2 small text-white text-bold'>Camera</div>") ; // togliere border-0
m_Writer.OutText( " <div class = 'row m-0 m-0 p-0 justify-content-center'>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 ml-1 p-0 btn_controls' id = 'BTRESET' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Reset the camera'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-camera'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTROTATE' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Automatic rotation'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-arrow-rotate-left'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mr-1 p-0 btn_controls' id = 'BTORIG' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Look to origin'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-arrows-to-circle'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-2 small text-white text-bold'>Measure</div>") ;
m_Writer.OutText( " <div class = 'row m-0 m-0 p-0 justify-content-center'>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 ml-1 p-0 btn_controls' id = 'BTPERIMETER' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'End point'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-wave-square'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTGRID' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Grid point'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-table-cells-large'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mr-1 p-0 btn_controls' id = 'BTSKETCH' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Sketch point'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-circle fa-2xs'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-2 small text-white text-bold'>Select</div>") ;
m_Writer.OutText( " <div class = 'row m-0 m-0 p-0 justify-content-center'>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTSEL' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Enlight'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-highlighter'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTSHOW' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Show only'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-eye'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTSHOWALL' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Show all'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-earth-europe'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-2 small text-white text-bold'>Box</div>") ;
m_Writer.OutText( " <div class = 'row m-0 m-0 p-0 justify-content-center'>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTBOX' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Box'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-cube'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-2 small text-white text-bold'>Cancel</div>") ;
m_Writer.OutText( " <div class = 'row m-0 m-0 p-0 justify-content-center'>") ;
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTCANC' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Cancel'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-xmark'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
// --- Contenitore del Cubetto
m_Writer.OutText( "<div class = 'Contcube'></div>") ;
// script type module per THREEJS (inclusione delle librerie) =====
m_Writer.OutText( " <script type='module'>");
m_Writer.OutText( " import * as THREE from '" + m_spath + "./Lib/three.module.js';") ; // modulo THREEJS
m_Writer.OutText( " import { OrbitControls } from '" + m_spath + "./Lib/Controls/orbitControlsM.js';") ; // modulo Controllo telecamera
//m_Writer.OutText( " import { OrbitControlsGizmo } from '" + m_spath + "./Lib/Controls/OrbitControlsGizmo.js';") ; // modulo Controllo assi GIZMO
m_Writer.OutText( " import ViewCubeControls from './Lib/ViewCubeControls.js';") ; // modulo Controllo Cubetto
// variabili globali per script javascript
m_Writer.OutText( " var camera;") ; // telecamera ortografica
m_Writer.OutText( " var scene;") ; // scena rappresentata nel canvas #CScena
m_Writer.OutText( " var renderer;") ; // render per la visualizzazione degli oggetti3D
m_Writer.OutText( " var Ismm = " + ToString(m_bUdm_mm) + ";") ; // T/F -> se udm è mm o in.
m_Writer.OutText( " var udmScala = 1;") ; // fattore di scala per il cambio delle udm
m_Writer.OutText( " if (Ismm == 0) { udmScala = 1 / (25.4) }") ; // fattore di scala per trasformare tutto da mm a in. EGTCAM5 lavora sempre in mm
m_Writer.OutText( " var groupRoot = new THREE.Group();"); // gruppo radice che contiene come figlio il gruppo da cui partire per l'esportazione (come scritto da LUA)
m_Writer.OutText( " var controls; ") ; // controlli del menu GUI
m_Writer.OutText( " var LastGroupSelected = null;") ; // ultimo gruppo selezionato
m_Writer.OutText( " var boxCreated;") ; // T/F -> se il box durante la lettura dell'ID nell'URL è effettivamente stato creato
m_Writer.OutText( " var orbitControls;") ; // telecamera per rotation/zoom/pan
m_Writer.OutText( " var CurrentSelectedGroup = null;") ; // gruppo corrente selezionato
m_Writer.OutText( " var booked = false;") ; // YT/F -> se c'è una animazione di selezione in corso
m_Writer.OutText( " var raycaster = new THREE.Raycaster();") ; // raggio [POS_CAMERA -> PROIEZIONE PUNTO MOUSE IN 3D] per intercettare le superfici selezionate (mouse hover)
m_Writer.OutText( " var raycasterDistance = new THREE.Raycaster();") ; // raggio [POS_CAMERA -> PROIEZIONE PUNTO MOUSE IN 3D] per intercettare le superfici cliccate
m_Writer.OutText( " var pointer = new THREE.Vector2();") ; // vettore contente le cordinate 2D del mouse (sullo schermo)
m_Writer.OutText( " var list_of_objects = [];") ; // lista contente tutte le geometrie esportate (questa lista verrà svuotata, quindi controllare rootGroup)
m_Writer.OutText( " var selectedObject = null;") ; // oggetto selezionato dal mouse (mouse hover)
m_Writer.OutText( " var group;") ; // gruppo contentente tutte le geometrie (utilizzato nel reicaster, il quale richiede che tutti gli oggetti siano OBject3D)
m_Writer.OutText( " var FirstTouch = false;") ; // T/F -> se l'utente ha toccato un oggetto o no
m_Writer.OutText( " var FirstSelection = false;") ; // T/F -> se l'utente ha fatto una selezione (per primo lampeggiamento)
m_Writer.OutText( " var currentSurv = null;") ; // superficie corrente toccata dal mouse o dal dito
m_Writer.OutText( " var bbox = null;") ; // box utilizzato per calcolare le dimensioni del boxHelper
m_Writer.OutText( " var boxH = null;") ; // il boxHelper (quello che viene visualizzato se il boxglobale è abilitato)
m_Writer.OutText( " var edges = null;") ; // vettore dei lati della currentSurv
m_Writer.OutText( " var edgeBorder = null;") ; // bordi sulla superficie attuale
m_Writer.OutText( " var MarkSel = 'B';") ; // tipo di Marker selezionato dall'utente (B -> bounded (perimeter), G -> Grid, S -> Sketch)
m_Writer.OutText( " var MarkCol = '#ff0000';") ; // colore dei Marker
m_Writer.OutText( " var points = [new THREE.Vector3(), new THREE.Vector3()]") ; // vettore contente le cordinate 3D del mouse nei due click successivi per il posizionamento dei Markers
m_Writer.OutText( " var clicks = 0;") ; // 0-1, per posizionare il marker A e il markerB nel modo corretto
m_Writer.OutText( " var distance = 0;") ; // valore della distanza lineare tra i due Markers
m_Writer.OutText( " var dx = 0; var dy = 0; var dz = 0;") ; // lunghezza lungo x/y/z
m_Writer.OutText( " var GLOB_DIST = false;") ; // se il comando attuale consente di calcolare la distanza lineare tra due punti
m_Writer.OutText( " var GLOB_BOX = false;") ; // se il comando attuale consente di visualizzare il boc 3D del pezzo selezionato
//m_Writer.OutText( " var markerA = new THREE.Mesh(new THREE.SphereGeometry(0.5, 100, 100), new THREE.MeshPhongMaterial({ color: 0xff0000, emissive : 0xff0000, emissiveIntensity : 1.25 }));") ; // Marker A
//m_Writer.OutText( " var markerB = new THREE.Mesh(new THREE.SphereGeometry(0.5, 100, 100), new THREE.MeshPhongMaterial({ color: 0xff0000, emissive : 0xff0000, emissiveIntensity : 1.25 }));") ; // Marker B
m_Writer.OutText( " var dotMGeometry = new THREE.Geometry();") ;
m_Writer.OutText( " dotMGeometry.vertices.push(new THREE.Vector3(0, 0, 0));") ;
m_Writer.OutText( " var dotMMaterial = new THREE.PointsMaterial({ size: 5, sizeAttenuation : false, color : new THREE.Color(0xff0000) });") ;
m_Writer.OutText( " var markerA = new THREE.Points(dotMGeometry, dotMMaterial);") ;
m_Writer.OutText( " var markerB = new THREE.Points(dotMGeometry, dotMMaterial);") ;
m_Writer.OutText( " var markers = [markerA, markerB];") ;
m_Writer.OutText( " var markers = [markerA, markerB];") ; // vettore contenente i Markers
m_Writer.OutText( " var LineMarker = null;") ; // linea tra i due Markers
m_Writer.OutText( " var isMarkAinScene = false;") ; // T/F -> se il MarkerA è nella scena
m_Writer.OutText( " var isMarkBinScene = false;") ; // T/F -> se il MarkerB è nella scena
m_Writer.OutText( " var isLineMarkerinScene = false;") ; // T/F -> se il LineMarker è nella scena
m_Writer.OutText( " var LineMarkerGeometry = new THREE.Geometry();") ; // geometria del LineMarker
m_Writer.OutText( " var LineMarkerMaterial = new THREE.LineBasicMaterial({ color: 0xff5555 });") ; // material del LineMarker
m_Writer.OutText( " LineMarkerGeometry.vertices.push(new THREE.Vector3(), new THREE.Vector3());") ; // inizializzazione del punto di inizio e di fine per il LineMarker
m_Writer.OutText( " var lineMarker = new THREE.Line(LineMarkerGeometry, LineMarkerMaterial);") ; // LineMarker
m_Writer.OutText( " var Cilgeometry = null;") ; // geometria del cilindro tra i due Markers
m_Writer.OutText( " var Cilmaterial = null;") ; // materiale del cilindro tra i due Markers
m_Writer.OutText( " var cylinder = null;") ; // cilindro tra i due Markers
m_Writer.OutText( " var CilArrow = null;") ; // cono per creare una freccia ( con il cilindro )
m_Writer.OutText( " var intersects = null;") ; // vettore contentente le intersezioni ordinate per distanza crescente
m_Writer.OutText( " var GLOB_SEL = false;") ; // se il comando attuale consente di selezionare i vari pezzi
m_Writer.OutText( " var SelType = -1;") ;
m_Writer.OutText( " var plane;") ; // piano sui cui si appoggia la griglia (serve per calcolare le approssimazioni con i punti della griglia al click (o touch))
m_Writer.OutText( " var ListGridP = [];") ; // lista contenente i punti della griglia
m_Writer.OutText( " const userAgent = navigator.userAgent.toLowerCase();") ; // per controllare se apro il programma da Tablet, Cellulare o desktop
m_Writer.OutText( " var isMobile = /iPhone|Android/i.test(navigator.userAgent);") ; // T/F -> se sono da mobile (cellulare)
m_Writer.OutText( " const isTablet = /(ipad|tablet|(android(?!.*mobile))|(windows(?!.*phone)(.*touch))|kindle|playbook|silk|(puffin(?!.*(IP|AP|WP))))/.test(userAgent);") ; // T/F -> se sono da Tablet
m_Writer.OutText( " var SelectedCurrG = null;") ; // gruppo selezionato
m_Writer.OutText( " var SelectedObject_id = 'none';") ; // id del gruppo selezionato
m_Writer.OutText( " var bSel = false;") ; // T/F -> se nella ricerca dei gruppi ho trovato un gruppo
m_Writer.OutText( " var entrato = false;") ; // T/F -> per controllare se ho trovato un gruppo padre o no
m_Writer.OutText( " var CameraView = 1;") ;
m_Writer.OutText( " var face_list = [];") ;
// funzione init() -> funzione principale che viene richiamata per la creazione della scena e dei suoi oggetti
m_Writer.OutText( " function init() { ") ;
// codice per scena, telecamera e render
m_Writer.OutText( " scene = new THREE.Scene();") ;
// imposto telecamera ortografica (posizione, punto di focus, posizione piani di clipping e definizione della zona di viewing frustum
m_Writer.OutText( " if(CameraView == 0){") ;
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( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, " + ToString(m_ZFar) + " * 75);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " camera.position.x = " + ToString( m_ptCamera.y) + "; camera.position.y = " + ToString( m_ptCamera.z) + "; camera.position.z = " + ToString( m_ptCamera.x) + "; ") ;
m_Writer.OutText( " var dist = camera.position.distanceTo(new THREE.Vector3(0,0,0));") ; // per Gizmo
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + "));") ;
m_Writer.OutText( " scene.add(camera);") ;
// impostazioni del render della scena
m_Writer.OutText( " renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true, transparent: true });") ;
m_Writer.OutText( " renderer.setClearColor(new THREE.Color(0xD3D3D3));") ;
m_Writer.OutText( " renderer.setPixelRatio(window.devicePixelRatio );") ;
m_Writer.OutText( " renderer.toneMapping = THREE.ACESFilmicToneMapping;") ;
m_Writer.OutText( " if (window.screen.width > window.screen.height) {") ;
m_Writer.OutText( " renderer.setSize(window.screen.availWidth, window.screen.availHeight);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " renderer.setSize(window.screen.availHeight, window.screen.availWidth);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " renderer.shadowMapEnabled = true;") ;
m_Writer.OutText( " renderer.sortObjects = false;") ;
// punto luce
double dResult = sqrt(( m_ptMin.x + ( m_dimX * 2)) * ( m_ptMin.x + ( m_dimX * 2)) + ( m_ptMin.y + ( m_dimY * 2)) * ( m_ptMin.y + ( m_dimY * 2)) + ( m_ptMin.z + ( m_dimZ * 2)) * ( m_ptMin.z + ( m_dimZ * 2))) ;
m_Writer.OutText( " var spotLight1 = new THREE.SpotLight(0xFFFFFF);") ;
m_Writer.OutText( " spotLight1.position.set(" + ToString( m_ptMin.x + ( m_dimX * 2)) + ", " + ToString( m_ptMin.y + ( m_dimY * 2)) + ", " + ToString(( m_ptMin.z + ( m_dimZ*2))) + ");") ;
m_Writer.OutText( " spotLight1.intensity = 0.6;") ;
m_Writer.OutText( " spotLight1.angle = Math.PI/4;") ;
m_Writer.OutText( " spotLight1.distance = " + ToString( dResult) + "*2.5;") ;
m_Writer.OutText( " spotLight1.castShadow = true;") ;
m_Writer.OutText( " scene.add(spotLight1);") ;
// luce dell'ambiente
m_Writer.OutText( " var ambientLight = new THREE.AmbientLight(0x4d4d4d);") ;
m_Writer.OutText( " ambientLight.intensity = 1.4;") ;
m_Writer.OutText( " scene.add(ambientLight); ") ;
// codice per disegno griglia
m_Writer.OutText( " var size = " + ToString( nExtStep * dSnapStep) + ";") ;
m_Writer.OutText( " var divisions = " + ToString( dSnapStep) + ";");
m_Writer.OutText( " var LineMaterial;") ;
m_Writer.OutText( " var LineGeometry;") ;
m_Writer.OutText( " var line;") ;
m_Writer.OutText( " var ListPZ = []; var ListPX = [];");
m_Writer.OutText( " for (var i = -10; i <= 10; i++)") ;
m_Writer.OutText( " {") ;
m_Writer.OutText( " LineMaterial = new THREE.LineBasicMaterial({ color: 0x444444 });") ;
m_Writer.OutText( " LineGeometry = new THREE.Geometry();") ;
m_Writer.OutText( " LineGeometry.vertices.push(") ;
m_Writer.OutText( " new THREE.Vector3( " + ToString( nExtStep * dSnapStep) + ", 0, " + ToString( -nExtStep * dSnapStep) + "+ (" + ToString( nExtStep * dSnapStep / 10) + ") * ( i + 10 )),") ;
m_Writer.OutText( " new THREE.Vector3( " + ToString( -nExtStep * dSnapStep) + ", 0, " + ToString( -nExtStep * dSnapStep) + "+ (" + ToString( nExtStep * dSnapStep / 10) + ") * ( i + 10 ))") ;
m_Writer.OutText( " );") ;
m_Writer.OutText( " line = new THREE.Line(LineGeometry, LineMaterial);") ;
m_Writer.OutText( " scene.add(line);") ;
m_Writer.OutText( " ListPZ.push(new THREE.Vector3( " + ToString(nExtStep * dSnapStep) + ", 0, " + ToString(-nExtStep * dSnapStep) + " + (" + ToString(nExtStep * dSnapStep / 10) + ") * ( i + 10)));") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " for (var i = -10; i <= 10; i++)") ;
m_Writer.OutText( " {") ;
m_Writer.OutText( " LineMaterial = new THREE.LineBasicMaterial({ color: 0x444444 });") ;
m_Writer.OutText( " LineGeometry = new THREE.Geometry();") ;
m_Writer.OutText( " LineGeometry.vertices.push(") ;
m_Writer.OutText( " new THREE.Vector3(" + ToString( nExtStep * dSnapStep) + " - ( " + ToString( nExtStep * dSnapStep / 10) + " ) * ( i + 10), 0, -" + ToString( nExtStep * dSnapStep) + "),") ;
m_Writer.OutText( " new THREE.Vector3(" + ToString( nExtStep * dSnapStep) + " - ( " + ToString( nExtStep * dSnapStep / 10) + " ) * ( i + 10), 0, " + ToString( nExtStep * dSnapStep) + ")") ;
m_Writer.OutText( " );") ;
m_Writer.OutText( " line = new THREE.Line(LineGeometry, LineMaterial);") ;
m_Writer.OutText( " scene.add(line);") ;
m_Writer.OutText( " ListPX.push(new THREE.Vector3(" + ToString(nExtStep * dSnapStep) + " - ( " + ToString(nExtStep * dSnapStep / 10) + " ) * ( i + 10), 0, -" + ToString(nExtStep * dSnapStep) + "));") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " for (var i = 0; i < ListPX.length; i++) {") ;
m_Writer.OutText( " for (var j = 0; j < ListPZ.length; j++) {") ;
m_Writer.OutText( " ListGridP.push(ListPX[i].x, ListPX[i].y, ListPZ[j].z);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
// codice per sistema di riferimento
m_Writer.OutText( " var xdir = new THREE.Vector3(0,0,1);");
m_Writer.OutText( " xdir.normalize()") ;
m_Writer.OutText( " var origin = new THREE.Vector3(0,0,0);") ;
m_Writer.OutText( " var length = " + ToString( nExtStep * dSnapStep) + ";") ;
m_Writer.OutText( " var hex = 0xff0000;") ;
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(xdir, origin, length, hex, 0, 0);") ;
m_Writer.OutText( " scene.add(arrowHelper);") ;
m_Writer.OutText( " var ydir = new THREE.Vector3(1,0,0);") ;
m_Writer.OutText( " ydir.normalize()") ;
m_Writer.OutText( " var origin = new THREE.Vector3(0,0,0);") ;
m_Writer.OutText( " var length = " + ToString( nExtStep * dSnapStep) + ";") ;
m_Writer.OutText( " var hex = 0x006600;") ;
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(ydir, origin, length, hex, 0, 0);") ;
m_Writer.OutText( " scene.add(arrowHelper);") ;
m_Writer.OutText( " var zdir = new THREE.Vector3(0,1,0);") ;
m_Writer.OutText( " zdir.normalize()") ;
m_Writer.OutText( " var origin = new THREE.Vector3(0,0,0);") ;
m_Writer.OutText( " var length = " + ToString( nExtStep * dSnapStep / 100) + ";") ;
m_Writer.OutText( " var hex = 0x0000ff;") ;
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(zdir, origin, length, hex, 0, 0);") ;
m_Writer.OutText( " scene.add(arrowHelper);") ;
// codice per telecamera
m_Writer.OutText( " orbitControls = new OrbitControls(camera, renderer.domElement);") ;
m_Writer.OutText( " orbitControls.autoRotate = true;") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(" + ToString(m_ptCenter.y) + ", " + ToString(m_ptCenter.z) + ", " + ToString(m_ptCenter.x) + ");") ;
//m_Writer.OutText(" orbitControls.rotateUp(0);");
//m_Writer.OutText(" orbitControls.rotateLeft(0);");
/*
if (m_dCameraPhi == 0 || (m_ptCamera.x != m_ptCenter.x && m_ptCamera.y != m_ptCenter.y)) { // se vUP = (+ 1, 0 0) => gestire rotazione della scena
//m_ptCenter.x == m_ptCamera.x && m_ptCenter.y == m_ptCamera.y
//m_Writer.OutText(" orbitControls.rotateLeft(Math.PI/4)") ;
if (m_dCameraTheta >= 180 && m_dCameraTheta <= 360) {
m_Writer.OutText(" orbitControls.rotateLeft((-" + ToString(m_dCameraTheta) + " + 360) * Math.PI/180);");
}
else {
m_Writer.OutText(" orbitControls.rotateLeft((-" + ToString(m_dCameraTheta) + ") * Math.PI/180);");
}
}
if (m_dCameraPhi == 180 || (m_ptCamera.x != m_ptCenter.x && m_ptCamera.y != m_ptCenter.y)) {
if (m_dCameraTheta >= 180 && m_dCameraTheta <= 360) {
m_Writer.OutText(" orbitControls.rotateLeft((-" + ToString(m_dCameraTheta) + " + 360) * Math.PI/180);");
}
else {
m_Writer.OutText(" orbitControls.rotateLeft((-" + ToString(m_dCameraTheta) + ") * Math.PI/180);");
}
}
*/
//m_Writer.OutText( " var controlsGizmo = new OrbitControlsGizmo(orbitControls, {size: 100, padding : 8, distance: dist});") ;
m_Writer.OutText( " var planeGeometry = new THREE.PlaneGeometry(ListPZ[ListPZ.length-1].z - ListPZ[0].z, ListPZ[ListPZ.length-1].z - ListPZ[0].z, 1, 1);") ;
m_Writer.OutText( " var planeMaterial = new THREE.MeshLambertMaterial({ color: 0xFDFEFE, transparent : true, opacity : 0.15 });") ;
m_Writer.OutText( " var plane = new THREE.Mesh(planeGeometry, planeMaterial);") ;
m_Writer.OutText( " plane.rotation.x = -0.5 * Math.PI; plane.position.x = 0; plane.position.y = -0.1; plane.position.z = 0;") ;
m_Writer.OutText( " plane.receiveShadow = false;") ;
m_Writer.OutText( " plane.name = 'GrigliaThreeJS';") ;
m_Writer.OutText( " scene.add(plane);") ;
m_Writer.OutText( " group = new THREE.Group();") ;
m_Writer.OutText( " scene.add(group);") ;
m_Writer.OutText( " spotLight1.target = plane;") ;
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; }) ;
m_Writer.OutText(" ") ;
//scorro le superfici trasparenti
for ( sSurfDist sCurrSurvDist : m_lTranspSurf)
{
// 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 + ");", false) ;
m_Writer.OutText( " list_of_objects.push(back_surf_mesh" + sCurrSurvDist.sName + ");", false) ;
}
m_Writer.OutText(" ") ;
// 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( " group.add(list_of_objects[i]);", false) ;
m_Writer.OutText( " };");
m_Writer.OutText( " list_of_objects = [];") ; // <--- svuotamento della lista di tutte le geometrie <--- guardare groupRoot
m_Writer.OutText( " group.add(plane);") ;
// controllo menu Gui
m_Writer.OutText( " var center;") ;
m_Writer.OutText( " var boxCreated = false;") ;
m_Writer.OutText( " var box;") ;
m_Writer.OutText( " controls = {") ;
m_Writer.OutText( " element: null,") ;
m_Writer.OutText( " motion : true,") ; // per la rotation
m_Writer.OutText( " origin: function(){ orbitControls.target = new THREE.Vector3(0,0,0);},");
m_Writer.OutText( " tar : orbitControls.target,") ; // il target della telecamera
m_Writer.OutText( " reset : function() {") ; // per resettare la telecamera alla condizioni iniziali
//m_Writer.OutText( " zoom = 1;") ;
m_Writer.OutText( " if(CameraView == 0){") ;
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( " }else {") ;
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, " + ToString(m_ZFar) + " * 75);") ;
m_Writer.OutText( " }") ;
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, renderer.domElement);") ;
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(" + ToString(m_ptCenter.y) + ", " + ToString(m_ptCenter.z) + ", " + ToString(m_ptCenter.x) + ");") ;
//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);") ;
/*
if (m_dCameraPhi == 0 || (m_ptCamera.x != m_ptCenter.x && m_ptCamera.y != m_ptCenter.y)) { // se vUP = (+ 1, 0 0) => gestire rotazione della scena
//m_ptCenter.x == m_ptCamera.x && m_ptCenter.y == m_ptCamera.y
//m_Writer.OutText(" orbitControls.rotateLeft(Math.PI/4)") ;
if (m_dCameraTheta >= 180 && m_dCameraTheta <= 360) {
m_Writer.OutText(" orbitControls.rotateLeft((-" + ToString(m_dCameraTheta) + " + 360) * Math.PI/180);");
}
else {
m_Writer.OutText(" orbitControls.rotateLeft((-" + ToString(m_dCameraTheta) + ") * Math.PI/180);");
}
}
if (m_dCameraPhi == 180 || (m_ptCamera.x != m_ptCenter.x && m_ptCamera.y != m_ptCenter.y)) {
if (m_dCameraTheta >= 180 && m_dCameraTheta <= 360) {
m_Writer.OutText(" orbitControls.rotateLeft((-" + ToString(m_dCameraTheta) + " + 360) * Math.PI/180);");
}
else {
m_Writer.OutText(" orbitControls.rotateLeft((-" + ToString(m_dCameraTheta) + ") * Math.PI/180);");
}
}
*/
m_Writer.OutText( " if (boxCreated) {") ;
m_Writer.OutText( " box = new THREE.BoxHelper(controls.element, 0xff0000);") ;
m_Writer.OutText( " camera.position.y = Math.abs(" + ToString( m_ptMin.y + ( m_dimZ * 1.15)) + ");") ; //115% in valore assoluto
m_Writer.OutText( " var center = box.geometry.boundingSphere.center;") ;
m_Writer.OutText( " orbitControls.target = center;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " },") ;
m_Writer.OutText( " MarkSelected : 'Perimeter',") ; // tipo di Marcatore selezionato
m_Writer.OutText( " bBox : false,") ;
m_Writer.OutText( " Mgrid: function() { GLOB_SEL = false; GLOB_DIST = true; MarkSel = 'G'; },") ;
m_Writer.OutText( " Msketch : function() { GLOB_SEL = false; GLOB_DIST = true; MarkSel = 'F'; },") ;
m_Writer.OutText( " Mperimeter : function() { GLOB_SEL = false; GLOB_DIST = true; MarkSel = 'B'; },") ;
m_Writer.OutText( " Select : function() { GLOB_SEL = true; GLOB_DIST = false; CancelMarkers(); },") ;
m_Writer.OutText( " cancel : function() { CancelMarkers(); GLOB_SEL = false; GLOB_DIST = false; controls.bBox = false; }") ;
m_Writer.OutText( " }") ;
// Cerco il parametro dall'url del gruppo da selezionare
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( " if (!booked) {") ;
//m_Writer.OutText( " booked = true;") ;
m_Writer.OutText( " findGroupByNameAndId(groupRoot, element, 1);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (controls.element == null) {") ;
//m_Writer.OutText( " booked = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
// creazione del menu Gui
//m_Writer.OutText( " var gui = new dat.GUI({ width: 300 });") ;
//m_Writer.OutText( " var guiCamera = gui.addFolder('Camera');") ;
//m_Writer.OutText( " guiCamera.add(controls, 'motion').name('Rotation');") ;
//m_Writer.OutText( " guiCamera.add(controls, 'reset').name('Reset');") ;
//m_Writer.OutText( " document.getElementsByClassName('dg main a')[0].style.marginRight = '0px';") ;
//m_Writer.OutText( " var guiBox = gui.addFolder('Box3D');") ;
//m_Writer.OutText( " guiBox.add(controls, 'bBox').name('Enable Box');") ;
// creazione della Scena per il cubetto
m_Writer.OutText( " var cubeRenderer = new THREE.WebGLRenderer({ antialias: true, alpha : true, transparent : true });") ;
m_Writer.OutText( " cubeRenderer.setSize(150, 150);") ;
m_Writer.OutText( " cubeRenderer.setPixelRatio(window.devicePixelRatio);") ;
m_Writer.OutText( " document.querySelector('.Contcube').appendChild(cubeRenderer.domElement);") ;
m_Writer.OutText( " var cubeScene = new THREE.Scene();") ;
m_Writer.OutText( " var cubeCamera;") ;
m_Writer.OutText( " if (CameraView == 0) {") ;
m_Writer.OutText( " cubeCamera = new THREE.OrthographicCamera(-150 / 5, 150 / 5, 150 / 5, -150 / 5, 1, 1000);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " cubeCamera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " cubeCamera.position.set(0, 0, 70);") ;
m_Writer.OutText( " cubeCamera.lookAt(0, 0, 0);") ;
m_Writer.OutText( " var viewCube = new ViewCubeControls(cubeCamera, undefined, undefined, cubeRenderer.domElement, orbitControls);") ;
m_Writer.OutText( " cubeScene.add(viewCube.getObject());") ;
// richiamo dell'evento "change-angle" del cubetto
m_Writer.OutText( " var Cposition = null;") ;
m_Writer.OutText( " var Ctarget = null;") ;
m_Writer.OutText( " var anim1 = 0;") ;
m_Writer.OutText( " var distanceC = 0;") ;
m_Writer.OutText( " viewCube.addEventListener('angle-change', ({ quaternion, t }) => {") ;
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
m_Writer.OutText( " if (viewCube._blockRot) {") ;
m_Writer.OutText( " if (anim1 == 0) {") ;
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(0, 0, 0)); //d0") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " anim1++;") ;
m_Writer.OutText( " camera.position.lerp(Cvers.multiplyScalar(distanceC), t);") ;
m_Writer.OutText( " orbitControls.update();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
// Setting parametri di rotazione
m_Writer.OutText( " var ComeFromRot = false;") ;
m_Writer.OutText( " var Cvers = null;") ;
m_Writer.OutText( " var Crot = null;") ;
m_Writer.OutText( " const toRad = Math.PI / 180;") ;
m_Writer.OutText( " function getVersor(name) {") ;
m_Writer.OutText( " switch (name) {") ;
m_Writer.OutText( " case 2: //FRONT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 0, 1);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(0 * toRad, 0 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 4: //BACK") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 0, -1);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(0 * toRad, 180 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 3: //RIGHT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1, 0, 0);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(0 * toRad, -90 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 5: //LEFT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1, 0, 0);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(0 * toRad, -270 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 1: //TOP") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 1, 0);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(90 * toRad, 0 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 6: //BOTTOM") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(0, -1, 0);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-90 * toRad, 0 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 11: //FRONT-RIGHT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(2), 0, 1 / Math.sqrt(2));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(0 * toRad, -45 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 7: //FRONT-TOP") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 1 / Math.sqrt(2), 1 / Math.sqrt(2));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(45 * toRad, 0 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 14: //FRONT-LEFT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(2), 0, 1 / Math.sqrt(2));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(0 * toRad, -315 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 15: //FRONT-BOTTOM") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(0, -1 / Math.sqrt(2), 1 / Math.sqrt(2));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-45 * toRad, 0 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 12: //BACK-RIGHT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(2), 0, -1 / Math.sqrt(2));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(0 * toRad, -135 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 9: //BACK-TOP") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 1 / Math.sqrt(2), -1 / Math.sqrt(2));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(45 * toRad, -180 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 13: //BACK-LEFT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(2), 0, -1 / Math.sqrt(2));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(0 * toRad, -225 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 17: //BACK-BOTTOM") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(0, -1 / Math.sqrt(2), -1 / Math.sqrt(2));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-45 * toRad, -180 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 8: //RIGHT-TOP") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(2), 1 / Math.sqrt(2), 0);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(45 * toRad, -90 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 16: //RIGHT-BOTTOM") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(2), -1 / Math.sqrt(2), 0);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-45 * toRad, -90 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 10: //LEFT-TOP") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(2), 1 / Math.sqrt(2), 0);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(45 * toRad, -270 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 18: //LEFT-BOTTOM") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(2), -1 / Math.sqrt(2), 0);") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-45 * toRad, 270 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 21: //TOP-LEFT-BACK") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(3), 1 / Math.sqrt(3), -1 / Math.sqrt(3));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(45 * toRad, -225 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 20: //TOP-BACK-RIGHT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(3), 1 / Math.sqrt(3), -1 / Math.sqrt(3));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(45 * toRad, -135 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 19: //TOP-RIGHT-FRONT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(3), 1 / Math.sqrt(3), 1 / Math.sqrt(3));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(45 * toRad, -45 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 22: //TOP-FRONT-LEFT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(3), 1 / Math.sqrt(3), 1 / Math.sqrt(3));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(45 * toRad, -315 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 26: //BOTTOM-LEFT-FRONT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(3), -1 / Math.sqrt(3), 1 / Math.sqrt(3));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-45 * toRad, -315 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 23: //BOTTOM-FRONT-RIGHT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(3), -1 / Math.sqrt(3), 1 / Math.sqrt(3));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-45 * toRad, -45 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 25: //BOTTOM-LEFT-BACK") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(3), -1 / Math.sqrt(3), -1 / Math.sqrt(3));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-45 * toRad, -225 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case 24: //BOTTOM-BACK-RIGHT") ;
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(3), -1 / Math.sqrt(3), -1 / Math.sqrt(3));") ;
m_Writer.OutText( " Crot = new THREE.Vector3(-45 * toRad, -135 * toRad, 0 * toRad);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
// colori delle parti del cubo
m_Writer.OutText( " ColoraCubo(viewCube);") ;
m_Writer.OutText( " function ColoraCubo(viewCube) {") ;
m_Writer.OutText( " var blue = 0x0275d8; var red = 0xd9534f; var green = 0x5cb85c;");
m_Writer.OutText( " viewCube._cube.children[0].children[0].material.color = new THREE.Color(red);//faces // front -> X") ;
m_Writer.OutText( " viewCube._cube.children[0].children[1].material.color = new THREE.Color(green); // right -> Y") ;
m_Writer.OutText( " viewCube._cube.children[0].children[2].material.color = new THREE.Color(red); // back -> -X") ;
m_Writer.OutText( " viewCube._cube.children[0].children[3].material.color = new THREE.Color(green); // left -> -Y") ;
m_Writer.OutText( " viewCube._cube.children[0].children[4].material.color = new THREE.Color(blue); // top -> Z") ;
m_Writer.OutText( " viewCube._cube.children[0].children[5].material.color = new THREE.Color(blue); // bottom -> -Z") ;
m_Writer.OutText( " viewCube._cube.children[1].children[0].children[0].material.color = new THREE.Color(red); //top-corners") ;
m_Writer.OutText( " viewCube._cube.children[1].children[0].children[1].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[0].children[2].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[1].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[1].children[1].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[1].children[2].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[2].children[0].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[2].children[1].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[2].children[2].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[3].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[3].children[1].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[3].children[2].material.color = new THREE.Color(blue); //back-corners") ;
m_Writer.OutText( " viewCube._cube.children[2].children[0].children[0].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[0].children[1].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[0].children[2].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[1].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[1].children[1].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[1].children[2].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[2].children[0].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[2].children[1].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[2].children[2].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[3].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[3].children[1].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[3].children[2].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[0].children[0].material.color = new THREE.Color(red);//top-edges") ;
m_Writer.OutText( " viewCube._cube.children[3].children[0].children[1].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[1].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[1].children[1].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[2].children[0].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[2].children[1].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[3].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[3].children[1].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[0].children[0].material.color = new THREE.Color(red);//bottom-edges") ;
m_Writer.OutText( " viewCube._cube.children[4].children[0].children[1].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[1].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[1].children[1].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[2].children[0].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[2].children[1].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[3].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[3].children[1].material.color = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[0].children[0].material.color = new THREE.Color(red);//lateral-edges") ;
m_Writer.OutText( " viewCube._cube.children[5].children[0].children[1].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[1].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[1].children[1].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[2].children[0].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[2].children[1].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[3].children[0].material.color = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[3].children[1].material.color = new THREE.Color(red);") ;
m_Writer.OutText( " // OLD-COLORS =======================================================================================") ;
m_Writer.OutText( " viewCube._cube.children[0].children[0].material.oldColor = new THREE.Color(red); // front -> X") ;
m_Writer.OutText( " viewCube._cube.children[0].children[1].material.oldColor = new THREE.Color(green); // right -> Y") ;
m_Writer.OutText( " viewCube._cube.children[0].children[2].material.oldColor = new THREE.Color(red); // back -> -X") ;
m_Writer.OutText( " viewCube._cube.children[0].children[3].material.oldColor = new THREE.Color(green); // left -> -Y") ;
m_Writer.OutText( " viewCube._cube.children[0].children[4].material.oldColor = new THREE.Color(blue); // top -> Z") ;
m_Writer.OutText( " viewCube._cube.children[0].children[5].material.oldColor = new THREE.Color(blue); // bottom -> -Z") ;
m_Writer.OutText( " viewCube._cube.children[1].children[0].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[0].children[1].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[0].children[2].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[1].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[1].children[1].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[1].children[2].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[2].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[2].children[1].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[2].children[2].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[3].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[3].children[1].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[1].children[3].children[2].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[0].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[0].children[1].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[0].children[2].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[1].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[1].children[1].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[1].children[2].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[2].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[2].children[1].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[2].children[2].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[3].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[3].children[1].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[2].children[3].children[2].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[0].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[0].children[1].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[1].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[1].children[1].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[2].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[2].children[1].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[3].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[3].children[3].children[1].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[0].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[0].children[1].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[1].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[1].children[1].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[2].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[2].children[1].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[3].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[4].children[3].children[1].material.oldColor = new THREE.Color(blue);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[0].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[0].children[1].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[1].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[1].children[1].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[2].children[0].material.oldColor = new THREE.Color(red);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[2].children[1].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[3].children[0].material.oldColor = new THREE.Color(green);") ;
m_Writer.OutText( " viewCube._cube.children[5].children[3].children[1].material.oldColor = new THREE.Color(red);") ;
// inserimento facce del cubo in una lista
m_Writer.OutText( " face_list = [];") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[0].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[0].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[0].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[0].children[3]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[0].children[4]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[0].children[5]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[0].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[0].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[0].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[1].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[1].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[1].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[2].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[2].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[2].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[3].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[3].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[3].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[0].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[0].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[0].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[1].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[1].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[1].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[2].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[2].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[2].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[3].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[3].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[2].children[3].children[2]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[3].children[0].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[3].children[0].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[3].children[1].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[3].children[1].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[3].children[2].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[3].children[2].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[3].children[3].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[3].children[3].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[4].children[0].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[4].children[0].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[4].children[1].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[4].children[1].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[4].children[2].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[4].children[2].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[4].children[3].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[4].children[3].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[5].children[0].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[5].children[0].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[5].children[1].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[5].children[1].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[5].children[2].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[5].children[2].children[1]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[5].children[3].children[0]);") ;
m_Writer.OutText( " face_list.push(viewCube._cube.children[5].children[3].children[1]);") ;
m_Writer.OutText( " }");
// --- Gestione degli eventi click dei bottoni
m_Writer.OutText( " document.getElementsByClassName('bt_nb_close')[0].addEventListener('click', function(){") ;
m_Writer.OutText( " document.getElementById('MenuReal').classList.remove('show');") ;
m_Writer.OutText( " document.getElementById('btn_Menu').style.visibility = 'visible';") ;
m_Writer.OutText( " document.getElementById('btn_Menu').classList.remove('click');") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('btn_Menu').addEventListener('click', function(){") ;
m_Writer.OutText( " document.getElementById('btn_Menu').style.visibility = 'hidden';") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTORTHO').addEventListener('click', function(){") ;
m_Writer.OutText( " CameraView = 0;") ;
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) + "; camera.position.y = " + ToString(m_ptCamera.z) + "; 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, renderer.domElement);") ;
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(" + ToString(m_ptCenter.y) + ", " + ToString(m_ptCenter.z) + ", " + ToString(m_ptCenter.x) + ");") ;
m_Writer.OutText( " const item = document.querySelector('.Contcube')") ;
m_Writer.OutText( " while (item.firstChild) {") ;
m_Writer.OutText( " item.removeChild(item.firstChild);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " document.querySelector('.Contcube').appendChild(cubeRenderer.domElement);") ;
m_Writer.OutText( " cubeScene = new THREE.Scene();") ;
m_Writer.OutText( " cubeCamera = new THREE.OrthographicCamera(-150 / 5, 150 / 5, 150 / 5, -150 / 5, 1, 1000);") ;
m_Writer.OutText( " cubeCamera.position.set(0, 0, 70);") ;
m_Writer.OutText( " cubeCamera.lookAt(0, 0, 0);") ;
m_Writer.OutText( " viewCube = new ViewCubeControls(cubeCamera, undefined, undefined, cubeRenderer.domElement, orbitControls);") ;
m_Writer.OutText( " cubeScene.add(viewCube.getObject());") ;
m_Writer.OutText( " Cposition = null;") ;
m_Writer.OutText( " Ctarget = null;") ;
m_Writer.OutText( " anim1 = 0;") ;
m_Writer.OutText( " distanceC = 0;") ;
m_Writer.OutText( " viewCube.addEventListener('angle-change', ({ quaternion, t }) => {") ;
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
m_Writer.OutText( " if (viewCube._blockRot) {") ;
m_Writer.OutText( " if (anim1 == 0) {") ;
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(0, 0, 0)); //d0") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " anim1++;") ;
m_Writer.OutText( " camera.position.lerp(Cvers.multiplyScalar(distanceC), t);") ;
m_Writer.OutText( " orbitControls.update();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " ColoraCubo(viewCube);") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTPERS').addEventListener('click', function(){") ;
m_Writer.OutText( " CameraView = 1;") ;
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, " + ToString(m_ZFar) + " * 75);") ;
m_Writer.OutText( " camera.position.x = " + ToString(m_ptCamera.y) + "; camera.position.y = " + ToString(m_ptCamera.z) + "; 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, renderer.domElement);") ;
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(" + ToString(m_ptCenter.y) + ", " + ToString(m_ptCenter.z) + ", " + ToString(m_ptCenter.x) + ");") ;
m_Writer.OutText( " const item = document.querySelector('.Contcube')") ;
m_Writer.OutText( " while (item.firstChild) {") ;
m_Writer.OutText( " item.removeChild(item.firstChild);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " document.querySelector('.Contcube').appendChild(cubeRenderer.domElement);") ;
m_Writer.OutText( " cubeScene = new THREE.Scene();") ;
m_Writer.OutText( " cubeCamera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);") ;
m_Writer.OutText( " cubeCamera.position.set(0, 0, 70);") ;
m_Writer.OutText( " cubeCamera.lookAt(0, 0, 0);") ;
m_Writer.OutText( " viewCube = new ViewCubeControls(cubeCamera, undefined, undefined, cubeRenderer.domElement, orbitControls);") ;
m_Writer.OutText( " cubeScene.add(viewCube.getObject());") ;
m_Writer.OutText( " Cposition = null;") ;
m_Writer.OutText( " Ctarget = null;") ;
m_Writer.OutText( " anim1 = 0;") ;
m_Writer.OutText( " distanceC = 0;") ;
m_Writer.OutText( " viewCube.addEventListener('angle-change', ({ quaternion, t }) => {") ;
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
m_Writer.OutText( " if (viewCube._blockRot) {") ;
m_Writer.OutText( " if (anim1 == 0) {") ;
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(0, 0, 0)); //d0") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " anim1++;") ;
m_Writer.OutText( " camera.position.lerp(Cvers.multiplyScalar(distanceC), t);") ;
m_Writer.OutText( " orbitControls.update();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " ColoraCubo(viewCube);") ;
m_Writer.OutText( " });") ;
//m_Writer.OutText( " document.getElementById('BTINFO').addEventListener('click', function(){ window.open('https://iis01.egalware.com/Test3D/Lib/info.txt', '_blank').focus()});") ;
m_Writer.OutText( " if (!isMobile && !isTablet) {") ;
m_Writer.OutText( " document.getElementsByClassName('controlMenu')[0].style.overflowY = 'hidden';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " document.getElementsByClassName('ContLogo')[0].addEventListener('click', function(){") ;
m_Writer.OutText( " if (window.getComputedStyle(document.getElementsByClassName('controlMenu')[0], null).getPropertyValue('visibility') == 'hidden') {") ;
m_Writer.OutText( " document.getElementsByClassName('controlMenu')[0].style.visibility = 'visible';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementsByClassName('controlMenu')[0].style.visibility = 'hidden';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTRESET').addEventListener('click', function() {controls.reset()});") ;
m_Writer.OutText( " document.getElementById('BTROTATE').addEventListener('click', function() {") ;
m_Writer.OutText( " if (controls.motion) {") ;
m_Writer.OutText( " controls.motion = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " controls.motion = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTORIG').addEventListener('click', function() {orbitControls.target = new THREE.Vector3(0, 0, 0); })") ;
m_Writer.OutText( " document.getElementById('BTBOX').addEventListener('click', function() {") ;
m_Writer.OutText( " if (controls.bBox) {") ;
m_Writer.OutText( " controls.bBox = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " controls.bBox = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " })") ;
m_Writer.OutText( " document.getElementById('BTSEL').addEventListener('click', function() {") ;
m_Writer.OutText( " GLOB_SEL = true;") ;
m_Writer.OutText( " SelType = 0;") ;
m_Writer.OutText( " GLOB_DIST = false;") ;
m_Writer.OutText( " CancelMarkers();") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTSHOW').addEventListener('click', function() {") ;
m_Writer.OutText( " GLOB_SEL = true;") ;
m_Writer.OutText( " SelType = 1;") ;
m_Writer.OutText( " GLOB_DIST = false;") ;
m_Writer.OutText( " CancelMarkers();") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTSHOWALL').addEventListener('click', function(){") ;
m_Writer.OutText( " updateVisibility(groupRoot.children[0], 'on');") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTGRID').addEventListener('click', function(){") ;
m_Writer.OutText( " GLOB_DIST = true; MarkSel = 'G'; GLOB_SEL = false;") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTSKETCH').addEventListener('click', function(){") ;
m_Writer.OutText( " GLOB_DIST = true; MarkSel = 'F'; GLOB_SEL = false;") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTPERIMETER').addEventListener('click', function(){") ;
m_Writer.OutText( " GLOB_DIST = true; MarkSel = 'B'; GLOB_SEL = false;") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " document.getElementById('BTCANC').addEventListener('click', function(){") ;
m_Writer.OutText( " GLOB_DIST = false; controls.bBox = false; GLOB_SEL = false; CancelMarkers();") ;
m_Writer.OutText( " })") ;
m_Writer.OutText( " document.getElementById('Fbtn_canc').addEventListener('click', function(){") ;
m_Writer.OutText( " SelezioneXFiera();") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " var index_LSS = [];") ;
m_Writer.OutText( " var udm = 'mm';") ;
m_Writer.OutText( " if (!Ismm) { udm = 'in'; }") ;
m_Writer.OutText( " var t = 0; var inc = true;") ;
// funzione render per la scena
m_Writer.OutText( " function renderScene() {") ;
m_Writer.OutText( " if (viewCube._blockRot == false) {") ;
m_Writer.OutText( " if (ComeFromRot) {") ;
m_Writer.OutText( " ComeFromRot = false;") ;
m_Writer.OutText( " anim1 = 0;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
m_Writer.OutText( " if (isTablet || isMobile) {") ;
m_Writer.OutText( " camera.zoom = orbitControls.ComputedZoom;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " orbitControls.update();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " ComeFromRot = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (viewCube._name != null && viewCube._name != '') { // c'è stata una intersezione") ;
m_Writer.OutText( " index_LSS = [];") ;
m_Writer.OutText( " for (var i = 0; i < face_list.length; i++) {") ;
m_Writer.OutText( " if (face_list[i].name == viewCube._name) {") ;
m_Writer.OutText( " index_LSS.push(i);") ;
m_Writer.OutText( " face_list[i].material.color = new THREE.Color(0xFFFFFF);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " for (var i = 0; i < face_list.length; i++) {") ;
m_Writer.OutText( " for (var j = 0; j < index_LSS.length; j++) {") ;
m_Writer.OutText( " if (face_list[i].name != face_list[index_LSS[j]].name) {") ;
m_Writer.OutText( " face_list[i].material.color = face_list[i].material.oldColor;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else { // non c'è intersezione") ;
m_Writer.OutText( " for (var j = 0; j < index_LSS.length; j++) {") ;
m_Writer.OutText( " face_list[index_LSS[j]].material.color = face_list[index_LSS[j]].material.oldColor;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
m_Writer.OutText( " requestAnimationFrame(renderScene);") ;
m_Writer.OutText( " renderer.setSize(window.screen.availWidth, window.screen.availHeight);") ;
m_Writer.OutText( " renderer.render(scene, camera);") ;
m_Writer.OutText( " GLOB_BOX = controls.bBox;") ;
m_Writer.OutText( " if (controls.motion) {") ;
m_Writer.OutText( " document.getElementById('BTROTATE').style.color = '#5cb85c';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementById('BTROTATE').style.color = '#d9534f';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (orbitControls.target.x == 0 && orbitControls.target.x == 0 && orbitControls.target.x == 0) {") ;
m_Writer.OutText( " document.getElementById('BTORIG').style.color = '#5cb85c';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementById('BTORIG').style.color = '#d9534f';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (CameraView == 0) {") ;
m_Writer.OutText( " document.getElementById('BTORTHO').style.color = '#5cb85c';") ;
m_Writer.OutText( " document.getElementById('BTPERS').style.color = '#d9534f';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementById('BTORTHO').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTPERS').style.color = '#5cb85c';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (GLOB_DIST) {") ;
m_Writer.OutText( " GLOB_SEL = false;") ;
m_Writer.OutText( " var Smarkers;") ;
m_Writer.OutText( " if (MarkSel == 'F') { Smarkers = 'S' }") ;
m_Writer.OutText( " else if (MarkSel == 'B') { Smarkers = 'P' }") ;
m_Writer.OutText( " else if (MarkSel == 'G') { Smarkers = 'G' }") ;
m_Writer.OutText( " document.getElementById('sDistVal').innerHTML = ' (' + Smarkers + ') ' + parseFloat((udmScala * distance).toFixed(2)) + ' ' + udm;") ;
m_Writer.OutText( " document.getElementById('sDdx').innerHTML = '&Delta;x: ' + parseFloat((udmScala * dz).toFixed(2)) + ' ' + udm;") ;
m_Writer.OutText( " document.getElementById('sDdy').innerHTML = '&Delta;y: ' + parseFloat((udmScala * dx).toFixed(2)) + ' ' + udm;") ;
m_Writer.OutText( " document.getElementById('sDdz').innerHTML = '&Delta;z: ' + parseFloat((udmScala * dy).toFixed(2)) + ' ' + udm;") ;
m_Writer.OutText( " document.getElementById('Idis').style.color = '#5cb85c';") ;
m_Writer.OutText( " if (MarkSel == 'F') {") ;
m_Writer.OutText( " document.getElementById('BTSKETCH').style.color = '#5cb85c';") ;
m_Writer.OutText( " document.getElementById('BTGRID').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTPERIMETER').style.color = '#d9534f';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (MarkSel == 'B') {") ;
m_Writer.OutText( " document.getElementById('BTSKETCH').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTGRID').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTPERIMETER').style.color = '#5cb85c';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (MarkSel == 'G') {") ;
m_Writer.OutText( " document.getElementById('BTSKETCH').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTGRID').style.color = '#5cb85c';") ;
m_Writer.OutText( " document.getElementById('BTPERIMETER').style.color = '#d9534f';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementById('sDistVal').innerHTML = ' not enabled';") ;
m_Writer.OutText( " document.getElementById('sDdx').innerHTML = '&Delta;x: 0 ' + udm;") ;
m_Writer.OutText( " document.getElementById('sDdy').innerHTML = '&Delta;y: 0 ' + udm;") ;
m_Writer.OutText( " document.getElementById('sDdz').innerHTML = '&Delta;z: 0 ' + udm;") ;
m_Writer.OutText( " scene.remove(markerA);") ;
m_Writer.OutText( " scene.remove(markerB);") ;
m_Writer.OutText( " if (LineMarker != null) {") ;
m_Writer.OutText( " scene.remove(LineMarker);") ;
m_Writer.OutText( " scene.remove(cylinder);") ;
m_Writer.OutText( " scene.remove(CilArrow);") ;
m_Writer.OutText( " isLineMarkerinScene = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " document.getElementById('Idis').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTSKETCH').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTGRID').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTPERIMETER').style.color = '#d9534f';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (GLOB_BOX) {") ;
m_Writer.OutText( " var boxDeltaX = 0;") ;
m_Writer.OutText( " var boxDeltaY = 0;") ;
m_Writer.OutText( " var boxDeltaZ = 0;") ;
m_Writer.OutText( " if (SelectedCurrG != null) {") ;
m_Writer.OutText( " bbox = new THREE.Box3().setFromObject(SelectedCurrG);") ;
m_Writer.OutText( " if (boxH !== null) {") ;
m_Writer.OutText( " boxDeltaX = parseFloat((Math.abs(udmScala * (bbox.max.x - bbox.min.x))).toFixed(2));") ;
m_Writer.OutText( " boxDeltaY = parseFloat((Math.abs(udmScala * (bbox.max.y - bbox.min.y))).toFixed(2));") ;
m_Writer.OutText( " boxDeltaZ = parseFloat((Math.abs(udmScala * (bbox.max.z - bbox.min.z))).toFixed(2));") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " document.getElementById('sBoxVal').innerHTML = ' enabled';") ;
m_Writer.OutText( " document.getElementById('sBdx').innerHTML = '&Delta;x: ' + boxDeltaZ + ' ' + udm;") ;
m_Writer.OutText( " document.getElementById('sBdy').innerHTML = '&Delta;y: ' + boxDeltaX + ' ' + udm;") ;
m_Writer.OutText( " document.getElementById('sBdz').innerHTML = '&Delta;z: ' + boxDeltaY + ' ' + udm;") ;
m_Writer.OutText( " document.getElementById('Ibox').style.color = '#5cb85c';") ;
m_Writer.OutText( " document.getElementById('BTBOX').style.color = '#5cb85c';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementById('sBoxVal').innerHTML = ' not enabled';") ;
m_Writer.OutText( " document.getElementById('sBdx').innerHTML = '&Delta;x: 0 ' + udm;") ;
m_Writer.OutText( " document.getElementById('sBdy').innerHTML = '&Delta;y: 0 ' + udm;") ;
m_Writer.OutText( " document.getElementById('sBdz').innerHTML = '&Delta;z: 0 ' + udm;") ;
m_Writer.OutText( " document.getElementById('Ibox').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTBOX').style.color = '#d9534f';") ;
m_Writer.OutText( " if (boxH != null) {") ;
m_Writer.OutText( " boxH.visible = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (GLOB_SEL) {") ;
m_Writer.OutText( " GLOB_DIST = false;") ;
m_Writer.OutText( " CancelMarkers();") ;
m_Writer.OutText( " document.getElementById('sSelVal').innerHTML = 'enabled';") ;
m_Writer.OutText( " document.getElementById('sSid').innerHTML = 'Id : ' + SelectedObject_id;") ;
m_Writer.OutText( " document.getElementById('Isel').style.color = '#5cb85c';") ;
m_Writer.OutText( " if (SelType == 0) {") ;
m_Writer.OutText( " document.getElementById('BTSEL').style.color = '#5cb85c';") ;
m_Writer.OutText( " document.getElementById('BTSHOW').style.color = '#d9534f';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (SelType == 1) {") ;
m_Writer.OutText( " document.getElementById('BTSEL').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTSHOW').style.color = '#5cb85c';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementById('sSelVal').innerHTML = 'not enabled';") ;
m_Writer.OutText( " document.getElementById('sSid').innerHTML = 'Id : none';") ;
m_Writer.OutText( " document.getElementById('Isel').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTSEL').style.color = '#d9534f';") ;
m_Writer.OutText( " document.getElementById('BTSHOW').style.color = '#d9534f';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " viewCube.update(orbitControls);") ;
m_Writer.OutText( " cubeRenderer.render(cubeScene, cubeCamera);") ;
m_Writer.OutText( " if (inc) { t = t + 2.5; }") ;
m_Writer.OutText( " else { t = t - 2.5; }") ;
m_Writer.OutText( " if (t == 60) { inc = false; }") ;
m_Writer.OutText( " if (t == 0) { inc = true; }") ;
m_Writer.OutText( " if (isMarkAinScene) {") ;
m_Writer.OutText( " if (t == 60) {") ;
m_Writer.OutText( " markerA.material.color = new THREE.Color(0xff0000)") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (t == 0) {") ;
m_Writer.OutText( " markerA.material.color = new THREE.Color(0xff0000);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (isMarkBinScene) {") ;
m_Writer.OutText( " markerB.material.color.copy(markerA.material.color);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (isLineMarkerinScene) {") ;
m_Writer.OutText( " cylinder.material.color.copy(markerA.material.color)") ;
m_Writer.OutText( " CilArrow.material.color.copy(markerA.material.color)") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
// applico il render al div #WEBGL-output
m_Writer.OutText( " document.getElementById('WebGL-output').appendChild(renderer.domElement);") ;
// imposto l'altezza massima del menu laterale sinistro
m_Writer.OutText( " document.querySelector('#contMenu').style.maxHeight = (window.screen.availHeight - (175 + 36 + 36 + 20)) + 'px'; ") ;
// imposto la lunghezza e l'altezza del canvas al 100% dello schermo
m_Writer.OutText( " document.getElementsByTagName('canvas')[0].style.width = '100vw';") ;
m_Writer.OutText( " document.getElementsByTagName('canvas')[0].style.height = '100vh';") ;
// applico il cotroller OrbitControlGizmo in basso a destra
//m_Writer.OutText( " document.body.appendChild(controlsGizmo.domElement);") ;
// chiamo il render della scena
m_Writer.OutText( " renderScene();") ;
// blocco i comandi Gizmo da tablet
//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( " Updatebadge(groupRoot, -1);") ;
m_Writer.OutText( " document.getElementsByTagName('canvas')[0].setAttribute('id', 'CScena');") ;
//m_Writer.OutText( " document.getElementsByTagName('canvas')[1].setAttribute('id', 'CGizmo');") ;
m_Writer.OutText( " document.getElementById('CScena').addEventListener('mouseover', (event) => {") ;
m_Writer.OutText( " if (GLOB_DIST) {") ;
m_Writer.OutText( " document.getElementById('CScena').style.cursor = 'crosshair';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (GLOB_SEL) {") ;
m_Writer.OutText( " document.getElementById('CScena').style.cursor = 'pointer';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementById('CScena').style.cursor = 'auto';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " $('#ContProgBar').fadeOut();") ;
m_Writer.OutText( " document.getElementById('btn_Menu').style.visibility = 'visible';") ;
m_Writer.OutText( " document.getElementById('strisciaFinale').style.visibility = 'visible';") ;
m_Writer.OutText( " document.getElementsByClassName('ContLogo')[0].style.visibility = 'visible';") ;
//m_Writer.OutText( " document.getElementsByClassName('ContInfo')[0].style.visibility = 'visible';") ;
m_Writer.OutText( " }") ; // chiusura della funzione di init()
// DICHIARAZIONE DI TUTTE LE FUNZIONI UTILIZZATE NELLA INIT()
// 1) funzione Updatebadge
// - obj: aggiornare i badge nel menu di sinistra
// - par: gruppo da cui iniziare la ricerca, id della radice (per contare i figli del gruppo e aggiornare il numero correttamente)
m_Writer.OutText( " function Updatebadge(CurrentGroup, Id_sup) {") ;
m_Writer.OutText( " CurrentGroup.children.forEach(element => {") ;
m_Writer.OutText( " if(element.children.length != 0 && element.type == 'Group') {") ;
m_Writer.OutText( " var i = 0;") ;
m_Writer.OutText( " for (var j = 0; j < element.children.length; j++) {") ;
m_Writer.OutText( " if (element.children[j].type == 'Group') {") ;
m_Writer.OutText( " i++;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if(i != 0) {") ;
m_Writer.OutText( " document.getElementById('s_id_' + element.name).innerHTML = '' + i;") ;
m_Writer.OutText( " document.getElementById('ss_id_' + element.name).classList.add('fw-bold');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " Updatebadge(element, element.id);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " }") ;
// 2) funzione findGroupByNameAndId
// - obj: trova il gruppo dato il suo id
// - par: gruppo da cui iniziare la ricerca, id, n = (0, 1, 2, 3) | 0 -> id selezionato da URL | 1 -> id selezionato da MENU LATERALE | 3 -> selezionato da lampadina | 4 -> selezionato da barra ricerca per fiera
m_Writer.OutText( " function findGroupByNameAndId(CurrentGroup, Id, n) {") ;
m_Writer.OutText( " CurrentGroup.children.forEach(element => {") ;
m_Writer.OutText( " if (element.name == Id && element.children.length != 0) {") ;
m_Writer.OutText( " if (LastGroupSelected == null) {") ;
m_Writer.OutText( " LastGroupSelected = element;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " LastGroupSelected = CurrentSelectedGroup") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " CurrentSelectedGroup = element;") ;
m_Writer.OutText( " if (n == 0) {") ;
m_Writer.OutText( " controls.element = element;") ;
m_Writer.OutText( " createBox(element);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if(n != 3 && $('#lb_' + Id).attr('name') != 'lb_off'){ ") ;
//m_Writer.OutText( " booked = true;");
m_Writer.OutText( " if (n == 4) { ") ;
m_Writer.OutText( " EvidenziaLoadPage(element, 1); ") ;
m_Writer.OutText( " } ") ;
m_Writer.OutText( " else { ") ;
m_Writer.OutText( " EvidenziaLoadPage(element, 0); ") ;
m_Writer.OutText( " } ") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (element.children.length != 0) {") ;
m_Writer.OutText( " findGroupByNameAndId(element, Id, n);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " }") ;
// 3) funzione createBox
// - obj: crea il box attorno al gruppo selezionato
// - par: il gruppo
m_Writer.OutText( " function createBox(element) {") ;
m_Writer.OutText( " var box = new THREE.BoxHelper(element, 0xff0000);") ;
m_Writer.OutText( " camera.position.y = " + ToString( m_ptCamera.z * 1.2) + ";") ;
m_Writer.OutText( " if (box.geometry.boundingSphere != null) {") ;
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( " }") ;
// 4) funzione EnlightGroup
// - obj: evidenziare il gruppo (e i vari sottogruppi), togliendo le trasparenze durante l'evidenziatura
// - par: il gruppo
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(0x0275D8);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (element instanceof THREE.Mesh) { //mesh") ;
m_Writer.OutText( " element.material.color = new THREE.Color(0x0275D8);") ;
m_Writer.OutText( " element.material.emissive = new THREE.Color(0x0000ff);") ;
m_Writer.OutText( " element.material.emissiveIntensity = 1.2;") ;
m_Writer.OutText( " element.material.transparent = false;") ;
m_Writer.OutText( " element.material.opacity = 1;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (element instanceof THREE.Points) { //punto") ;
m_Writer.OutText( " element.material.color = new THREE.Color(0x0275D8);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (element instanceof THREE.Vector3) { //vettore") ;
m_Writer.OutText( " element.line.material.color = new THREE.Color(0x0275D8);") ;
m_Writer.OutText( " element.cone.material.color = new THREE.Color(0x0275D8);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (element instanceof THREE.Object3D) { //frame") ;
m_Writer.OutText( " element.line.material.color = new THREE.Color(0x0275D8);") ;
m_Writer.OutText( " element.cone.material.color = new THREE.Color(0x0275D8);") ;
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( " }") ;
// 5) funzione GetColorBack
// - obj: riportare il gruppo (e i vari sottogruppi) al colore originale (insieme alle trasparenze)
// - par: il gruppo
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( " if (element.material.wasTransparent) {") ;
m_Writer.OutText( " element.material.transparent = true;") ;
m_Writer.OutText( " element.material.opacity = element.material.hadOpacity;") ;
m_Writer.OutText( " }") ;
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( " }") ;
// 6) funzione EvidenziaLoadPage
// - obj: evidenziare il gruppo per 0.5 secondi e poi riportarlo all'orginale per altri 0.5 secondi (questa procedure viene ripetuta per 3 volte, per una durata complessiva di 3 secondi)
// - par: il gruppo
m_Writer.OutText( " var timer = null;") ;
m_Writer.OutText( " function EvidenziaLoadPage(ChoosenGroup, n) {") ;
m_Writer.OutText( " for (var i = 0; i < document.getElementsByName('btMenu').length; i++) {document.getElementsByName('btMenu')[i].style.backgroundColor = 'white';}") ;
m_Writer.OutText( " try {document.getElementById('p_id_' + ChoosenGroup.name).style.backgroundColor = 'yellow';}catch (err) {}") ;
m_Writer.OutText( " if (timer != null) {") ;
m_Writer.OutText( " clearTimeout(timer);") ;
m_Writer.OutText( " GetColorBack(LastGroupSelected);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (ChoosenGroup === null) {") ;
m_Writer.OutText( " return;") ;
m_Writer.OutText( " }") ;
//m_Writer.OutText( " ControlMenu(true, ChoosenGroup.name);") ;
m_Writer.OutText( " var i = 0;") ;
m_Writer.OutText( " var j = 0;") ;
m_Writer.OutText( " var YellowSet = false;") ;
m_Writer.OutText( " var OrigColSet = false;") ;
m_Writer.OutText( " function animation() {") ;
m_Writer.OutText( " /*var*/ timer = setTimeout(function() {") ;
m_Writer.OutText( " i++;") ;
m_Writer.OutText( " j++;") ;
m_Writer.OutText( " if (!YellowSet && i == 1)") ;
m_Writer.OutText( " {") ;
m_Writer.OutText( " EnlightGroup(ChoosenGroup);") ;
m_Writer.OutText( " YellowSet = true;") ;
m_Writer.OutText( " OrigColSet = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (!OrigColSet && i == 2)") ;
m_Writer.OutText( " {") ;
m_Writer.OutText( " GetColorBack(ChoosenGroup);") ;
m_Writer.OutText( " YellowSet = false;") ;
m_Writer.OutText( " OrigColSet = true;") ;
m_Writer.OutText( " i = 0") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (j < 6 || n == 1) {") ;
m_Writer.OutText( " animation();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " clearTimeout(timer);") ;
//m_Writer.OutText( " ControlMenu(false, ChoosenGroup.name);") ;
//m_Writer.OutText( " booked = false;") ;
m_Writer.OutText( " timer = null;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }, 500);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " animation();") ;
m_Writer.OutText( " }") ;
// 7) funzione ControlMenu
// - obj: evidenziare il gruppo nel menu selezionato e disabilitare gli altri
// - par: ToBlock (T -> inizio selezione | F -> fine selezione), id del gruppo selezionato, colore
m_Writer.OutText( " function ControlMenu(toBlock, id) {") ;
m_Writer.OutText( " for (var i = 0; i < document.getElementsByName('btMenu').length; i++) {") ;
m_Writer.OutText( " if (document.getElementsByName('btMenu')[i].id.substr(5, document.getElementsByName('btMenu')[i].id.length) != id) {") ;
m_Writer.OutText( " if (toBlock) {") ;
m_Writer.OutText( " document.getElementsByName('btMenu')[i].classList.add('disabled');") ;
m_Writer.OutText( " document.getElementsByName('s_nb')[i].style.color = 'grey';");
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementsByName('btMenu')[i].classList.remove('disabled');") ;
m_Writer.OutText( " document.getElementsByName('s_nb')[i].style.color = 'black';");
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " if (toBlock) {") ;
m_Writer.OutText( " document.getElementsByName('btMenu')[i].classList.remove('list-group-item-dark');") ;
m_Writer.OutText( " document.getElementsByName('btMenu')[i].classList.add('bg-primary');") ;
m_Writer.OutText( " document.getElementsByName('btMenu')[i].classList.add('disabled');") ;
m_Writer.OutText( " document.getElementById('ss_id_' + id).style.color = '#ffffff';") ;
m_Writer.OutText( " document.getElementById('s_col_' + id).style.color = '#ffffff';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementsByName('btMenu')[i].classList.remove('bg-primary');") ;
m_Writer.OutText( " document.getElementsByName('btMenu')[i].classList.add('list-group-item-dark');") ;
m_Writer.OutText( " document.getElementsByName('btMenu')[i].classList.remove('disabled');") ;
m_Writer.OutText( " document.getElementById('ss_id_' + id).style.color = '#000000';") ;
m_Writer.OutText( " document.getElementById('s_col_' + id).style.color = '#000000';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " for (var i = 0; i < document.getElementsByName('badgeMenu').length; i++) {") ;
m_Writer.OutText( " if (document.getElementsByName('badgeMenu')[i].id.substr(5, document.getElementsByName('badgeMenu')[i].id.length) != id) {") ;
m_Writer.OutText( " if (toBlock) {") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.remove('bg-dark');") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.add('bg-secondary');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.remove('bg-secondary');") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.add('bg-dark');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " if (toBlock) {") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.remove('bg-dark')") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.add('bg-primary');") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.add('border');") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.add('border-light');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.remove('bg-primary');") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.add('bg-dark');") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.remove('border');") ;
m_Writer.OutText( " document.getElementsByName('badgeMenu')[i].classList.remove('border-light');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " for (var i = 0; i < document.getElementsByName('s_col_ora').length; i++) {") ;
m_Writer.OutText( " if (document.getElementsByName('s_col_ora')[i].id.substr(6, document.getElementsByName('s_col_ora')[i].id.length) != id) {") ;
m_Writer.OutText( " if (toBlock) {") ;
m_Writer.OutText( " document.getElementsByName('s_col_ora')[i].style.color = 'grey';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " document.getElementsByName('s_col_ora')[i].style.color = 'black';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
// 8) funzione onMove
// - obj: effettuare il raycaster e ritornare le superfici intercettate
// - par: nessun parametro
m_Writer.OutText( " function onMove() {") ;
m_Writer.OutText( " if (selectedObject) {") ;
m_Writer.OutText( " if (FirstTouch)") ;
m_Writer.OutText( " {") ;
m_Writer.OutText( " currentSurv = null") ;
m_Writer.OutText( " scene.remove(boxH);") ;
m_Writer.OutText( " boxH = null;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (GLOB_BOX || GLOB_DIST || GLOB_SEL) {") ;
m_Writer.OutText( " const rect = renderer.domElement.getBoundingClientRect();") ;
m_Writer.OutText( " if (!isMobile && !isTablet) {") ;
m_Writer.OutText( " pointer.x = ((event.clientX - rect.left) / (rect.right - rect.left)) * 2 - 1;") ;
m_Writer.OutText( " pointer.y = -((event.clientY - rect.top) / (rect.bottom - rect.top)) * 2 + 1;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " pointer.x = ((event.touches[0].clientX - rect.left) / (rect.right - rect.left)) * 2 - 1;") ;
m_Writer.OutText( " pointer.y = -((event.touches[0].clientY - rect.top) / (rect.bottom - rect.top)) * 2 + 1;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " raycaster = new THREE.Raycaster();") ;
m_Writer.OutText( " raycaster.setFromCamera(pointer, camera); // inizializzo il raycaster") ;
m_Writer.OutText( " raycaster.ray.origin.set(pointer.x, pointer.y, -100 * orbitControls.object.near / (orbitControls.object.near - orbitControls.object.far)).unproject(orbitControls.object);") ;
m_Writer.OutText( " intersects = raycaster.intersectObject(group, true); //calcolo il vettore delle intersezioni") ;
m_Writer.OutText( " var s = 0;") ; // tolgo gli oggetti trasparenti
m_Writer.OutText( " while (s < intersects.length) {") ;
m_Writer.OutText( " if (intersects[s].object.visible == false) {") ;
m_Writer.OutText( " intersects.splice(s, 1);") ;
m_Writer.OutText( " s--;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " s++;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (intersects.length > 0) {") ;
m_Writer.OutText( " const res = intersects.filter(function(res) {") ;
m_Writer.OutText( " return res && res.object;") ;
m_Writer.OutText( " })[0]; ") ;
m_Writer.OutText( " if (res && res.object) {") ;
m_Writer.OutText( " if (res.object.name != 'GrigliaThreeJS' || MarkSel == 'G') {") ;
m_Writer.OutText( " FirstTouch = true;") ;
m_Writer.OutText( " selectedObject = res.object; ") ;
m_Writer.OutText( " currentSurv = selectedObject;") ;
m_Writer.OutText( " if (edgeBorder != null || !FirstSelection) {") ;
m_Writer.OutText( " edges = new THREE.EdgesGeometry(currentSurv.geometry);") ;
m_Writer.OutText( " edgeBorder = new THREE.LineSegments(edges, new THREE.LineBasicMaterial({ color: 0xff0000 }));") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " FirstSelection = true;") ;
m_Writer.OutText( " if (GLOB_BOX) {") ;
m_Writer.OutText( " getGroupByuuid(groupRoot.children[0], res.object.uuid);") ;
m_Writer.OutText( " boxH = new THREE.BoxHelper(SelectedCurrG, 0xff0000);") ;
m_Writer.OutText( " boxH.visible = true;") ;
m_Writer.OutText( " scene.add(boxH);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " if (boxH !== null) {") ;
m_Writer.OutText( " boxH.visible = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }");
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }");
// 9) funzione setLine
// - obj: Disegna una freccia oritantata tra il marker A e B
// - par: i due punti (A e B)
m_Writer.OutText( " function setLine(vectorA, vectorB) {") ;
m_Writer.OutText( " if (LineMarker != null) {") ;
m_Writer.OutText( " scene.remove(LineMarker);") ;
m_Writer.OutText( " scene.remove(cylinder); ") ;
m_Writer.OutText( " scene.remove(CilArrow);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " const dir = new THREE.Vector3(vectorB.x - vectorA.x, vectorB.y - vectorA.y, vectorB.z - vectorA.z).normalize();") ;
m_Writer.OutText( " LineMarker = new THREE.ArrowHelper(dir, vectorA, vectorA.distanceTo(vectorB), 0xff0000, 0.5 * 0.2 * vectorA.distanceTo(vectorB), Math.sqrt(0.2 * 0.2 * vectorA.distanceTo(vectorB)));") ;
m_Writer.OutText( " isLineMarkerinScene = true;") ;
m_Writer.OutText( " scene.add(LineMarker);"); // Arrow helper invece che cilindro + cono
m_Writer.OutText( " Cilgeometry = new THREE.CylinderGeometry(0.2, 0.2, vectorA.distanceTo(vectorB), 100);") ;
m_Writer.OutText( " Cilmaterial = new THREE.MeshPhongMaterial({ color: 0xff0000, emissive : 0xff0000, emissiveIntensity : 1.25 });") ;
m_Writer.OutText( " cylinder = new THREE.Mesh(Cilgeometry, Cilmaterial);") ;
m_Writer.OutText( " cylinder.quaternion.setFromUnitVectors(new THREE.Vector3(0, 1, 0), dir.clone().normalize());") ;
m_Writer.OutText( " cylinder.position.x = vectorA.x + dir.x * 0.5 * vectorA.distanceTo(vectorB);") ;
m_Writer.OutText( " cylinder.position.y = vectorA.y + dir.y * 0.5 * vectorA.distanceTo(vectorB);") ;
m_Writer.OutText( " cylinder.position.z = vectorA.z + dir.z * 0.5 * vectorA.distanceTo(vectorB);") ;
m_Writer.OutText( " CilArrow = new THREE.Mesh(new THREE.CylinderGeometry(0.2, 1., 0.5 * 0.2 * vectorA.distanceTo(vectorB), 100), Cilmaterial);") ;
m_Writer.OutText( " CilArrow.quaternion.setFromUnitVectors(new THREE.Vector3(0, 1, 0), dir.clone().normalize());") ;
m_Writer.OutText( " CilArrow.position.x = vectorB.x - 0.5 * (dir.x * 0.5 * (0.5 * 0.2 * vectorA.distanceTo(vectorB) * 2 - markerA.geometry.boundingSphere.radius));") ;
m_Writer.OutText( " CilArrow.position.y = vectorB.y - 0.5 *(dir.y * 0.5 * (0.5 * 0.2 * vectorA.distanceTo(vectorB) * 2 - markerA.geometry.boundingSphere.radius));") ;
m_Writer.OutText( " CilArrow.position.z = vectorB.z - 0.5 *(dir.z * 0.5 * (0.5 * 0.2 * vectorA.distanceTo(vectorB) * 2 - markerA.geometry.boundingSphere.radius));") ;
//m_Writer.OutText( " scene.add(CilArrow);") ;
//m_Writer.OutText( " scene.add(cylinder);") ;
m_Writer.OutText( " }") ;
// 10) funzione onDocumentMouseDown
// - obj: Intercettare le superfici selezionate e settare i Markers
// - par: l'evento del mouse
m_Writer.OutText( " function onDocumentMouseDown() { ") ;
m_Writer.OutText( " if (((event.type == 'mousedown' && event.which == 1) || (event.type == 'touchstart')) && event.target.id == 'CScena') {") ;
m_Writer.OutText( " if (GLOB_DIST) {") ;
m_Writer.OutText( " var vector = new THREE.Vector2();") ;
m_Writer.OutText( " const rect = renderer.domElement.getBoundingClientRect();") ;
m_Writer.OutText( " if (!isMobile && !isTablet) {") ;
m_Writer.OutText( " vector.set(((event.clientX - rect.left) / (rect.right - rect.left)) * 2 - 1, -((event.clientY - rect.top) / (rect.bottom - rect.top)) * 2 + 1);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " vector.set(((event.touches[0].clientX - rect.left) / (rect.right - rect.left)) * 2 - 1, -((event.touches[0].clientY - rect.top) / (rect.bottom - rect.top)) * 2 + 1);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " raycasterDistance = new THREE.Raycaster();") ;
m_Writer.OutText( " raycasterDistance.setFromCamera(vector, orbitControls.object);") ;
m_Writer.OutText( " raycasterDistance.ray.origin.set(vector.x, vector.y, -100 * orbitControls.object.near / (orbitControls.object.near - orbitControls.object.far)).unproject(orbitControls.object);") ;
m_Writer.OutText( " raycasterDistance.params.Line.threshold = 0;") ;
m_Writer.OutText( " const intersectsDistance = raycasterDistance.intersectObject(group, true);") ;
m_Writer.OutText( " var s = 0;") ;
m_Writer.OutText( " while (s < intersectsDistance.length) {") ;
m_Writer.OutText( " if (intersectsDistance[s].object.visible == false) {") ;
m_Writer.OutText( " intersectsDistance.splice(s, 1);") ;
m_Writer.OutText( " s--;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " s++;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " var posM = null;") ;
m_Writer.OutText( " if (MarkSel == 'B') {") ;
m_Writer.OutText( " if (intersectsDistance.length > 0) {") ;
m_Writer.OutText( " if (LineMarker != null) { ") ;
m_Writer.OutText( " scene.remove(LineMarker);") ;
m_Writer.OutText( " scene.remove(cylinder); ") ;
m_Writer.OutText( " scene.remove(CilArrow);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " const res = intersectsDistance.filter(function(res) { return res && res.object; })[0];") ;
m_Writer.OutText( " if (res && res.object) {") ;
m_Writer.OutText( " if (res.object.name != 'GrigliaThreeJS') {") ;
m_Writer.OutText( " const triangle = intersectsDistance[0].face;") ;
m_Writer.OutText( " const surf = intersectsDistance[0];") ;
m_Writer.OutText( " const Va = surf.object.geometry.vertices[triangle.a];") ;
m_Writer.OutText( " const Vb = surf.object.geometry.vertices[triangle.b];") ;
m_Writer.OutText( " const Vc = surf.object.geometry.vertices[triangle.c];") ;
m_Writer.OutText( " var ListOfTriaVertices = [];") ;
m_Writer.OutText( " ListOfTriaVertices.push(Va.x, Va.y, Va.z, Vb.x, Vb.y, Vb.z, Vc.x, Vc.y, Vc.z);") ;
m_Writer.OutText( " posM = getBetterPoint(intersectsDistance[0].point, ListOfTriaVertices);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (MarkSel == 'F') {") ;
m_Writer.OutText( " if (intersectsDistance.length > 0)") ;
m_Writer.OutText( " {") ;
m_Writer.OutText( " if (LineMarker != null) { ") ;
m_Writer.OutText( " scene.remove(LineMarker);") ;
m_Writer.OutText( " scene.remove(cylinder); ") ;
m_Writer.OutText( " scene.remove(CilArrow);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " posM = intersectsDistance[0].point;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (MarkSel == 'G') {") ;
m_Writer.OutText( " if (intersectsDistance.length > 0 && intersectsDistance[0].object.name == 'GrigliaThreeJS')") ;
m_Writer.OutText( " {") ;
m_Writer.OutText( " if (LineMarker != null) { ") ;
m_Writer.OutText( " scene.remove(LineMarker);") ;
m_Writer.OutText( " scene.remove(cylinder); ") ;
m_Writer.OutText( " scene.remove(CilArrow);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " posM = getBetterPoint(intersectsDistance[0].point, ListGridP);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (posM != null) {") ;
m_Writer.OutText( " points[clicks].copy(posM);") ;
m_Writer.OutText( " markers[clicks].position.copy(posM);") ;
m_Writer.OutText( " clicks++;") ;
m_Writer.OutText( " scene.add(markerA);") ;
m_Writer.OutText( " isMarkAinScene = true;") ;
m_Writer.OutText( " if (isMarkBinScene) {") ;
m_Writer.OutText( " scene.remove(markerB);") ;
m_Writer.OutText( " isMarkBinScene = false;") ;
m_Writer.OutText( " distance = 0;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (clicks > 1)") ;
m_Writer.OutText( " {") ;
m_Writer.OutText( " distance = points[0].distanceTo(points[1]);") ;
m_Writer.OutText( " dx = points[0].x - points[1].x;") ;
m_Writer.OutText( " dy = points[0].y - points[1].y;") ;
m_Writer.OutText( " dz = points[0].z - points[1].z;") ;
m_Writer.OutText( " setLine(points[0], points[1]);") ;
m_Writer.OutText( " clicks = 0;") ;
m_Writer.OutText( " scene.add(markerB);") ;
m_Writer.OutText( " isMarkBinScene = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if(GLOB_SEL /*&& !booked*/){") ;
m_Writer.OutText( " if (intersects.length > 0) {") ;
m_Writer.OutText( " if (intersects[0].object.name != 'GrigliaThreeJS') {") ;
m_Writer.OutText( " getGroupByuuid(groupRoot.children[0], intersects[0].object.uuid);") ;
m_Writer.OutText( " for (var i = 0; i < groupRoot.children[0].children.length; i++) {") ;
m_Writer.OutText( " bSel = false;") ;
m_Writer.OutText( " getObj(groupRoot.children[0].children[i], SelectedCurrG.name)") ;
m_Writer.OutText( " if (bSel) {");
m_Writer.OutText( " SelectedObject_id = groupRoot.children[0].children[i].name;") ;
m_Writer.OutText( " entrato = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (!entrato) {") ;
m_Writer.OutText( " SelectedObject_id = SelectedCurrG.name;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " entrato = false;") ;
m_Writer.OutText( " document.getElementById('p_id_' + SelectedObject_id).scrollIntoView(true);") ;
m_Writer.OutText( " if (SelType == 0) {") ;
m_Writer.OutText( " findGroupByNameAndId(groupRoot, SelectedObject_id, 1);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (SelType == 1) {") ;
m_Writer.OutText( " lightbulb('lb_' + SelectedObject_id, 1);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " SelectedObject_id = 'none';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " SelectedObject_id = 'none';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
// 11) funzione getGroupByuuid
// - obj: Utilizzata durante la selezione della superficie con il raycast (il raycast ritorna la mesh, non il gruppo a cui appartiene)
// - par: il gruppo da cui iniziare la ricerca e l'uuid
m_Writer.OutText( " function getGroupByuuid(groupCurr, uuid) {") ;
m_Writer.OutText( " groupCurr.children.forEach(element => {") ;
m_Writer.OutText( " if (element.uuid == uuid) {") ;
m_Writer.OutText( " SelectedCurrG = groupCurr;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (element.children.length > 0) {") ;
m_Writer.OutText( " getGroupByuuid(element, uuid);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " }") ;
// 12) funzione getObj
// - obj: dato un gruppo e un Id, capire se l'id è contenuto nel gruppo e nei suoi sottogruppi
// - par: il gruppo da cui iniziare e l'id
m_Writer.OutText( " function getObj(obj, n) {") ;
m_Writer.OutText( " obj.children.forEach(e => {") ;
m_Writer.OutText( " if (e.name == n) {") ;
m_Writer.OutText( " bSel = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " getObj(e, n);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " }") ;
// 13) funzione getBetterPoint
// - obj: approssimare i punti della griglia e i punti sul perimetro della superficie
// - par: il punto del mouse e la lista dei punti dai quali cercare il più vicino (o punti della griglia o punti di perimetro)
m_Writer.OutText( " function getBetterPoint(mPoint, listOfPoints) {") ;
m_Writer.OutText( " if (listOfPoints.length == 0 || currentSurv == null) {") ;
m_Writer.OutText( " return null;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " var Spoint = new THREE.Vector3(listOfPoints[0], listOfPoints[1], listOfPoints[2]);") ;
m_Writer.OutText( " var PointA = new THREE.Vector3(listOfPoints[0], listOfPoints[1], listOfPoints[2]);") ;
m_Writer.OutText( " var distMin = mPoint.distanceTo(PointA);") ;
m_Writer.OutText( " for (var i = 3; i < listOfPoints.length; i = i + 3) {") ;
m_Writer.OutText( " if (distMin > mPoint.distanceTo(new THREE.Vector3(listOfPoints[i + 0], listOfPoints[i + 1], listOfPoints[i + 2]))) {") ;
m_Writer.OutText( " distMin = mPoint.distanceTo(new THREE.Vector3(listOfPoints[i + 0], listOfPoints[i + 1], listOfPoints[i + 2]));") ;
m_Writer.OutText( " Spoint = new THREE.Vector3(listOfPoints[i + 0], listOfPoints[i + 1], listOfPoints[i + 2]);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " return Spoint;") ;
m_Writer.OutText( " }") ;
// 14) 15) 16) 17) funzioni per gestire i comandi dei Markatori (menu di sinistra, cancellazione della freccia e dei Markers ecc.. ecc..
// - obj: settare la scena in modo corretto per l'utilizzo dei marcatori specifici
// - par: nessun parametro
m_Writer.OutText( " function SetMarkersSketch() {") ;
m_Writer.OutText( " GLOB_DIST = true;") ;
m_Writer.OutText( " controls.MarkSelected = 'Sketch';") ;
m_Writer.OutText( " MarkSel = 'F';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " function SetMarkersPerimeter() {") ;
m_Writer.OutText( " GLOB_DIST = true;") ;
m_Writer.OutText( " controls.MarkSelected = 'Perimeter';") ;
m_Writer.OutText( " MarkSel = 'B';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " function SetMarkerGrid() {") ;
m_Writer.OutText( " GLOB_DIST = true;") ;
m_Writer.OutText( " controls.MarkSelected = 'Grid';") ;
m_Writer.OutText( " MarkSel = 'G';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " function CancelMarkers() {") ;
m_Writer.OutText( " if (isMarkAinScene) { scene.remove(markerA); }") ;
m_Writer.OutText( " if (isMarkAinScene) { scene.remove(markerB); }") ;
m_Writer.OutText( " if (isLineMarkerinScene) { scene.remove(LineMarker); scene.remove(cylinder); scene.remove(CilArrow); }") ;
m_Writer.OutText( " clicks = 0;") ;
m_Writer.OutText( " distance = 0; dx = 0; dy = 0; dz = 0;") ;
m_Writer.OutText( " }") ;
// funzione resize della pagina
m_Writer.OutText( " function onResize() {") ;
m_Writer.OutText( " renderer.setSize(window.screen.availWidth, window.screen.availHeight);") ;
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('mousemove', onMove, false);") ;
m_Writer.OutText( " window.addEventListener('mousedown', onDocumentMouseDown, false);") ;
m_Writer.OutText( " window.addEventListener('keydown', function(e) {");
m_Writer.OutText( " if (e.key == 'Escape') {");
m_Writer.OutText( " CancelMarkers();");
m_Writer.OutText( " controls.bBox = false;");
m_Writer.OutText( " GLOB_DIST = false;");
m_Writer.OutText( " GLOB_SEL = false;");
m_Writer.OutText( " if (timer != null) {");
m_Writer.OutText( " GetColorBack(CurrentSelectedGroup);");
m_Writer.OutText( " GetColorBack(LastGroupSelected);");
m_Writer.OutText( " clearTimeout(timer);");
m_Writer.OutText( " }");
m_Writer.OutText( " }");
m_Writer.OutText( " if (e.target.id != 'listSearch' && e.target.id != 'FlistSearch') {") ;
m_Writer.OutText( " if (e.key == 'b') {") ;
m_Writer.OutText( " if (controls.bBox) {") ;
m_Writer.OutText( " controls.bBox = false;") ;
//m_Writer.OutText( " document.getElementsByTagName('input')[2].checked = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " controls.bBox = true;") ;
//m_Writer.OutText( " document.getElementsByTagName('input')[2].checked = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.key == 'r') {") ;
m_Writer.OutText( " if (controls.motion) {") ;
m_Writer.OutText( " controls.motion = false;") ;
//m_Writer.OutText( " document.getElementsByTagName('input')[1].checked = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " controls.motion = true;") ;
//m_Writer.OutText( " document.getElementsByTagName('input')[1].checked = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.key == 'g') {") ;
m_Writer.OutText( " SetMarkerGrid();") ;
m_Writer.OutText( " GLOB_SEL = false;") ;
m_Writer.OutText( " document.getElementById('CScena').style.cursor = 'crosshair';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.key == 's') {") ;
m_Writer.OutText( " SetMarkersSketch();") ;
m_Writer.OutText( " GLOB_SEL = false;") ;
m_Writer.OutText( " document.getElementById('CScena').style.cursor = 'crosshair';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.key == 'p') {") ;
m_Writer.OutText( " SetMarkersPerimeter();") ;
m_Writer.OutText( " GLOB_SEL = false;") ;
m_Writer.OutText(" document.getElementById('CScena').style.cursor = 'crosshair';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.key == 'm') {") ;
m_Writer.OutText( " GLOB_DIST = false;") ;
m_Writer.OutText(" document.getElementById('CScena').style.cursor = 'auto';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.key == 'x') {") ;
m_Writer.OutText( " controls.reset();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.key == 'i') {") ;
m_Writer.OutText( " GLOB_SEL = true;") ;
m_Writer.OutText( " GLOB_DIST = false;") ;
m_Writer.OutText( " document.getElementById('CScena').style.cursor = 'pointer';") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.key == 'o') {") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.target.id == 'FlistSearch') {") ;
m_Writer.OutText( " if (e.key == 'Enter') {") ;
m_Writer.OutText( " SelezioneXFiera();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
// Controlli per dispositivi Mobile
m_Writer.OutText( " var onlongtouch;") ;
m_Writer.OutText( " var Ttimer;") ;
m_Writer.OutText( " var touchduration = 500;") ;
m_Writer.OutText( " var nFingers = 1;") ;
m_Writer.OutText( " var touchX;") ;
m_Writer.OutText( " var touchY;") ;
m_Writer.OutText( " function touchstart(e) {") ;
m_Writer.OutText( " if (e.touches.length > 1) {") ;
m_Writer.OutText( " nFingers = 2;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " nFingers = 1;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.target.id == 'CScena' && e.touches.length < 2) {") ;
m_Writer.OutText( " touchX = e.touches[0].pageX;") ;
m_Writer.OutText( " touchY = e.touches[0].pageY;") ;
m_Writer.OutText( " if (!Ttimer) {") ;
m_Writer.OutText( " Ttimer = setTimeout(onlongtouch, touchduration, touchX, touchY);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (controls.bBox || GLOB_DIST || GLOB_SEL) {") ;
m_Writer.OutText( " onMove();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " onDocumentMouseDown();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (e.target.id != 'CM_0' && e.target.id != 'CM_1' && e.target.id != 'CM_2' && e.target.id != 'CM_3' && e.target.id != 'CM_4' && e.target.id != 'CM_6') {") ;
m_Writer.OutText( " $('#context-menu').hide();") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " function touchend() {") ;
m_Writer.OutText( " if (Ttimer) {") ;
m_Writer.OutText( " clearTimeout(Ttimer);") ;
m_Writer.OutText( " Ttimer = null;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " onlongtouch = function(touchX, touchY) {") ;
m_Writer.OutText( " Ttimer = null;") ;
m_Writer.OutText( " if (nFingers == 1 && !orbitControls.blockTouchMenu) {") ;
m_Writer.OutText( " document.getElementById('context-menu').style.display = 'block';") ;
m_Writer.OutText( " document.getElementById('context-menu').style.top = touchY + 'px';") ;
m_Writer.OutText( " document.getElementById('context-menu').style.left = touchX + 'px';") ;
m_Writer.OutText( " $('#context-menu').addClass('show');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " };") ;
m_Writer.OutText( " document.addEventListener('DOMContentLoaded', function(event) {") ;
m_Writer.OutText( " window.addEventListener('touchstart', touchstart, false);") ;
m_Writer.OutText( " window.addEventListener('touchend', touchend, false);") ;
m_Writer.OutText( " });") ;
// Menu contenstuale al click del mouse
m_Writer.OutText( " var choice = null;") ;
m_Writer.OutText( " $('#WebGL-output').on('contextmenu', function(e) {") ;
m_Writer.OutText( " var top = e.pageY - 10;") ;
m_Writer.OutText( " var left = e.pageX - 90;") ;
m_Writer.OutText( " $('#context-menu').css({") ;
m_Writer.OutText( " display: 'block',") ;
m_Writer.OutText( " top : top,") ;
m_Writer.OutText( " left : left") ;
m_Writer.OutText( " }).addClass('show');") ;
m_Writer.OutText( " return false;") ;
m_Writer.OutText( " }).on('click', function() {") ;
m_Writer.OutText( " $('#context-menu').removeClass('show').hide();") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " $('#context-menu').on('click', function() {") ;
m_Writer.OutText( " if(event.target.id.substr(3, (this).id.length) != 1){") ;
m_Writer.OutText( " $('#context-menu').removeClass('show').hide();") ;
m_Writer.OutText( " choice = event.target.id.substr(3, (this).id.length);") ;
m_Writer.OutText( " switch (choice) {") ;
m_Writer.OutText( " case '16':") ;
m_Writer.OutText( " GLOB_SEL = true;") ;
m_Writer.OutText( " SelType = 0;") ;
m_Writer.OutText( " CancelMarkers();") ;
m_Writer.OutText( " GLOB_DIST = false;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '17':") ;
m_Writer.OutText( " GLOB_SEL = true;") ;
m_Writer.OutText( " SelType = 1;") ;
m_Writer.OutText( " CancelMarkers();") ;
m_Writer.OutText( " GLOB_DIST = false; ") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '18':") ;
m_Writer.OutText( " updateVisibility(groupRoot.children[0], 'on');") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '2':") ;
m_Writer.OutText( " SetMarkersSketch();") ;
m_Writer.OutText( " GLOB_SEL = false;") ;
m_Writer.OutText( " GLOB_DIST = true;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '3':");
m_Writer.OutText( " SetMarkersPerimeter();") ;
m_Writer.OutText( " GLOB_SEL = false;") ;
m_Writer.OutText( " GLOB_DIST = true;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '4':") ;
m_Writer.OutText( " SetMarkerGrid();") ;
m_Writer.OutText( " GLOB_SEL = false;") ;
m_Writer.OutText( " GLOB_DIST = true;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '6':") ;
m_Writer.OutText( " CancelMarkers();") ;
m_Writer.OutText( " GLOB_SEL = false;") ;
m_Writer.OutText( " GLOB_DIST = false;") ;
m_Writer.OutText( " controls.bBox = false;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '8':") ;
m_Writer.OutText( " controls.bBox = true;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '9':") ;
m_Writer.OutText( " controls.bBox = false;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '12':") ;
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '13':") ;
m_Writer.OutText( " controls.reset();") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '14':") ;
m_Writer.OutText( " controls.motion = true;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " case '15':") ;
m_Writer.OutText( " controls.motion = false;") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " });") ;
// 18) funzione lightbulb
// - obj: individuare il gruppo a cui applicare la trasparenza
// - par: l'id del gruppo (name per THREEJS), modalità (0 -> se clicco sulla lampadina, 1 -> se clicco dal menu laterale sinistro)
m_Writer.OutText( " function lightbulb(id, type) {") ;
m_Writer.OutText( " var lampadina = document.getElementById(id);") ;
m_Writer.OutText( " if (type == 0) {") ;
m_Writer.OutText( " var stato = ($('#' + id).attr('name')).substr(3, $('#' + id).attr('name').length);") ;
m_Writer.OutText( " changeLBstate(id, stato);") ;
m_Writer.OutText( " findGroupByNameAndId(groupRoot, id.substr(3, id.length), 3);") ;
m_Writer.OutText( " if (stato == 'on') {") ;
m_Writer.OutText( " updateVisibility(CurrentSelectedGroup, 'off');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " updateVisibility(CurrentSelectedGroup, 'on');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else if (type == 1) {") ;
m_Writer.OutText( " for (var i = 0; i < groupRoot.children[0].children.length; i++) {") ;
m_Writer.OutText( " if (groupRoot.children[0].children[i].name == id.substr(3, id.length)) {") ;
m_Writer.OutText( " updateVisibility(groupRoot.children[0].children[i], 'on');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " updateVisibility(groupRoot.children[0].children[i], 'off');") ;
m_Writer.OutText( " changeLBstate('lb_' + groupRoot.children[0].children[i].name, 'on');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
// 19) funzione changeLBstate
// - obj: cambiare lo stato delle lampadine del menu di sinistra (on - off)
// - par: l'id del gruppo (name per THREEJS) e lo stato da settare (on - off)
m_Writer.OutText( " function changeLBstate(id, state) {") ;
m_Writer.OutText( " if (state == 'on') {") ;
m_Writer.OutText( " $('#' + id).attr('name', 'lb_off');") ;
m_Writer.OutText( " $('#' + id).css('color', 'grey');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " $('#' + id).attr('name', 'lb_on');") ;
m_Writer.OutText( " $('#' + id).css('color', '#f0ad4e');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
// 20) funzione updateVisibility
// - obj: cambiare lo stato di visibilità dei gruppi e sottogruppi
// - par: il gruppo da cui partire e lo stato da settare
m_Writer.OutText( " function updateVisibility(currGroup, stato) {") ;
m_Writer.OutText( " currGroup.children.forEach(element => {") ;
m_Writer.OutText( " if (stato == 'on') {") ;
m_Writer.OutText( " element.visible = true;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " element.visible = false;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (element.type == 'Group') {") ;
m_Writer.OutText( " if (stato == 'on') {") ;
m_Writer.OutText( " changeLBstate('lb_' + element.name, 'off');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " else {") ;
m_Writer.OutText( " changeLBstate('lb_' + element.name, 'on');") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " updateVisibility(element, stato);") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " }") ;
// 21) funzione SelezioneXFiera
// - obj: selezionare (t infito a meno di altre selezioni) un elemento inserendo il suo NOME (univoco per fiera) nella textbox
// - par: nessuno
m_Writer.OutText( " function SelezioneXFiera() {") ;
m_Writer.OutText( " var nome = ' ' + document.getElementById('FlistSearch').value;") ;
m_Writer.OutText( " document.getElementById('FlistSearch').value = '';");
m_Writer.OutText( " var SpanTags = document.getElementsByName('s_nb');") ;
m_Writer.OutText( " var found = -1;") ;
m_Writer.OutText( " for (var i = 0; i < SpanTags.length; i++) {") ;
m_Writer.OutText( " if (SpanTags[i].textContent.toLowerCase() == nome.toLowerCase()) {") ;
m_Writer.OutText( " found = SpanTags[i];") ;
m_Writer.OutText( " break;") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " if (found != -1) {") ;
m_Writer.OutText( " findGroupByNameAndId(groupRoot, found.id.substring(6, found.id.lenght), 4);") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " }") ;
m_Writer.OutText( " $('#strisciaFinale').mousedown(function(e) {") ;
m_Writer.OutText( " e.preventDefault();") ;
m_Writer.OutText( " return true;") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " $('.Contcube').mousedown(function(e) {") ;
m_Writer.OutText( " e.preventDefault();") ;
m_Writer.OutText( " return true;") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " $('.controlMenu').mousedown(function(e) {") ;
m_Writer.OutText( " e.preventDefault();") ;
m_Writer.OutText( " return true;") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " $('.ContLogo').mousedown(function(e) {") ;
m_Writer.OutText( " e.preventDefault();") ;
m_Writer.OutText( " return true;") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " $('#btn_Menu').mousedown(function(e) {") ;
m_Writer.OutText( " e.preventDefault();") ;
m_Writer.OutText( " return true;") ;
m_Writer.OutText( " });") ;
//m_Writer.OutText( " $('#MenuReal').mousedown(function(e) {") ;
//m_Writer.OutText( " e.preventDefault();") ;
//m_Writer.OutText( " return true;") ;
//m_Writer.OutText( " });") ;
m_Writer.OutText(" </script>") ;
// script per pulsante del menu laterale
m_Writer.OutText( " <script type = 'text/javascript'>") ;
m_Writer.OutText( " $('.btn').click(function() {") ;
m_Writer.OutText( " $(this).toggleClass('click');") ;
m_Writer.OutText( " $('.sidebar').toggleClass('show');") ;
m_Writer.OutText( " });") ;
m_Writer.OutText( " </script>") ;
m_Writer.OutText( "") ;
// codice html per la creazione del menu laterale
m_Writer.OutText( " <nav class = 'sidebar' id = 'MenuReal' style = 'width: 350px; background-color: rgba(27,27,27,0.70);'>") ;
m_Writer.OutText( " <div class = 'container mt-3 border-0'>") ;
m_Writer.OutText( " <div class = 'row'>") ;
m_Writer.OutText( " <div class = 'col-10'>") ;
m_Writer.OutText( " <h4 class = 'text-white'>EGT Group Navigator</h4>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'col-2 justify-content-right'>") ;
m_Writer.OutText( " <button class = 'float-end mx-1 bt_nb_close' style = 'background - color:rgba(27, 27, 27, 0.7); width:2em; height:2em'>") ;
m_Writer.OutText( " <i class = 'fa-solid fa-xmark small m-0 p-0' style = 'color:white;'></i>") ;
m_Writer.OutText( " </button>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'container mt-3 border-0'>") ;
m_Writer.OutText( " <div class = 'input-group mb-1 p-0 m-0'>") ;
m_Writer.OutText( " <span class = 'input-group-prepend'>") ;
m_Writer.OutText( " <div class = 'input-group-text bg-white border-0 rounded-0' style = 'height:100%;'><i class = 'fa fa-search small' style = 'color:grey;'></i></div>") ;
m_Writer.OutText( " </span>") ;
m_Writer.OutText( " <input type = 'text' class = 'form-control border-0' placeholder = 'Search an element' id = 'FlistSearch'>") ;
m_Writer.OutText( " <span class = 'input-group-btn'>") ;
m_Writer.OutText( " <button class = 'btn-primary border-bottom-0' type = 'button' id = 'Fbtn_canc'><i class = 'fa-regular fa-circle-check m-0 p-0'></i></button>") ;
m_Writer.OutText( " </span>") ;
m_Writer.OutText( " </input>") ;
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <div class = 'input-group mb-1 p-0 m-0'>") ;
m_Writer.OutText( " <span class = 'input-group-prepend'>") ;
m_Writer.OutText( " <div class = 'input-group-text bg-white border-0 rounded-0' style = 'height:100%;'><i class = 'fa fa-search small' style = 'color:grey;'></i></div>");
m_Writer.OutText( " </span>");
m_Writer.OutText( " <input type = 'text' class = 'form-control border-0' placeholder = 'Skim elements' id = 'listSearch'>") ;
m_Writer.OutText( " <span class = 'input-group-btn'>") ;
m_Writer.OutText( " <button class = 'btn-danger border-bottom-0' type = 'button' id = 'btn_canc'><i class = 'fa-solid fa-eraser m-0 p-0'></i></button>") ;
m_Writer.OutText( " </span>") ;
m_Writer.OutText( " </input>");
m_Writer.OutText( " </div>") ;
m_Writer.OutText( " <ol id='contMenu' class='list-group-item border-0 py-2 my-2 px-2 rounded' style = 'background-color: white;'>") ;
m_Writer.OutText( " " + m_sCodMenu) ;
m_Writer.OutText( " </div>");
m_Writer.OutText( " </nav>") ;
// codice html per la creazione del menu contestuale al click del mouse
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-menu-sm' id = 'context-menu'>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_10'> Camera &raquo </a>") ;
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_11'> Rotation &raquo </a>") ;
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_14'> On </a> </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_15'> Off </a> </li>") ;
m_Writer.OutText( " </ul>") ;
m_Writer.OutText( " </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_12'> Origin </a> </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_13'> Reset </a> </li>") ;
m_Writer.OutText( " </ul>") ;
m_Writer.OutText( " </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_1'> Measure &raquo </a>") ;
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_2'> Sketch </a> </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_3'> Perimeter </a> </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_4'> Grid </a> </li>") ;
m_Writer.OutText( " </ul>") ;
m_Writer.OutText( " </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_0'> Select </a>") ;
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_16'> Enlight </a></li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_17'> Show Selected item </a></li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_18'> Show All </a></li>") ;
m_Writer.OutText( " </ul>") ;
m_Writer.OutText( " </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_7'> Box &raquo </a>") ;
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_8'> On </a> </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_9'> Off </a> </li>") ;
m_Writer.OutText( " </ul>") ;
m_Writer.OutText( " </li>") ;
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_6' style = 'font-weight: bold'> Cancel </a> </li>") ;
m_Writer.OutText( " </ul>") ;
m_Writer.OutText( " </body>") ;
m_Writer.OutText( "</html>") ;
return true ;
}
//----------------------------------------------------------------------------
bool
GetColor( const Color& Ccol, string& sHexCol)
{
// ottengo i codici R,G e B dei materiali
int iRedColor = Ccol.GetIntRed() ;
int iGreenColor = Ccol.GetIntGreen() ;
int iBlueColor = Ccol.GetIntBlue() ;
char chexColor[9] ;
// imposto il colore di Default o ricavo il corrispondente codice in esadecimale
std::snprintf( chexColor, sizeof chexColor, "0x%02x%02x%02x", iRedColor, iGreenColor, iBlueColor) ;
sHexCol = chexColor ;
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportObject( const IGdbIterator& iIter, IGeomDB* pGDB, const int nGroupCount)
{
// recupero il livello dell'oggetto
int nLev = GDB_LV_USER;
iIter.GetCalcLevel(nLev);
// recupero il modo dell'oggetto
int nMode = GDB_MD_STD;
iIter.GetCalcMode(nMode);
// recupero lo stato dell'oggetto
int nStat = GDB_ST_ON;
iIter.GetCalcStatus(nStat);
//if (TestFilter(nLev, nMode, nStat)) {
switch (iIter.GetGdbType()) {
case GDB_TY_GEO:
{
// recupero l'oggetto geometrico
const IGeoObj* pGeoObj = iIter.GetGeoObj();
if (pGeoObj == nullptr)
return true;
// recupero il riferimento globale dell'oggetto
Frame3d frFrame;
if (!iIter.GetGlobFrame(frFrame))
return false;
// se il filtro lo abilita
if (TestFilter(nLev, nMode, nStat))
{
// recupero eventuale nome
string sName;
if (!iIter.GetName(sName))
sName = ToString(iIter.GetId());
// colore oggetto
//if (sName != "Box" && sName != "box")
//{
Color cCol;
int nIndex;
bool bColorSpot = false;
iIter.GetMaterial(nIndex);
if (nIndex == GDB_MT_COLOR)
iIter.GetMaterial(cCol);
else
{
PtrOwner<IGdbIterator> iIterNew(CreateGdbIterator(pGDB));
int nParendID = iIter.GetParentId();
int nMaterialID;
while (!bColorSpot)
{
iIterNew->GoTo(nParendID);
if (iIterNew->GetMaterial(nMaterialID) && nMaterialID == GDB_MT_COLOR)
{
iIterNew->GetMaterial(cCol);
bColorSpot = true;
}
nParendID = iIterNew->GetParentId();
}
}
// emetto l'oggetto
switch ( pGeoObj->GetType()) {
case GEO_VECT3D: // vettore
if ( ! ExportVector3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case GEO_PNT3D: // punto
if ( ! ExportPoint3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case GEO_FRAME3D: // frame 3D
if ( ! ExportFrame3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case CRV_LINE: // linee rette
if ( ! ExportLine3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case CRV_ARC: // archi
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case CRV_COMPO: // curve composite
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case CRV_BEZIER: // curve di Bezier
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case SRF_TRIMESH: // superfici trimesh
if ( ! ExportSTM( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case SRF_FLATRGN: // flat region
if ( ! ExportSFR( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case SRF_BEZIER: // superfici di Bezier
if ( ! ExportSBezier( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case EXT_TEXT: // testi
if ( ! ExportText( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
case EXT_DIMENSION: // dimensione oggetti
if ( ! ExportDimension( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
return false ;
break ;
default:
break ;
}
//}
}
}
return true ;
case GDB_TY_GROUP:
// esploro il gruppo
return ScanGroup( iIter, pGDB, nGroupCount);
default:
return false ;
}
//}
return true;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportVector3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
{
// prelevo il vettore (vettore stesso e punto di applicazione) e il suo colore
const IGeoVector3d* pVEC = GetGeoVector3d( pGeoObj) ;
if ( pVEC == nullptr)
return false ;
Vector3d vVec = pVEC->GetVector() ;
Point3d ptVec = pVEC->GetBase() ;
string sHexCol ;
GetColor( Ccol, sHexCol) ;
// porto il vettore in coordinate ThreeJS
vVec.ToGlob( frFrame) ;
ptVec.LocToLoc( frFrame, m_frTHREEJSFrame) ;
// scrivo il vettore
m_Writer.OutText( " var vettore" + sName + " = new THREE.Vector3(" + ToString(vVec.y) + ", " + ToString(vVec.z) + ", " + ToString(vVec.x) + ")") ;
m_Writer.OutText( " vettore" + sName + ".normalize();") ;
m_Writer.OutText( " var origin = new THREE.Vector3(" + ToString(ptVec.x) + ", " + ToString(ptVec.y) + ", " + ToString(ptVec.z) + ")") ;
m_Writer.OutText( " var length = " + ToString(vVec.Len()) + ";") ;
m_Writer.OutText( " var hex = " + sHexCol +";") ;
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(vettore" + sName + ", origin, length, hex);") ;
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; //salvataggio colore per selezione
m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ;
// aggiungo il vettore al suo gruppo di appartenenza
if ( nGroupCount != -1)
m_Writer.OutText( " group" + ToString(nGroupCount) + ".children.push(arrowHelper" + sName + ")") ;
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportLine3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
{
// prelevo la Linea retta (punto iniziale e punto finale) e il suo colore
const ICurveLine* pLINE = GetCurveLine( pGeoObj) ;
if ( pLINE == nullptr)
return false ;
Point3d pStartP = pLINE->GetStart() ;
Point3d pEndP = pLINE->GetEnd() ;
// porto i punti in coordinate ThreeJS
pStartP.LocToLoc(frFrame, m_frTHREEJSFrame) ;
pEndP.LocToLoc( frFrame, m_frTHREEJSFrame) ;
string sHexCol ;
GetColor( Ccol, sHexCol) ;
// scrivo la linea
m_Writer.OutText( " const line_material" + sName + " = new THREE.LineBasicMaterial({ color: " + sHexCol + " });") ;
m_Writer.OutText( " line_material" + sName + ".oldColor = new THREE.Color(" + sHexCol + ")") ;
m_Writer.OutText( " var line_geometry" + sName + " = new THREE.Geometry();") ;
m_Writer.OutText( " line_geometry" + sName +".vertices.push(") ;
m_Writer.OutText( " new THREE.Vector3(" + ToString(pStartP.x) + "," + ToString(pStartP.y) + "," + ToString(pStartP.z) + "),") ;
m_Writer.OutText( " new THREE.Vector3(" + ToString(pEndP.x) + "," + ToString(pEndP.y) + "," + ToString(pEndP.z) + "));") ;
m_Writer.OutText( " var line" + sName + " = new THREE.Line(line_geometry" + sName +",line_material" + sName + ");") ;
m_Writer.OutText( " list_of_objects.push(line" + sName + ");") ;
// aggiungo la linea al suo gruppo di appartenenza
if ( nGroupCount != -1)
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(line" + sName + ")") ;
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportPoint3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
{
// prelevo il punto e il suo colore
const IGeoPoint3d* pPoint = GetGeoPoint3d( pGeoObj) ;
if ( pPoint == nullptr)
return false ;
Point3d ptPoint = pPoint->GetPoint() ;
// porto il punto in coordinate ThreeJS
ptPoint.LocToLoc(frFrame, m_frTHREEJSFrame) ;
string sHexCol ;
GetColor( Ccol, sHexCol) ;
// scrivo il punto
m_Writer.OutText( " var dotGeometry" + sName + " = new THREE.Geometry();") ;
m_Writer.OutText( " dotGeometry" + sName + ".vertices.push(new THREE.Vector3( " + ToString(ptPoint.x) + ", " + ToString(ptPoint.y) + ", " + ToString(ptPoint.z) + "));") ;
m_Writer.OutText( " var dotMaterial" + sName +" = new THREE.PointsMaterial( { size: 5, sizeAttenuation: false, color: " + sHexCol +" } );") ;
m_Writer.OutText( " dotMaterial" + sName + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
m_Writer.OutText( " var dot" + sName + " = new THREE.Points( dotGeometry" + sName +", dotMaterial" + sName +" );") ;
m_Writer.OutText( " list_of_objects.push(dot" + sName + ");") ;
// aggiungo il punto al suo gruppo di appartenenza
if (nGroupCount != -1)
m_Writer.OutText(" group" + ToString(nGroupCount) + ".children.push(dot" + sName + ")") ;
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportFrame3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
{
// prelevo il frame (punto di applicazione e 3 versori) e i suoi colori
const IGeoFrame3d* pFrame = GetGeoFrame3d( pGeoObj);
if ( pFrame == nullptr)
return false ;
Frame3d frCurrentFrame = pFrame->GetFrame();
// porto il punto in coordinate ThreeJS
frCurrentFrame.ToGlob( frFrame) ;
string sHexCol;
GetColor( Ccol, sHexCol);
Point3d ptOrig = frCurrentFrame.Orig() ;
ptOrig.LocToLoc(frFrame, m_frTHREEJSFrame);
Vector3d vx = frCurrentFrame.VersZ() ;
Vector3d vy = frCurrentFrame.VersX() ;
Vector3d vz = frCurrentFrame.VersY() ;
// scrivo i 3 vettori
// x
m_Writer.OutText( " var xdir" + sName + " = new THREE.Vector3(" + ToString(vx.x) + ", " + ToString(vx.y) + ", " + ToString(vx.z) + ");") ;
m_Writer.OutText( " xdir" + sName + ".normalize()") ;
m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString(ptOrig.x) + ", " + ToString(ptOrig.y) + ", " + ToString(ptOrig.z)+ ");") ;
m_Writer.OutText( " var length = 25;") ;
m_Writer.OutText( " var hex = 0xff0000;") ;
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(xdir" + sName + ", origin" + sName + ", length, hex);") ;
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ;
m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ;
// aggiungo il vettore al suo gruppo di appartenenza
if (nGroupCount != -1)
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")");
// y
m_Writer.OutText( " var ydir" + sName + " = new THREE.Vector3(" + ToString( vy.x) + ", " + ToString( vy.y) + ", " + ToString( vy.z) + ");") ;
m_Writer.OutText( " ydir" + sName + ".normalize()") ;
m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z) + ");") ;
m_Writer.OutText( " var length = 25;") ;
m_Writer.OutText( " var hex = 0x00ff00;") ;
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(ydir" + sName + ", origin" + sName + ", length, hex);") ;
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);");
m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ;
// aggiungo il vettore al suo gruppo di appartenenza
if (nGroupCount != -1)
m_Writer.OutText(" group" + ToString(nGroupCount) + ".children.push(arrowHelper" + sName + ")");
// z
m_Writer.OutText( " var zdir" + sName + " = new THREE.Vector3(" + ToString( vz.x) + ", " + ToString( vz.y) + ", " + ToString( vz.z) + ");") ;
m_Writer.OutText( " zdir" + sName + ".normalize()") ;
m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z) + ");") ;
m_Writer.OutText( " var length = 25;") ;
m_Writer.OutText( " var hex = 0x0000ff;") ;
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(zdir" + sName + ", origin" + sName + ", length, hex);") ;
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);");
m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ;
// aggiungo il vettore al suo gruppo di appartenenza
if (nGroupCount != -1)
m_Writer.OutText(" group" + ToString(nGroupCount) + ".children.push(arrowHelper" + sName + ")");
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportCurveComp3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
{
// prelevo la curva composita e il suo colore
const ICurve* pCurve = GetCurve( pGeoObj) ;
if ( pCurve == nullptr)
return false ;
string sHexCol ;
GetColor( Ccol, sHexCol) ;
// approssimo la curva composita con delle linee
PolyLine pLine;
pCurve->ApproxWithLines( EPS_SMALL, m_ANG_TOL_STD_DEG, ICurve::APL_STD, pLine) ;
// prelevo il primo punto della curva composita (quindi della prima retta)
Point3d ptCurrent ;
pLine.GetFirstPoint( ptCurrent) ;
// porto il punto in coordinate ThreeJS
Point3d ptCurrentThreeJS = ptCurrent ;
ptCurrentThreeJS.LocToLoc( frFrame, m_frTHREEJSFrame) ;
// inizializzo la creazione della linea in javascript
m_Writer.OutText( " const line_material" + sName + " = new THREE.LineBasicMaterial({ color: " + sHexCol +" });") ;
m_Writer.OutText( " line_material" + sName + ".oldColor = new THREE.Color(" + sHexCol + ")") ;
m_Writer.OutText( " var line_geometry" + sName + " = new THREE.Geometry();") ;
m_Writer.OutText( " line_geometry" + sName + ".vertices.push(") ;
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrentThreeJS.x) + "," + ToString( ptCurrentThreeJS.y) + "," + ToString( ptCurrentThreeJS.z) + "),", false) ; // <-------
// scorro tutti i punti ottenuti dalla mia approssimazione e creo delle linee rette
while ( pLine.GetNextPoint( ptCurrent))
{
ptCurrentThreeJS = ptCurrent;
ptCurrentThreeJS.LocToLoc( frFrame, m_frTHREEJSFrame) ;
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrentThreeJS.x) + "," + ToString( ptCurrentThreeJS.y) + "," + ToString( ptCurrentThreeJS.z) + "),", false) ; // <----------
}
m_Writer.OutText( " );", false) ;
m_Writer.OutText( " var Compoline" + sName + " = new THREE.Line(line_geometry" + sName + ",line_material" + sName + ");") ;
m_Writer.OutText( " list_of_objects.push(Compoline" + sName + ");") ;
// aggiungo la curva composita al suo gruppo di appartenenza
if (nGroupCount != -1)
m_Writer.OutText(" group" + ToString(nGroupCount) + ".children.push(Compoline" + sName + ")");
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportSTM( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
{
// verifico oggetto
const ISurfTriMesh* pSTM = GetSurfTriMesh( pGeoObj) ;
if ( pSTM == nullptr)
return false ;
// aumento il contatore generale per evitare nomi uguali su javascript
m_nCont++ ;
// ricavo il colore della faccia (R,G,B,A)
string sHexCol ;
GetColor( Ccol, sHexCol) ;
double dOpacity = Ccol.GetAlpha() ;
// controllo trasparenza e opacità
double dOpacityThreeJs = 1 ;
//m_Writer.OutText(" try {");
if ( dOpacity < 1)
{
// mesh trasparente
// calcolo distanza tra mesh e posizione delle telecamera (per riodinare l'ordine di visualizzazione)
BBox3d b3Localbox ;
pSTM->GetLocalBBox( b3Localbox) ;
b3Localbox.ToLoc( m_frTHREEJSFrame) ;
double dDistance = sqrt( b3Localbox.SqMaxDistFromPoint( m_ptCenter)) ;
sSurfDist sNewSurfDist ;
sNewSurfDist.SurvAlpha = pSTM ;
sNewSurfDist.dDistance = dDistance ;
sNewSurfDist.sName = ToString( m_nCont) ;
m_lTranspSurf.push_back( sNewSurfDist) ;
// --- dOpacityThreeJs = 0.1 * dOpacity * dOpacity + 0.25 * dOpacity + 0.5; // interpolazione quadratica per opacità (opacità ThreeJs diversa da opacità EGTCAM5)
dOpacityThreeJs = 0.7 + 0.2*dOpacity ;
// dOpacityThreeJs = dOpacity;
// creo il materiale
// front side
m_Writer.OutText( " var front_surf_materials" + ToString( m_nCont) + "= new THREE.MeshPhongMaterial({color: " + sHexCol + ", transparent: true , opacity: " + ToString( dOpacityThreeJs) + ", side: THREE.FrontSide});") ;
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".depthTest = true;"); // abilito test profondità
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".blending = THREE.CustomBlending") ; // flag per blending customizzato
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".blendEquation = THREE.AddEquation") ; // aggiungo equazione di blending
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".blendSrc = THREE.SrcAlphaFactor") ; // source blending factor --> glBlendFunc( srcfactor, destfactor)
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".blendDst = THREE.OneMinusSrcAlphaFactor;") ; // destination blending factor --> glBlendFunc( srcfactor, destfactor)
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".wasTransparent = true;") ; // nel caso sia selezionata
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".hadOpacity = " + ToString( dOpacityThreeJs) + ";") ; // nel caso sia selezionata
// back side
m_Writer.OutText( " var back_surf_materials" + ToString(m_nCont) + "= new THREE.MeshPhongMaterial({color: " + sHexCol + ", transparent: true , opacity: " + ToString( dOpacityThreeJs) + ", side: THREE.BackSide});") ;
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".depthTest = true;") ; // abilito test profondità
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".blending = THREE.CustomBlending") ; // flag per blending customizzato
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".blendEquation = THREE.AddEquation") ; // aggiungo equazione di blending
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".blendSrc = THREE.SrcAlphaFactor") ; // source blending factor --> glBlendFunc( srcfactor, destfactor)
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".blendDst = THREE.OneMinusSrcAlphaFactor;") ; // destination blending factor --> glBlendFunc( srcfactor, destfactor)
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".wasTransparent = true;") ; // nel caso sia selezionata
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".hadOpacity = " + ToString( dOpacityThreeJs) + ";") ; // nel caso sia selezionata
}
else
{
// mesh opaca
m_Writer.OutText( " var opaca_surf_materials" + ToString( m_nCont) + "= new THREE.MeshPhongMaterial({color: " + sHexCol + ", transparent: false , opacity: " + ToString( dOpacityThreeJs) + ", side: THREE.DoubleSide});") ;
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".depthTest = true;") ; // abilito test profondità
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".blending = THREE.CustomBlending") ; // flag per blending customizzato
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".blendEquation = THREE.AddEquation") ; // aggiungo equazione di blending
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".blendSrc = THREE.SrcAlphaFactor") ; // source blending factor --> glBlendFunc( srcfactor, destfactor)
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".blendDst = THREE.OneMinusSrcAlphaFactor;") ; // destination blending factor --> glBlendFunc( srcfactor, destfactor)
}
// creo vettore di vertici per i triangoli della mesh
m_Writer.OutText(" var vertices" + ToString( m_nCont) + " = [") ;
int iTotV = pSTM->GetVertexCount() ;
int iTotT = pSTM->GetTriangleCount() ;
Point3d ptCurrent ;
int iPtCurrentTria[3] ;
// scorro tutti i vertici e ne scrivo le coordinate
for ( int i = 0; i < iTotV; i++)
{
pSTM->GetVertex( i, ptCurrent);
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame);
m_Writer.OutText(" new THREE.Vector3(" + ToString( ptCurrent.x) + ", " + ToString( ptCurrent.y) + ", " + ToString( ptCurrent.z) + "),", false) ; // <--------
}
m_Writer.OutText( " ];", false) ;
// creo vettore delle facce dei triangoli
m_Writer.OutText( " var faces" + ToString(m_nCont) + " = [ ") ;
// scorro tutti i triangoli associandogli una faccia della mesh
for ( int i = 0; i < iTotT; i++)
{
pSTM->GetTriangle( i, iPtCurrentTria) ;
m_Writer.OutText( " new THREE.Face3(" + ToString( iPtCurrentTria[0]) + ", " + ToString( iPtCurrentTria[1]) + ", " + ToString( iPtCurrentTria[2]) + "),", false) ; // <--------
}
m_Writer.OutText( " ];") ;
// creo la geometria con i vertici e le facce
m_Writer.OutText( " var geom" + ToString( m_nCont) + " = new THREE.Geometry();") ;
m_Writer.OutText( " geom" + ToString( m_nCont) + ".vertices = vertices" + ToString(m_nCont) + ";") ;
m_Writer.OutText( " geom" + ToString( m_nCont) + ".faces = faces" + ToString(m_nCont) + ";") ;
m_Writer.OutText( " try{") ;
m_Writer.OutText( " geom" + ToString( m_nCont) + ".computeFaceNormals();") ; // per rendering effetto ombre e luce
m_Writer.OutText( " } catch(err){ console.log(err);};") ;
// creo la mesh unendo geometria (vertici e facce) e materiale
if ( dOpacity < 1)
{
// mesh trasparente
// front side -----------------------------
m_Writer.OutText( " var front_surf_mesh" + ToString( m_nCont) + " = new THREE.Mesh(geom" + ToString( m_nCont) + ", front_surf_materials" + ToString( m_nCont) + ");") ;
m_Writer.OutText( " front_surf_mesh" + ToString( m_nCont) + ".castShadow = true;") ;
// aggiungo la superficie al suo gruppo di appartenenza
if ( nGroupCount != -1)
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(front_surf_mesh" + ToString( m_nCont) + ")") ;
// back side -------------------------------
m_Writer.OutText( " var back_surf_mesh" + ToString( m_nCont) + " = new THREE.Mesh(geom" + ToString( m_nCont) + ", back_surf_materials" + ToString(m_nCont) + ");") ;
m_Writer.OutText( " back_surf_mesh" + ToString( m_nCont) + ".castShadow = true;") ;
// aggiungo la superficie al suo gruppo di appartenenza
if( nGroupCount != -1)
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(back_surf_mesh" + ToString( m_nCont) + ")") ;
// non aggiungo la mesh alla lista degli oggetti della scena, prima le riordino nella funzione FinishAmbient()
}
else
{
// mesh opaca
m_Writer.OutText( " var opaca_mesh_" + ToString( m_nCont) + " = new THREE.Mesh(geom" + ToString( m_nCont) + ", opaca_surf_materials" + ToString( m_nCont) + ");") ;
m_Writer.OutText( " opaca_mesh_" + ToString( m_nCont) + ".castShadow = true;") ;
m_Writer.OutText( " list_of_objects.push(opaca_mesh_" + ToString( m_nCont) + ");") ; // aggiungo la mesh alla lista degli oggetti della scena
// aggiungo al superficie al suo gruppo di appartenenza
if ( nGroupCount != -1)
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(opaca_mesh_" + ToString( m_nCont) + ")") ;
}
//m_Writer.OutText(" }");
//m_Writer.OutText(" catch(err){ console.log(err); }");
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportSFR( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int nGroupCount)
{
// verifico oggetto
const ISurfFlatRegion* pSFR = GetSurfFlatRegion( pGeoObj) ;
if ( pSFR == nullptr)
return false ;
// ricavo la trimesh equivalente
const ISurfTriMesh* pStm = pSFR->GetAuxSurf() ;
return ExportSTM(sName, pStm, frFrame, cCol, nGroupCount) ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportSBezier( const std::string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& cCol, const int nGroupCount)
{
// verifico oggetto
const ISurfBezier* sbez = GetSurfBezier( pGeoObj) ;
if ( sbez == nullptr)
return false ;
// ricavo la trimesh equivalente
const ISurfTriMesh* pStm = sbez->GetAuxSurf() ;
return ExportSTM(sName, pStm, frFrame, cCol, nGroupCount) ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportText( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
{
// verifico l'oggetto
const IExtText* pText = GetExtText( pGeoObj) ;
if ( pText == nullptr)
return false ;
// approssimo il testo come un insieme di curve
POLYLINELIST lstPL ;
pText->ApproxWithLines( EPS_SMALL, m_ANG_TOL_STD_DEG, lstPL) ;
Point3d ptCurrent ;
// ricavo il colore della scritta (R,G,B,A)
string sHexCol ;
GetColor(Ccol, sHexCol) ;
// scorro tutte le curve trovate
for ( PolyLine aLine : lstPL)
{
// prelevo il primo punto
aLine.GetFirstPoint( ptCurrent) ;
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
// aumento il contatore generale per evitare nomi uguali su javascript
m_nCont++ ;
m_Writer.OutText( " const text_line_material" + ToString( m_nCont) + " = new THREE.LineBasicMaterial({ color: " + sHexCol + ", linewidth: 1.2 });") ;
m_Writer.OutText( " text_line_material" + ToString( m_nCont) + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
m_Writer.OutText( " var text_line_geometry" + ToString( m_nCont) +" = new THREE.Geometry();") ;
m_Writer.OutText( " text_line_geometry" + ToString( m_nCont) + ".vertices.push(") ;
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),") ;
// scorro tutti i punti e approssimo con delle linee rette
while (aLine.GetNextPoint(ptCurrent))
{
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),", false) ; // <--------
}
m_Writer.OutText( " );") ;
m_Writer.OutText( " var text_Compoline" + ToString( m_nCont) + " = new THREE.Line(text_line_geometry" + ToString( m_nCont) + ",text_line_material" + ToString( m_nCont) + ");") ;
m_Writer.OutText( " text_Compoline" + ToString( m_nCont) + ".translateY(1);") ;
m_Writer.OutText( " list_of_objects.push(text_Compoline" + ToString( m_nCont) + ");") ;
// aggiungo la polyline al suo gruppo di appartenenza
if (nGroupCount != -1)
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(text_Compoline" + ToString( m_nCont) + ")") ;
}
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ExportDimension( const std::string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
{
// verifico l'oggetto
const IExtDimension* pDim = GetExtDimension( pGeoObj);
if ( pDim == nullptr)
return false ;
// approssimo con delle curve
POLYLINELIST lstPL ;
pDim->ApproxWithLines( EPS_SMALL, m_ANG_TOL_STD_DEG, lstPL) ;
Point3d ptCurrent ;
int iDiff = 0 ;
// prelevo il colore
string sHexCol ;
GetColor( Ccol, sHexCol) ;
// per ogni curva di approssimazione scorro i suoi punti e creo delle linee rette
for ( PolyLine aLine : lstPL)
{
aLine.GetFirstPoint( ptCurrent) ;
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
m_Writer.OutText( " const text_line_material" + sName + ToString( iDiff) + " = new THREE.LineBasicMaterial({ color: " + sHexCol + "});") ;
m_Writer.OutText( " text_line_material" + sName + ToString(iDiff) + ".oldColor = new THREE.Color(" + sHexCol + ")") ;
m_Writer.OutText( " var text_line_geometry" + sName + ToString( iDiff) + " = new THREE.Geometry();") ;
m_Writer.OutText( " text_line_geometry" + sName + ToString( iDiff) + ".vertices.push(") ;
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),", false) ; // <--------
while ( aLine.GetNextPoint( ptCurrent))
{
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),", false) ; // <--------
}
m_Writer.OutText( " );") ;
m_Writer.OutText( " var text_Compoline" + sName + ToString(iDiff) + " = new THREE.Line(text_line_geometry" + sName + ToString(iDiff) + ",text_line_material" + sName + ToString(iDiff) + ");") ;
m_Writer.OutText( " list_of_objects.push(text_Compoline" + sName + ToString(iDiff) + ");") ;
iDiff++ ;
// aggiungo la distanza al suo gruppo di appartenenza
if (nGroupCount != -1)
m_Writer.OutText(" group" + ToString( nGroupCount) + ".children.push(text_Compoline" + sName + ToString( iDiff-1) + ")") ;
}
return true ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::ScanGroup( const IGdbIterator& iIter, IGeomDB* pGDB, const int nGroupCount)
{
// creo un iteratore
PtrOwner<IGdbIterator> pIter( CreateGdbIterator( iIter.GetGDB())) ;
if ( IsNull( pIter))
return false ;
// scandisco il gruppo
bool bOk = true ;
pIter->GoTo( iIter.GetId()) ;
//================================================================================================
// recupero il livello dell'oggetto
int nLev = GDB_LV_USER;
iIter.GetCalcLevel(nLev);
// recupero il modo dell'oggetto
int nMode = GDB_MD_STD;
iIter.GetCalcMode(nMode);
// recupero lo stato dell'oggetto
int nStat = GDB_ST_ON;
iIter.GetCalcStatus(nStat);
if (TestFilter(nLev, nMode, nStat)) {
m_nGroupCount++;
m_Writer.OutText(" const group" + ToString(m_nGroupCount) + " = new THREE.Group();");
if (nGroupCount != -1)
m_sCodMenu += "<ol class = 'list-group-item border-0 my-0 py-0 pe-0'>";
//else
// m_WriterM.OutText( " <ol class='list-group-item border-0 bg-light' style='background-color: white;'>") ;
string sName;
pIter->GetName(sName);
/*
for (int i = 0; sName[i] != '\0'; i++) // sostituisco gli spazi con underscore
{
if (sName[i] == ' ')
sName[i] = '_';
}
sName += "_" + ToString(pIter->GetId());
*/
string sId = ToString(pIter->GetId());
m_Writer.OutText(" group" + ToString(m_nGroupCount) + ".name = '" + sId + "'");
// aggiung l'EventListner per il menù laterale sinistro
m_Writer.OutText(" document.getElementById('p_id_" + sId + "').addEventListener('click', function(){ if(!booked) { findGroupByNameAndId(groupRoot, " + sId + ", 1); }});");
m_Writer.OutText(" document.getElementById('lb_" + sId + "').addEventListener('click', function(){ lightbulb('lb_" + sId + "', 0)});") ;
if (!sId.compare("0"))
{
m_sCodMenu += "<div class = 'd-flex flex-row bd-highlight'>";
m_sCodMenu += "<i id = 'lb_0' name = 'lb_on' class = 'fa-solid fa-lightbulb m-0 py-1 visible' style = 'cursor: pointer; color: #f0ad4e'></i>";
m_sCodMenu += "<button class = 'list-group-item list-group-item-action list-group-flush list-group-item-dark mb-0 border-0 ml-1 py-0 mx-1' name='btMenu' id = 'p_id_0'>";
m_sCodMenu += "<span class = 'badge bg-dark float-end my-0' id = 's_id_0' name ='badgeMenu'></span>";
m_sCodMenu += "<span class = 'border-0' name = 's_col_ora' id = 's_col_0'> <i>(0)</i></span>";
m_sCodMenu += "<span id = 'ss_id_0' name = 's_nb'> BASIC MODEL</span>";
m_sCodMenu += "</button>";
m_sCodMenu += "</div>";
}
else
{
m_sCodMenu += "<div class = 'd-flex flex-row bd-highlight'>";
m_sCodMenu += "<i id = 'lb_" + sId + "' name = 'lb_on' class = 'fa-solid fa-lightbulb m-0 py-1 visible' style = 'cursor: pointer; color: #f0ad4e'></i>";
m_sCodMenu += "<button class = 'list-group-item list-group-item-action list-group-flush list-group-item-dark mb-0 border-0 ml-1 py-0 mx-1' name='btMenu' id = 'p_id_" + sId + "'>";
m_sCodMenu += "<span class='badge bg-dark float-end my-0' name ='badgeMenu' id = 's_id_" + sId + "'></span>";
m_sCodMenu += "<span name = 's_col_ora' id = 's_col_" + sId + "'><i>(" + sId + ")</i></span>";
m_sCodMenu += "<span id = 'ss_id_" + sId + "' name = 's_nb'> " + sName + "</span>"; //Inserisco uno spazio !
m_sCodMenu += "</button>";
m_sCodMenu += "</div>";
}
int nCurrentGroup = m_nGroupCount;
for (bool bNext = pIter->GoToFirstInGroup(iIter);
bNext;
bNext = pIter->GoToNext()) {
if (!ExportObject(*pIter, pGDB, nCurrentGroup))
bOk = false;
}
if (nGroupCount != -1) {
m_Writer.OutText(" group" + ToString(nGroupCount) + ".add(group" + ToString(nCurrentGroup) + ")");
}
m_sCodMenu += " </ol>";
}
return bOk ;
}
//----------------------------------------------------------------------------
bool
ExportThreeJS::TestFilter( int nLev, int nMode, int nStat)
{
if ((nLev == GDB_LV_USER && (m_nFilter & EEXFLT_LEVUSER) == 0) ||
( nLev == GDB_LV_SYSTEM && (m_nFilter & EEXFLT_LEVSYSTEM) == 0) ||
( nLev == GDB_LV_TEMP && (m_nFilter & EEXFLT_LEVTEMP) == 0))
return false;
if (( nMode == GDB_MD_STD && (m_nFilter & EEXFLT_MODESTD) == 0) ||
( nMode == GDB_MD_LOCKED && (m_nFilter & EEXFLT_MODELOCKED) == 0) ||
( nMode == GDB_MD_HIDDEN && (m_nFilter & EEXFLT_MODEHIDDEN) == 0))
return false;
if (( nStat == GDB_ST_OFF && (m_nFilter & EEXFLT_STAOFF) == 0) ||
( nStat == GDB_ST_ON && (m_nFilter & EEXFLT_STAON) == 0) ||
( nStat == GDB_ST_SEL && (m_nFilter & EEXFLT_STASEL) == 0))
return false ;
return true ;
}