b6847a3da7
- miglioria al filtro degli oggetti/gruppi negli Export 3MF, Stl, ThreeJS e Dxf - modifiche di stile minori a Export3dm.
3289 lines
230 KiB
C++
3289 lines
230 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalWare 2022-2022
|
|
//----------------------------------------------------------------------------
|
|
// File : ExportThreeJS.cpp Data : 05.07.22 Versione : 2.4j1
|
|
// Contenuto : Implementazione della classe per l'esportazione in formato html (javascript).
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 24.10.22 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "DllMain.h"
|
|
#include "ExportThreeJS.h"
|
|
#include "/EgtDev/Include/EExDllMain.h"
|
|
#include "/EgtDev/Include/EGkGeoConst.h"
|
|
#include "/EgtDev/Include/EGkFrame3d.h"
|
|
#include "/EgtDev/Include/EGkGeomDB.h"
|
|
#include "/EgtDev/Include/EGkGdbIterator.h"
|
|
#include "/EgtDev/Include/EGkGeoVector3d.h"
|
|
#include "/EgtDev/Include/EGkGeoPoint3d.h"
|
|
#include "/EgtDev/Include/EGkGeoFrame3d.h"
|
|
#include "/EgtDev/Include/EGKCurve.h"
|
|
#include "/EgtDev/Include/EGkCurveLine.h"
|
|
#include "/EgtDev/Include/EGkCurveComposite.h"
|
|
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
|
|
#include "/EgtDev/Include/EGkSurfTriMesh.h"
|
|
#include "/EgtDev/Include/EGkSurfBezier.h"
|
|
#include "/EgtDev/Include/EGkExtText.h"
|
|
#include "/EgtDev/Include/EGkExtDimension.h"
|
|
#include "/EgtDev/Include/EGrScene.h"
|
|
#include "/EgtDev/Include/EGnStringUtils.h"
|
|
#include "/EgtDev/Include/EGnFileUtils.h"
|
|
#include "/EgtDev/Include/EgtStringConverter.h"
|
|
#include "/EgtDev/Include/EgtPointerOwner.h"
|
|
#include "/EgtDev/Extern/libzip/Include/zip.h"
|
|
#include "/EgtDev/Extern/libzip/Include/zipconf.h"
|
|
|
|
using namespace std ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
const double ANG_TOL_STD_DEG = 15 ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
string ExportThreeJS::m_sThreeJSLibDir = "C:\\EgtData\\ThreeJSLib" ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetThreeJSLibDir( const string& sThreeJSLibDir)
|
|
{
|
|
ExportThreeJS::m_sThreeJSLibDir = sThreeJSLibDir ;
|
|
return ExistsDirectory( sThreeJSLibDir ) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
IExportThreeJS*
|
|
CreateExportThreeJS( void)
|
|
{
|
|
// verifico la chiave e le opzioni
|
|
if ( ! VerifyKey( KEYOPT_EEX_EXPBASE))
|
|
return nullptr ;
|
|
// creo l'oggetto
|
|
return static_cast< IExportThreeJS*> ( new( nothrow) ExportThreeJS) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::SetOptions( int nFilter)
|
|
{
|
|
m_nFilter = nFilter ;
|
|
CalcGroupFilter() ;
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::CompressAll( const string& sFile)
|
|
{
|
|
string sDir = GetDirectory( sFile) ;
|
|
string sFileName = GetFileName( sFile) ; //.html
|
|
string sFileTitle = GetFileTitleEgt( sFile) ; // no .html
|
|
|
|
// Preparo zip
|
|
int errorp ;
|
|
zip_t* pZipper = zip_open( (( sDir + "\\" + sFileTitle) + ".zip").c_str(), ZIP_CREATE | ZIP_TRUNCATE, &errorp) ;
|
|
if ( pZipper == nullptr) {
|
|
zip_error_t ziperror ;
|
|
zip_error_init_with_code( &ziperror, errorp) ;
|
|
LOG_ERROR( GetEExLogger(), ( "Failed to open output file " + sFileName + " or found a file with the same name: " + zip_error_strerror( &ziperror)).c_str()) ;
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Directory principale dentro lo zip
|
|
if ( zip_dir_add( pZipper, ( sFileTitle).c_str(), ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// File html
|
|
zip_source_t * pSource = zip_source_file( pZipper, ( sFile ).c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\" + sFileName).c_str(), pSource, ZIP_FL_ENC_UTF_8 ) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Lib
|
|
if ( zip_dir_add( pZipper, ( sFileTitle + "\\Lib").c_str(), ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\jquery.js").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\jquery.js" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1 ) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\three.module.js").c_str(), 0, 0) ;
|
|
if ( zip_file_add(pZipper, ( sFileTitle + "\\Lib\\three.module.js").c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Controls
|
|
if ( zip_dir_add( pZipper, ( sFileTitle + "\\Lib\\Controls").c_str(), ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Controls\\OrbitControlsM.js" ).c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Controls\\orbitControlsM.js").c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Controls\\ViewCubeControls.js" ).c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Controls\\ViewCubeControls.js").c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Css
|
|
if ( zip_dir_add( pZipper, ( sFileTitle + "\\Lib\\Css").c_str(), ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\StileScena.css").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Css\\StileScena.css").c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Css -> Bootstrap
|
|
if ( zip_dir_add( pZipper, ( sFileTitle + "\\Lib\\Css\\Bootstrap" ).c_str(), ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\Bootstrap\\bootstrap.min.css" ).c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Css\\Bootstrap\\bootstrap.min.css" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\Bootstrap\\bootstrap-icons.css").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Css\\Bootstrap\\bootstrap-icons.css" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\Bootstrap\\fontawesomeall.css").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Css\\Bootstrap\\fontawesomeall.css" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Css -> fontawesome
|
|
if ( zip_dir_add( pZipper, ( sFileTitle + "\\Lib\\Css\\fontawesome" ).c_str(), ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Css -> fontawesome -> css
|
|
if ( zip_dir_add( pZipper, ( sFileTitle + "\\Lib\\Css\\fontawesome\\css" ).c_str(), ZIP_FL_ENC_UTF_8) == -1 ) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\fontawesome\\css\\all.min.css").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Css\\fontawesome\\css\\all.min.css" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Css -> fontawesome -> webfonts
|
|
if ( zip_dir_add( pZipper, ( sFileTitle + "\\Lib\\Css\\fontawesome\\webfonts" ).c_str(), ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\fontawesome\\webfonts\\fa-brands-400.ttf").c_str(), 0, 0) ;
|
|
if ( zip_file_add(pZipper, ( sFileTitle + "\\Lib\\Css\\fontawesome\\webfonts\\fa-brands-400.ttf)" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\fontawesome\\webfonts\\fa-regular-400.ttf").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Css\\fontawesome\\webfonts\\fa-regular-400.ttf" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\fontawesome\\webfonts\\fa-solid-900.ttf").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Css\\fontawesome\\webfonts\\fa-solid-900.ttf" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Css\\fontawesome\\webfonts\\fa-v4compatibility.ttf").c_str(), 0, 0) ;
|
|
if ( zip_file_add(pZipper, ( sFileTitle + "\\Lib\\Css\\fontawesome\\webfonts\\fa-v4compatibility.ttf" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Immagini
|
|
if ( zip_dir_add(pZipper, ( sFileTitle + "\\Lib\\Immagini" ).c_str(), ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Immagini\\LogoQ.png").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Immagini\\LogoQ.png" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Immagini\\LogoV.png").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Immagini\\LogoV.png" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// File info
|
|
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\info.txt").c_str(), 0, 0) ;
|
|
if ( zip_file_add( pZipper, ( sFileTitle + "\\info.txt" ).c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Salvo il file zip
|
|
if ( zip_close( pZipper) == -1) {
|
|
zip_error_t* ziperror = zip_get_error( pZipper) ;
|
|
LOG_ERROR( GetEExLogger(), ( "Failed to open output file " + sFileName + ": " + zip_error_strerror( ziperror)).c_str()) ;
|
|
EraseFile( sFile) ;
|
|
return false ;
|
|
}
|
|
|
|
// Cancello il file html
|
|
EraseFile( sFile) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::Export( IGeomDB* pGDB, int nId, IEGrScene* pScene, bool bUdm, const string& sFile)
|
|
{
|
|
// 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 ;
|
|
}
|
|
|
|
// determino le unità di misura
|
|
m_bUdm_mm = bUdm ;
|
|
m_sUdm = ( m_bUdm_mm ? "mm" : "in") ;
|
|
|
|
// calcolo 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_ptMin.ToLoc( m_frTHREEJSFrame) ;
|
|
|
|
// creazione parte iniziale della pagina html
|
|
if ( ! HeadAmbient( pScene, pGDB, nId))
|
|
return false ;
|
|
|
|
// esporto l'oggetto e i suoi eventuali figli
|
|
PtrOwner< IGdbIterator> pIter( CreateGdbIterator( pGDB)) ;
|
|
if ( IsNull( pIter))
|
|
return false ;
|
|
pIter->GoTo( nId) ;
|
|
if ( ! ExportObject( *pIter, pGDB, m_nGroupCount))
|
|
return false ;
|
|
|
|
// aggiungo tutto ciò che è nella scena nel nodo radice
|
|
m_Writer.OutText( " groupRoot.add(group0)") ;
|
|
|
|
// creazione parte finale della pagina html
|
|
if ( ! FinishAmbient())
|
|
return false ;
|
|
|
|
// chiudo il file
|
|
if ( ! m_Writer.Close())
|
|
return false ;
|
|
|
|
// comprimo la cartella
|
|
if ( ! CompressAll( sFile))
|
|
return false ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
|
{
|
|
// ================================================================
|
|
// CREAZIONE PARTE INIZIALE DELLA SCENA ===========================
|
|
// ================================================================
|
|
|
|
double dAngVertDeg, dAngOrizzDeg, dDist ; // parametri della telecamera
|
|
double dSnapStep ; // parametri della griglia
|
|
int nExtStep ;
|
|
|
|
// se esiste una scena associata al DB geometrico
|
|
if ( pScene != nullptr) {
|
|
// prelevo i parametri della camera
|
|
pScene->GetOrthoCamParam( &m_dHalfWidth, &m_dHalfHeight, &m_dZNear, &m_dZFar) ;
|
|
m_ptCenter = pScene->GetCenter() ;
|
|
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
|
|
pScene->GetGridParam( dSnapStep, nExtStep) ;
|
|
m_bShowGrid = ! pScene->GetShowGrid() ;
|
|
}
|
|
// altrimenti imposto dei parametri standard
|
|
else {
|
|
m_dHalfWidth = 559.67 ;
|
|
m_dHalfHeight = 337.53 ;
|
|
m_dZNear = -24000 ;
|
|
m_dZFar = 26000 ;
|
|
m_ptCenter = Point3d( 0, 0, 0 ) ;
|
|
m_ptCamera = m_ptCenter + 1000 * FromSpherical( 1, 72.3684, 185.9832 ) ;
|
|
m_dCameraPhi = 72.3684 ;
|
|
m_dCameraTheta = 185.9832 ;
|
|
m_dDistance = 1000 ;
|
|
dSnapStep = 10 ;
|
|
nExtStep = 100 ;
|
|
}
|
|
|
|
string sPath = "" ; // percorso relativo all'interno delle cartelle (modificabile per future implementazioni)
|
|
|
|
// 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 = '" + sPath + "./Lib/Css/Bootstrap/bootstrap.min.css'/>") ;
|
|
m_Writer.OutText( " <link rel = 'stylesheet' href = '" + sPath + "./Lib/Css/Bootstrap/bootstrap-icons.css'/>") ;
|
|
m_Writer.OutText( " <link rel = 'stylesheet' href = '" + sPath + "./Lib/Css/fontawesome/css/all.min.css'/>") ;
|
|
m_Writer.OutText( " <link rel = 'stylesheet' href = '" + sPath + "./Lib/Css/StileScena.css'/>") ;
|
|
m_Writer.OutText( " <script type = 'text/javascript' src = '" + sPath + "./Lib/jquery.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>
|
|
m_Writer.OutText( " <body>") ; // <BODY>
|
|
|
|
// --- Div che contiene il caricamento della pagina
|
|
m_Writer.OutText( " <div id = 'ContProgBar'>") ;
|
|
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>") ;
|
|
|
|
// --- Div che contiene il canvas per la scena
|
|
m_Writer.OutText( " <div id='WebGL-output'></div>") ;
|
|
|
|
// --- bottone laterale sinistro del menu (overlapping)
|
|
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;'>") ;
|
|
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'>Δ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'>Δ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'>Δ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'>Δ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'>Δ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'>Δ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;'>") ;
|
|
|
|
// *** Sezione Vista (Ortografica o Prospettica)
|
|
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>") ;
|
|
|
|
// *** Sezione Camera (Reset, Rotazione Automatica, Centra in origine)
|
|
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-2 small text-white text-bold'>Camera</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 = '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 = 'Center all'>") ;
|
|
m_Writer.OutText( " <i class = 'fa-solid fa-arrows-to-circle'></i>") ;
|
|
m_Writer.OutText( " </button>") ;
|
|
m_Writer.OutText( " </div>") ;
|
|
|
|
// *** Sezione Griglia (disabilita/abilita, cambia dimensioni)
|
|
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-2 small text-white text-bold'>Grid</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 ms-0' id = 'BTMODEGRID' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Show/hide grid'>") ;
|
|
m_Writer.OutText( " <i class = 'fa-solid fa-table-cells'></i>") ;
|
|
m_Writer.OutText( " </button>") ;
|
|
m_Writer.OutText( " <span class = 'text-white col-6 p-0 ms-1' id = 'sSurrSizeGrid' style = 'font-size:0.7em; align-self: flex-end;'></span>") ;
|
|
m_Writer.OutText( " </div>") ;
|
|
m_Writer.OutText( " <div class = 'row mt-1 p-0 justify-content-center input-group m-0'> ") ;
|
|
m_Writer.OutText( " <input type = 'number' id = 'gridSize' class = 'col-8 form-control border-0 ms-3' step = '0.01' style = 'font-size:0.7em'></input>") ;
|
|
m_Writer.OutText( " <span class = 'input-group-btn col-3 m-0 p-0 me-3'> ") ;
|
|
m_Writer.OutText( " <button type = 'button' class = 'btn-success p-0' id = 'BTSETGRID'>") ;
|
|
m_Writer.OutText( " <i class = 'fa-solid fa-arrows-left-right-to-line small'></i>") ;
|
|
m_Writer.OutText( " </button>") ;
|
|
m_Writer.OutText( " </span>") ;
|
|
m_Writer.OutText( " </div>") ;
|
|
|
|
// *** Sezione Unità Di Misura (mm o in)
|
|
m_Writer.OutText( " <div class = 'row div_int justify-content-center m-0 p-0 mt-2 small text-white text-bold'>Units</div>") ;
|
|
m_Writer.OutText( " <div class = 'row m-0 m-0 p-0 justify-content-center'>") ;
|
|
m_Writer.OutText( " <button style = 'font-size: 0.7em;' type = 'button' class = 'col-4 ml-1 p-0 btn_controls' id = 'BTMM' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'End point'>") ;
|
|
m_Writer.OutText( " <b>mm</b>") ;
|
|
m_Writer.OutText( " </button>") ;
|
|
m_Writer.OutText( " <button style = 'font-size: 0.7em;' type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTIN' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Grid point'>") ;
|
|
m_Writer.OutText( " <b>in</b>") ;
|
|
m_Writer.OutText( " </button>") ;
|
|
m_Writer.OutText( " </div>") ;
|
|
|
|
// *** Sezione Misura (punto Finale, Sketch e Griglia)
|
|
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>") ;
|
|
|
|
// *** Sezione Selezione (Seleziona oggetto, Mostra oggetto, Mostra tutto)
|
|
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>") ;
|
|
|
|
// *** Sezione Box per superifici di primo livello dal nodo radice (groupRoot)
|
|
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 mb-2'>") ;
|
|
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 '" + sPath + "./Lib/three.module.js';") ; // modulo THREEJS
|
|
m_Writer.OutText( " import { OrbitControls } from '" + 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/Controls/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
|
|
|
|
// --- Marcatori come punti --> sfrutto l'AttenuationSize per vederli a qualsiasi distanza
|
|
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;") ; // variabile introdotta per fiera Xylexpo (come deve avvenire la selezione)
|
|
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 = 0;") ; // T/F -> 0 Ortografica | 1 prospettica
|
|
m_Writer.OutText( " var face_list = [];") ; // lista contenente le facce del cubetto
|
|
m_Writer.OutText( " var ListPZ = []; var ListPX = [];") ; // lista punti X e Z nella griglia
|
|
m_Writer.OutText( " var GridLen = " + ToString( 10 * dSnapStep) + ";") ; // lunghezza standard della griglia
|
|
m_Writer.OutText( " var GridGroup = null;") ; // gruppo contenente tutti gli elementi geometrici della griglia
|
|
m_Writer.OutText( " var spotLight1 = null;") ; // punto luca dell scena ( e rendering delle ombre )
|
|
m_Writer.OutText( " var plane = null;") ; // piano su cui poggia la griglia, visibile solo dal lato front
|
|
m_Writer.OutText( " var ShowGrid = true;") ; // T/F -> se la griglia è nella scena o no
|
|
m_Writer.OutText( " var BoxSceneCenter;") ; // box globale del groupRoot (tutti gli oggetti della scena)
|
|
m_Writer.OutText( " var aspect = window.innerWidth / window.innerHeight;") ; // aspetRatio per risoluzione e rendering geometrie
|
|
|
|
// 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) (o prospettica)
|
|
m_Writer.OutText( " if(CameraView == 0){") ;
|
|
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar) + ");") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1," + ToString( m_dZFar) + " * 75);") ;
|
|
m_Writer.OutText(" camera.aspect = aspect;") ;
|
|
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.innerWidth, window.innerHeight);") ;
|
|
//m_Writer.OutText( " }") ;
|
|
//m_Writer.OutText( " else {") ;
|
|
//m_Writer.OutText( " renderer.setSize(window.innerHeight, window.innerWidth);") ;
|
|
//m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " renderer.shadowMapEnabled = true;") ;
|
|
m_Writer.OutText( " renderer.sortObjects = false;") ;
|
|
// punto luce
|
|
double dSLResult = 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( " 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( dSLResult) + "*2.5;") ;
|
|
m_Writer.OutText( " spotLight1.castShadow = true;") ;
|
|
m_Writer.OutText( " scene.add(spotLight1);") ;
|
|
|
|
// gruppo figlio della scena contentente il mio nodo radice (groupRoot)
|
|
m_Writer.OutText(" group = new THREE.Group();") ;
|
|
m_Writer.OutText(" scene.add(group);") ;
|
|
|
|
//richiamo della funzione griglia
|
|
m_Writer.OutText( " if( ShowGrid){ setGrid(GridLen)} ;") ;
|
|
m_Writer.OutText( " ShowGrid = " + ToString( m_bShowGrid) + ";");
|
|
m_Writer.OutText( " ManageGrid();") ;
|
|
|
|
// 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); ") ;
|
|
|
|
// controllo delle 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) + ");") ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::FinishAmbient( void)
|
|
{
|
|
/*
|
|
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
|
|
|
|
sort( m_vTranspSurf.begin(), m_vTranspSurf.end(), ([]( const sSurfDist& a, const sSurfDist& b) { return a.dDistance > b.dDistance ; })) ;
|
|
m_Writer.OutText(" ") ;
|
|
|
|
//scorro le superfici trasparenti
|
|
for ( sSurfDist sCurrSurvDist : m_vTranspSurf) {
|
|
// 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 e 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( " group.add(list_of_objects[i]);") ;
|
|
m_Writer.OutText( " };");
|
|
m_Writer.OutText( " list_of_objects = [];") ; // <--- svuotamento della lista di tutte le geometrie <--- guardare groupRoot
|
|
m_Writer.OutText( " BoxSceneCenter = new THREE.Box3().setFromObject(groupRoot);") ; // <--- creazione del box globale di groupRoot
|
|
|
|
// controlli del menu
|
|
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( " if(CameraView == 0){") ;
|
|
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar) + ");") ;
|
|
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( " }else {") ;
|
|
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, 26000 * 75);") ;
|
|
m_Writer.OutText( " camera.aspect = aspect;") ;
|
|
m_Writer.OutText( " if ( ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) >= ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) ) {") ;
|
|
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) * ( -7/4 );") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) * ( -7/4 );") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " camera.position.y = ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5;") ;
|
|
m_Writer.OutText( " camera.position.z = ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5;") ;
|
|
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
|
m_Writer.OutText( " ));") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
|
m_Writer.OutText( " orbitControls = new OrbitControls(camera, renderer.domElement);") ;
|
|
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
|
m_Writer.OutText( " if ( CameraView == 0 ) { ") ;
|
|
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + ");") ;
|
|
m_Writer.OutText( " } else {") ;
|
|
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
|
m_Writer.OutText( " );") ;
|
|
m_Writer.OutText( " }") ;
|
|
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( " findGroupByNameAndId(groupRoot, element, 0);") ;
|
|
m_Writer.OutText( " }") ;
|
|
|
|
// 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(orbitControls.target.x, orbitControls.target.y, orbitControls.target.z));") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " anim1++;") ;
|
|
m_Writer.OutText( " var VectorEnd = new THREE.Vector3(") ;
|
|
m_Writer.OutText( " orbitControls.target.x + Cvers.x * distanceC,") ;
|
|
m_Writer.OutText( " orbitControls.target.y + Cvers.y * distanceC,") ;
|
|
m_Writer.OutText( " orbitControls.target.z + Cvers.z * distanceC,") ;
|
|
m_Writer.OutText( " )") ;
|
|
m_Writer.OutText( " camera.position.lerp(VectorEnd, 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); Crot = new THREE.Vector3(0 * toRad, 0 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 4: //BACK") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 0, -1); Crot = new THREE.Vector3(0 * toRad, 180 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 3: //RIGHT") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(1, 0, 0); Crot = new THREE.Vector3(0 * toRad, -90 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 5: //LEFT") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(-1, 0, 0); Crot = new THREE.Vector3(0 * toRad, -270 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 1: //TOP") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 1, 0); Crot = new THREE.Vector3(90 * toRad, 0 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 6: //BOTTOM") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(0, -1, 0); Crot = new THREE.Vector3(-90 * toRad, 0 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 11: //FRONT-RIGHT") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(2), 0, 1 / Math.sqrt(2)); Crot = new THREE.Vector3(0 * toRad, -45 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 7: //FRONT-TOP") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 1 / Math.sqrt(2), 1 / Math.sqrt(2)); Crot = new THREE.Vector3(45 * toRad, 0 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 14: //FRONT-LEFT") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(2), 0, 1 / Math.sqrt(2)); Crot = new THREE.Vector3(0 * toRad, -315 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 15: //FRONT-BOTTOM") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(0, -1 / Math.sqrt(2), 1 / Math.sqrt(2)); Crot = new THREE.Vector3(-45 * toRad, 0 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 12: //BACK-RIGHT") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(2), 0, -1 / Math.sqrt(2)); Crot = new THREE.Vector3(0 * toRad, -135 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 9: //BACK-TOP") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(0, 1 / Math.sqrt(2), -1 / Math.sqrt(2)); Crot = new THREE.Vector3(45 * toRad, -180 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 13: //BACK-LEFT") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(2), 0, -1 / Math.sqrt(2)); Crot = new THREE.Vector3(0 * toRad, -225 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 17: //BACK-BOTTOM") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(0, -1 / Math.sqrt(2), -1 / Math.sqrt(2)); Crot = new THREE.Vector3(-45 * toRad, -180 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 8: //RIGHT-TOP") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(2), 1 / Math.sqrt(2), 0); Crot = new THREE.Vector3(45 * toRad, -90 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 16: //RIGHT-BOTTOM") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(1 / Math.sqrt(2), -1 / Math.sqrt(2), 0); Crot = new THREE.Vector3(-45 * toRad, -90 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 10: //LEFT-TOP") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(2), 1 / Math.sqrt(2), 0); Crot = new THREE.Vector3(45 * toRad, -270 * toRad, 0 * toRad); break;") ;
|
|
m_Writer.OutText( " case 18: //LEFT-BOTTOM") ;
|
|
m_Writer.OutText( " Cvers = new THREE.Vector3(-1 / Math.sqrt(2), -1 / Math.sqrt(2), 0); Crot = new THREE.Vector3(-45 * toRad, 270 * toRad, 0 * toRad); 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)); Crot = new THREE.Vector3(45 * toRad, -225 * toRad, 0 * toRad); 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)); Crot = new THREE.Vector3(45 * toRad, -135 * toRad, 0 * toRad); 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)); Crot = new THREE.Vector3(45 * toRad, -45 * toRad, 0 * toRad); 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)); Crot = new THREE.Vector3(45 * toRad, -315 * toRad, 0 * toRad); 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)); Crot = new THREE.Vector3(-45 * toRad, -315 * toRad, 0 * toRad); 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)); Crot = new THREE.Vector3(-45 * toRad, -45 * toRad, 0 * toRad); 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)); Crot = new THREE.Vector3(-45 * toRad, -225 * toRad, 0 * toRad); 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)); Crot = new THREE.Vector3(-45 * toRad, -135 * toRad, 0 * toRad); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); viewCube._cube.children[5].children[3].children[1].material.color = new THREE.Color(red);") ;
|
|
m_Writer.OutText( " viewCube._cube.children[0].children[0].material.oldColor = new THREE.Color(red); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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); 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]); face_list.push(viewCube._cube.children[0].children[1]);") ;
|
|
m_Writer.OutText( " face_list.push(viewCube._cube.children[0].children[2]); face_list.push(viewCube._cube.children[0].children[3]);") ;
|
|
m_Writer.OutText( " face_list.push(viewCube._cube.children[0].children[4]); face_list.push(viewCube._cube.children[0].children[5]);") ;
|
|
m_Writer.OutText( " face_list.push(viewCube._cube.children[1].children[0].children[0]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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]); 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( " aspect = window.innerWidth/window.innerHeight;") ;
|
|
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar * 5) + ");") ;
|
|
m_Writer.OutText( " if (( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) >= ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) ) {") ;
|
|
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) * ( -7/4 );") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) * ( -7/4 );") ;
|
|
m_Writer.OutText( " } ") ;
|
|
m_Writer.OutText( " camera.position.y = ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5;") ;
|
|
m_Writer.OutText( " camera.position.z = ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5;") ;
|
|
m_Writer.OutText( " camera.updateProjectionMatrix(); ") ;
|
|
m_Writer.OutText( " orbitControls.update(); ") ;
|
|
m_Writer.OutText( " camera.lookAt( new THREE.Vector3(") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5,") ;
|
|
m_Writer.OutText( " ));") ;
|
|
m_Writer.OutText( " orbitControls = new OrbitControls(camera, renderer.domElement);") ;
|
|
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
|
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
|
m_Writer.OutText( " );") ;
|
|
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; Ctarget = null; anim1 = 0; 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(orbitControls.target.x, orbitControls.target.y, orbitControls.target.z));") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " anim1++;") ;
|
|
m_Writer.OutText( " var VectorEnd = new THREE.Vector3(") ;
|
|
m_Writer.OutText( " orbitControls.target.x + Cvers.x * distanceC,") ;
|
|
m_Writer.OutText( " orbitControls.target.y + Cvers.y * distanceC,") ;
|
|
m_Writer.OutText( " orbitControls.target.z + Cvers.z * distanceC,") ;
|
|
m_Writer.OutText( " )") ;
|
|
m_Writer.OutText( " camera.position.lerp(VectorEnd, 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( " aspect = window.innerWidth/window.innerHeight;") ;
|
|
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, 26000 * 75);") ;
|
|
m_Writer.OutText( " camera.aspect = aspect;") ;
|
|
m_Writer.OutText( " if ( ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) >= ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) ) {") ;
|
|
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) * ( -7/4 );") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) * ( -7/4 );") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " camera.position.y = ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5;") ;
|
|
m_Writer.OutText( " camera.position.z = ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5;") ;
|
|
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
|
m_Writer.OutText( " orbitControls.update();") ;
|
|
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
|
m_Writer.OutText( " ));") ;
|
|
m_Writer.OutText( " orbitControls = new OrbitControls(camera, renderer.domElement);") ;
|
|
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
|
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
|
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
|
m_Writer.OutText( " );") ;
|
|
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; Ctarget = null; anim1 = 0; 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(orbitControls.target.x, orbitControls.target.y, orbitControls.target.z));") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " anim1++;") ;
|
|
m_Writer.OutText( " var VectorEnd = new THREE.Vector3(") ;
|
|
m_Writer.OutText( " orbitControls.target.x + Cvers.x * distanceC,") ;
|
|
m_Writer.OutText( " orbitControls.target.y + Cvers.y * distanceC,") ;
|
|
m_Writer.OutText( " orbitControls.target.z + Cvers.z * distanceC,") ;
|
|
m_Writer.OutText( " )") ;
|
|
m_Writer.OutText( " camera.position.lerp(VectorEnd, t);") ;
|
|
m_Writer.OutText( " orbitControls.update();") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " });") ;
|
|
m_Writer.OutText( " ColoraCubo(viewCube);") ;
|
|
m_Writer.OutText( " });") ;
|
|
|
|
// eventi click sul menu di destra dei controlli
|
|
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() {") ;
|
|
m_Writer.OutText( " BoxSceneCenter.getCenter(orbitControls.target);") ;
|
|
m_Writer.OutText( " camera.position.x = orbitControls.target.x + camera.position.distanceTo(orbitControls.target) * ( -1 ),") ;
|
|
m_Writer.OutText( " camera.position.y = orbitControls.target.y,") ;
|
|
m_Writer.OutText( " camera.position.z = orbitControls.target.z") ;
|
|
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
|
m_Writer.OutText( " orbitControls.update();") ;
|
|
m_Writer.OutText( " })") ;
|
|
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('BTMODEGRID').addEventListener('click', function(){ ") ;
|
|
m_Writer.OutText( " ManageGrid();") ;
|
|
m_Writer.OutText( " });") ;
|
|
m_Writer.OutText( " document.getElementById('BTSETGRID').addEventListener('click', function(){") ;
|
|
m_Writer.OutText( " if (ShowGrid) {") ;
|
|
m_Writer.OutText( " var lenG = parseFloat((document.getElementById('gridSize').value / udmScala).toFixed(2)) ;") ;
|
|
m_Writer.OutText( " if (lenG != '') {") ;
|
|
m_Writer.OutText( " setGrid(lenG);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " });") ;
|
|
m_Writer.OutText( " document.getElementById('BTMM').addEventListener('click', function(){ if(Ismm == 0){document.getElementById('gridSize').value = '';}Ismm = 1;});") ;
|
|
m_Writer.OutText( " document.getElementById('BTIN').addEventListener('click', function(){ if(Ismm == 1){document.getElementById('gridSize').value = '';}Ismm = 0;});") ;
|
|
|
|
m_Writer.OutText( " var index_LSS = [];") ;
|
|
m_Writer.OutText( " var udm = 'mm';") ;
|
|
m_Writer.OutText( " if (!Ismm) { udm = 'in'; }") ;
|
|
|
|
// funzione render per la scena
|
|
m_Writer.OutText( " function renderScene() {") ;
|
|
//m_Writer.OutText( " if ( CameraView == 1 ) { // se prospettica ") ;
|
|
//m_Writer.OutText( " camera.aspect = window.innerWidth / window.innerHeight;") ;
|
|
//m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
|
//m_Writer.OutText( " }") ;
|
|
//m_Writer.OutText( " else { // se ortografica") ;
|
|
//m_Writer.OutText( " aspect = window.innerWidth / window.innerHeight;") ;
|
|
//m_Writer.OutText( " camera.left = -3342.576634 * aspect / 2;") ;
|
|
//m_Writer.OutText( " camera.right = 3342.576634 * aspect / 2;") ;
|
|
//m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
|
//m_Writer.OutText( " }") ;
|
|
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 != '') { // 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 { // no 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.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 (( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5 == orbitControls.target.x && ") ;
|
|
m_Writer.OutText( " (BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5 == orbitControls.target.y && ") ;
|
|
m_Writer.OutText( " (BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5 == orbitControls.target.z ) { ") ;
|
|
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 (Ismm == 0) { udmScala = 1 / (25.4); udm = 'in'; document.getElementById('BTMM').style.color = '#d9534f'; document.getElementById('BTIN').style.color = '#5cb85c'; document.getElementById('CM_25').placeholder = 'Size (in)'; } ") ;
|
|
m_Writer.OutText( " else { udmScala = 1; udm = 'mm'; document.getElementById('BTIN').style.color = '#d9534f'; document.getElementById('BTMM').style.color = '#5cb85c'; document.getElementById('CM_25').placeholder = 'Size (mm)'; }") ;
|
|
m_Writer.OutText( " if (!ShowGrid) {") ;
|
|
m_Writer.OutText( " document.getElementById('BTMODEGRID').style.color = '#d9534f';") ;
|
|
m_Writer.OutText( " document.getElementById('gridSize').value = '';") ;
|
|
m_Writer.OutText( " document.getElementById('gridSize').placeholder = 'disabled';") ;
|
|
m_Writer.OutText( " document.getElementById('sSurrSizeGrid').innerHTML = 'disabled'; ") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else ") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " document.getElementById('BTMODEGRID').style.color = '#5cb85c';") ;
|
|
m_Writer.OutText( " document.getElementById('sSurrSizeGrid').innerHTML = parseFloat((GridLen * udmScala).toFixed(2)) + ' ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('gridSize').placeholder = 'Size (' + udm + ')';") ;
|
|
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 = 'Δx: ' + parseFloat((udmScala * dz).toFixed(2)) + ' ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('sDdy').innerHTML = 'Δy: ' + parseFloat((udmScala * dx).toFixed(2)) + ' ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('sDdz').innerHTML = 'Δ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 = 'Δx: 0 ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('sDdy').innerHTML = 'Δy: 0 ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('sDdz').innerHTML = 'Δ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; var boxDeltaY = 0; 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 = 'Δx: ' + boxDeltaZ + ' ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('sBdy').innerHTML = 'Δy: ' + boxDeltaX + ' ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('sBdz').innerHTML = 'Δ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 = 'Δx: 0 ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('sBdy').innerHTML = 'Δy: 0 ' + udm;") ;
|
|
m_Writer.OutText( " document.getElementById('sBdz').innerHTML = 'Δ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( " }") ;
|
|
// 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';") ;
|
|
// chiamo il render della scena
|
|
m_Writer.OutText( " renderScene();") ;
|
|
m_Writer.OutText( " Updatebadge(groupRoot.children[0], -1);") ; // dal gruppo esportato da EGTCAM5
|
|
m_Writer.OutText( " document.getElementsByTagName('canvas')[0].setAttribute('id', 'CScena');") ;
|
|
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( " }") ; // 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 = Math.abs(" + 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( " 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( " 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( " }") ;
|
|
|
|
// 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], intersects[0].object.uuid)") ;
|
|
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 uuid, capire se l'uuid è contenuto nel gruppo e nei suoi sottogruppi
|
|
// - par: il gruppo da cui iniziare e l'uuid
|
|
m_Writer.OutText( " function getObj(obj, uuid) {") ;
|
|
m_Writer.OutText( " obj.children.forEach(e => {") ;
|
|
m_Writer.OutText( " if (e.uuid == uuid) {") ;
|
|
m_Writer.OutText( " bSel = true;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " getObj(e, uuid);") ;
|
|
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( " }") ;
|
|
|
|
// 18) funzione setGrid
|
|
// - obj: visualizzare la griglia con le misure importate o modificate
|
|
// - par: la lunghezza del quadratino della griglia (20x20)
|
|
m_Writer.OutText( " function setGrid(len) { ") ;
|
|
m_Writer.OutText( " if (GridGroup != null) {") ;
|
|
m_Writer.OutText( " scene.remove(GridGroup);") ;
|
|
m_Writer.OutText( " group.remove(plane);") ;
|
|
m_Writer.OutText( " ListPZ = []; ListPX = []; ListGridP = [];") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " GridLen = len;") ;
|
|
m_Writer.OutText( " GridGroup = new THREE.Group();") ;
|
|
m_Writer.OutText( " ListPZ = []; ListPX = [];") ;
|
|
m_Writer.OutText( " for (var i = -10; i <= 10; i++)") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " var LineMaterial = new THREE.LineBasicMaterial({ color: 0x444444 });") ;
|
|
m_Writer.OutText( " var LineGeometry = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " LineGeometry.vertices.push(") ;
|
|
m_Writer.OutText( " new THREE.Vector3(10 * len, 0, -10 * len + (len) * (i + 10)),") ;
|
|
m_Writer.OutText( " new THREE.Vector3(-10 * len, 0, -10 * len + (len) * (i + 10))") ;
|
|
m_Writer.OutText( " );") ;
|
|
m_Writer.OutText( " var line = new THREE.Line(LineGeometry, LineMaterial);") ;
|
|
m_Writer.OutText( " GridGroup.add(line);") ;
|
|
m_Writer.OutText( " ListPZ.push(new THREE.Vector3(10 * len, 0, -10 * len + (len) * (i + 10)));") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " for (var i = -10; i <= 10; i++)") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " var LineMaterial = new THREE.LineBasicMaterial({ color: 0x444444 });") ;
|
|
m_Writer.OutText( " var LineGeometry = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " LineGeometry.vertices.push(") ;
|
|
m_Writer.OutText( " new THREE.Vector3(10 * len - (len) * (i + 10), 0, -10 * len),") ;
|
|
m_Writer.OutText( " new THREE.Vector3(10 * len - (len) * (i + 10), 0, 10 * len)") ;
|
|
m_Writer.OutText( " );") ;
|
|
m_Writer.OutText( " var line = new THREE.Line(LineGeometry, LineMaterial);") ;
|
|
m_Writer.OutText( " GridGroup.add(line);") ;
|
|
m_Writer.OutText( " ListPX.push(new THREE.Vector3(10 * len - (len) * (i + 10), 0, -10 * len));") ;
|
|
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( " }") ;
|
|
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 = 10 * len;") ;
|
|
m_Writer.OutText( " var hex = 0xff0000;") ;
|
|
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(xdir, origin, length, hex, 0, 0);") ;
|
|
m_Writer.OutText( " GridGroup.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 = 10 * len;") ;
|
|
m_Writer.OutText( " var hex = 0x006600;") ;
|
|
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(ydir, origin, length, hex, 0, 0);") ;
|
|
m_Writer.OutText( " GridGroup.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 = len / 10;") ;
|
|
m_Writer.OutText( " var hex = 0x0000ff;") ;
|
|
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(zdir, origin, length, hex, 0, 0);") ;
|
|
m_Writer.OutText( " GridGroup.add(arrowHelper);") ;
|
|
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( " 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( " GridGroup.add(plane);") ;
|
|
m_Writer.OutText( " spotLight1.target = plane;") ;
|
|
m_Writer.OutText( " scene.add(GridGroup);") ;
|
|
m_Writer.OutText( " group.add(plane);") ;
|
|
m_Writer.OutText( " }") ;
|
|
|
|
// 19) funzione ManageGrid()
|
|
// - obj: visualizzare/bloccare gli elementi del menu se la griglia è attiva o disattiva
|
|
// - par: nessuno
|
|
m_Writer.OutText( " function ManageGrid() { ") ;
|
|
m_Writer.OutText( " if (ShowGrid) {") ;
|
|
m_Writer.OutText( " ShowGrid = false; GridGroup.visible = false; plane.visible = false; document.getElementById('BTGRID').disabled = true;") ;
|
|
m_Writer.OutText( " document.getElementById('gridSize').disabled = true; document.getElementById('BTSETGRID').disabled = true;") ;
|
|
m_Writer.OutText( " document.getElementById('CM_25').disabled = true;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " ShowGrid = true; GridGroup.visible = true; plane.visible = false; document.getElementById('BTGRID').disabled = false;") ;
|
|
m_Writer.OutText( " document.getElementById('gridSize').disabled = false; document.getElementById('BTSETGRID').disabled = false;") ;
|
|
m_Writer.OutText( " document.getElementById('CM_25').disabled = false;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " }") ;
|
|
|
|
// funzione resize della pagina
|
|
m_Writer.OutText( " function onResize() {") ;
|
|
m_Writer.OutText( " if ( CameraView == 1) {") ;
|
|
m_Writer.OutText( " camera.aspect = window.innerWidth / window.innerHeight;") ;
|
|
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
|
m_Writer.OutText( " renderer.setSize(window.innerWidth, window.innerHeight);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " // notify the renderer of the size change") ;
|
|
m_Writer.OutText( " var camFactor = window.innerWidth / window.innerHeight ;") ;
|
|
m_Writer.OutText( " camera.left = -window.innerWidth / camFactor;") ;
|
|
m_Writer.OutText( " camera.right = window.innerWidth / camFactor;") ;
|
|
m_Writer.OutText( " camera.top = window.innerHeight / camFactor;") ;
|
|
m_Writer.OutText( " camera.bottom = -window.innerHeight / camFactor;") ;
|
|
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
|
m_Writer.OutText( " renderer.setSize(window.innerWidth, window.innerHeight);") ;
|
|
m_Writer.OutText( " }") ;
|
|
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( " document.getElementById('CScena').style.cursor = 'auto';");
|
|
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( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " controls.bBox = 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( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " controls.motion = 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( " BoxSceneCenter.getCenter( orbitControls.target );") ;
|
|
m_Writer.OutText( " orbitControls.update();") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " if (e.key == 'Enter') {") ;
|
|
m_Writer.OutText( " if (e.target.id == 'CM_25') {") ;
|
|
m_Writer.OutText( " var lenG = parseFloat((document.getElementById('CM_25').value / udmScala).toFixed(2));") ;
|
|
m_Writer.OutText( " document.getElementById('CM_25').value = '';") ;
|
|
m_Writer.OutText( " document.getElementById('gridSize').value = parseFloat(lenG * udmScala).toFixed(2);") ;
|
|
m_Writer.OutText( " if (lenG != '') {") ;
|
|
m_Writer.OutText( " setGrid(lenG);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " $('#context-menu').removeClass('show').hide();") ;
|
|
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(! ['10','11','19','20','1','7', '23', '24', '25', '26'].includes(event.target.id.substr(3, (this).id.length))){") ;
|
|
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 '21':") ;
|
|
m_Writer.OutText( " ShowGrid = false;") ;
|
|
m_Writer.OutText( " ManageGrid();") ;
|
|
m_Writer.OutText( " break;") ;
|
|
m_Writer.OutText( " case '22':") ;
|
|
m_Writer.OutText( " ShowGrid = true;") ;
|
|
m_Writer.OutText( " ManageGrid();") ;
|
|
m_Writer.OutText( " break;") ;
|
|
m_Writer.OutText( " case '27':" ) ;
|
|
m_Writer.OutText( " Ismm = 1;" ) ;
|
|
m_Writer.OutText( " document.getElementById( 'gridSize' ).value = '';" ) ;
|
|
m_Writer.OutText( " break;" ) ;
|
|
m_Writer.OutText( " case '28':" ) ;
|
|
m_Writer.OutText( " Ismm = 0;" ) ;
|
|
m_Writer.OutText( " document.getElementById( 'gridSize' ).value = '';" ) ;
|
|
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( " });") ;
|
|
|
|
// 20) 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( " }") ;
|
|
|
|
// 21) 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( " }") ;
|
|
|
|
// 22) 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( " }") ;
|
|
|
|
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( " if (e.target.id != 'gridSize') {") ;
|
|
m_Writer.OutText( " e.preventDefault();") ;
|
|
m_Writer.OutText( " }") ;
|
|
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(" </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'>EGW 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 = '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 » </a>") ;
|
|
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_11'> Rotation » </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_19'> Grid » </a> ") ;
|
|
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_20'> Show/hide » </a>") ;
|
|
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_21'> On </a> </li>") ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_22'> Off </a> </li>") ;
|
|
m_Writer.OutText( " </ul>") ;
|
|
m_Writer.OutText( " </li>") ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_23'> Set » </a>") ;
|
|
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>") ;
|
|
m_Writer.OutText( " <a class = 'dropdown-item' id = 'CM_24'>") ;
|
|
m_Writer.OutText( " <input type = 'number' step = '0.01' id = 'CM_25'/>") ;
|
|
m_Writer.OutText( " </a>") ;
|
|
m_Writer.OutText( " </ul>") ;
|
|
m_Writer.OutText( " </li>") ;
|
|
m_Writer.OutText( " </ul>") ;
|
|
m_Writer.OutText( " </li>") ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_26'> Units » </a>" ) ;
|
|
m_Writer.OutText( " <ul class = 'dropdown-menu dropdown-submenu'>" ) ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_27'> mm </a></li>" ) ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_28'> in </a></li>" ) ;
|
|
m_Writer.OutText( " </ul>" ) ;
|
|
m_Writer.OutText( " </li>" ) ;
|
|
m_Writer.OutText( " <li> <a class = 'dropdown-item' id = 'CM_1'> Measure » </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 » </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) ;
|
|
int nType = iIter.GetGdbType() ;
|
|
// se il filtro lo abilita
|
|
if ( TestFilter( nLev, nMode, nStat, nType == GDB_TY_GROUP)) {
|
|
switch ( nType) {
|
|
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 ;
|
|
|
|
// recupero eventuale nome
|
|
string sName ;
|
|
if ( ! iIter.GetName( sName))
|
|
sName = ToString( iIter.GetId()) ;
|
|
// colore oggetto
|
|
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 :
|
|
if ( ! ExportVector3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case GEO_PNT3D :
|
|
if ( ! ExportPoint3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case GEO_FRAME3D :
|
|
if ( ! ExportFrame3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case CRV_LINE :
|
|
if ( ! ExportLine3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case CRV_ARC :
|
|
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case CRV_COMPO :
|
|
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case CRV_BEZIER :
|
|
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case SRF_TRIMESH :
|
|
if ( ! ExportSTM( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case SRF_FLATRGN :
|
|
if ( ! ExportSFR( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case SRF_BEZIER :
|
|
if ( ! ExportSBezier( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case EXT_TEXT :
|
|
if ( ! ExportText( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case EXT_DIMENSION :
|
|
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 vlength" + sName + " = " + ToString( vVec.Len()) + ";") ;
|
|
m_Writer.OutText( " var vhex" + sName + " = " + sHexCol +";") ;
|
|
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(vettore" + sName + ", origin, vlength" + sName + ", vhex" + sName + ");") ;
|
|
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(vhex" + sName + ");") ; //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) ;
|
|
|
|
// porto i vettori in coordinate ThreeJS
|
|
Vector3d vx = frCurrentFrame.VersX() ;
|
|
Vector3d vy = frCurrentFrame.VersY() ;
|
|
Vector3d vz = frCurrentFrame.VersZ() ;
|
|
|
|
vx.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
|
vy.LocToLoc(frFrame, m_frTHREEJSFrame) ;
|
|
vz.LocToLoc(frFrame, m_frTHREEJSFrame) ;
|
|
|
|
double dVecLen = sqrt( vx.x * vx.x + vx.y * vx.y + vx.z * vx.z) ; // riferimento al vettore lungo x (lunghezza vettori)
|
|
|
|
|
|
// 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 xlength" + sName + " = " + ToString( dVecLen) + " * 10;") ;
|
|
m_Writer.OutText( " var xhex" + sName + " = 0xff0000;") ;
|
|
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(xdir" + sName + ", origin" + sName + ", xlength" + sName +", xhex" + sName + ", " + ToString( dVecLen) + " * 2);") ;
|
|
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(xhex" + sName + ");") ;
|
|
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 ylength" + sName + " = " + ToString( dVecLen) + " * 10;") ;
|
|
m_Writer.OutText( " var yhex" + sName + " = 0x00ff00;") ;
|
|
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(ydir" + sName + ", origin" + sName + ", ylength" + sName +", yhex" + sName + ", " + ToString( dVecLen) + " * 2);") ;
|
|
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(yhex" + sName + ");") ;
|
|
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 zlength" + sName + " = " + ToString( dVecLen) + " * 10;") ;
|
|
m_Writer.OutText( " var zhex" + sName + " = 0x0000ff;") ;
|
|
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(zdir" + sName + ", origin" + sName + ", zlength" + sName + ", zhex" + sName + ", " + ToString( dVecLen) + " * 2);") ;
|
|
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(zhex" + sName + ");") ;
|
|
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, 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* pSTMtc = GetSurfTriMesh( pGeoObj) ;
|
|
if ( pSTMtc == nullptr)
|
|
return false ;
|
|
|
|
PtrOwner<ISurfTriMesh> pSTM( pSTMtc->Clone()) ;
|
|
pSTM->DoCompacting() ;
|
|
|
|
// 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 ;
|
|
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_vTranspSurf.push_back( sNewSurfDist) ;
|
|
dOpacityThreeJs = 0.7 + 0.2*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, 15) + ", " + ToString( ptCurrent.y, 15) + ", " + ToString( ptCurrent.z, 15) + "),", 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('computeFaceNormals error in " + ToString( m_nCont) + "'); console.log(err); console.log('---')}") ;
|
|
|
|
// 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) + ")") ;
|
|
}
|
|
|
|
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, 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);") ; // traslazione del testo
|
|
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, 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()) ;
|
|
|
|
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'>" ;
|
|
|
|
string sName ;
|
|
pIter->GetName( sName) ;
|
|
string sId = ToString( pIter->GetId()) ;
|
|
|
|
m_Writer.OutText( " group" + ToString( m_nGroupCount) + ".name = '" + sId + "'") ;
|
|
// aggiungo l'EventListner per il menu 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_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)});") ;
|
|
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, bool bGroup)
|
|
{
|
|
int nFilter = bGroup ? m_nGroupFilter : m_nFilter ;
|
|
if ( ( nLev == GDB_LV_USER && ( nFilter & EEXFLT_LEVUSER) == 0) ||
|
|
( nLev == GDB_LV_SYSTEM && ( nFilter & EEXFLT_LEVSYSTEM) == 0) ||
|
|
( nLev == GDB_LV_TEMP && ( nFilter & EEXFLT_LEVTEMP) == 0))
|
|
return false ;
|
|
if ( ( nMode == GDB_MD_STD && ( nFilter & EEXFLT_MODESTD) == 0) ||
|
|
( nMode == GDB_MD_LOCKED && ( nFilter & EEXFLT_MODELOCKED) == 0) ||
|
|
( nMode == GDB_MD_HIDDEN && ( nFilter & EEXFLT_MODEHIDDEN) == 0))
|
|
return false ;
|
|
if ( ( nStat == GDB_ST_OFF && ( nFilter & EEXFLT_STAOFF) == 0) ||
|
|
( nStat == GDB_ST_ON && ( nFilter & EEXFLT_STAON) == 0) ||
|
|
( nStat == GDB_ST_SEL && ( nFilter & EEXFLT_STASEL) == 0))
|
|
return false ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::CalcGroupFilter( void)
|
|
{
|
|
m_nGroupFilter = 0 ;
|
|
// Status
|
|
if ( ( m_nFilter & EEXFLT_STASEL) != 0)
|
|
m_nGroupFilter += EEXFLT_STASEL + EEXFLT_STAOFF + EEXFLT_STAON ;
|
|
else if ( ( m_nFilter & EEXFLT_STAOFF) != 0)
|
|
m_nGroupFilter += EEXFLT_STAOFF + EEXFLT_STAON ;
|
|
else
|
|
m_nGroupFilter += EEXFLT_STAON ;
|
|
// Mode
|
|
if ( ( m_nFilter & EEXFLT_MODELOCKED) != 0)
|
|
m_nGroupFilter += EEXFLT_MODELOCKED + EEXFLT_MODEHIDDEN + EEXFLT_MODESTD ;
|
|
else if ( ( m_nFilter & EEXFLT_MODEHIDDEN) != 0)
|
|
m_nGroupFilter += EEXFLT_MODEHIDDEN + EEXFLT_MODESTD ;
|
|
else
|
|
m_nGroupFilter += EEXFLT_MODESTD ;
|
|
// Level
|
|
if ( ( m_nFilter & EEXFLT_LEVSYSTEM) != 0)
|
|
m_nGroupFilter += EEXFLT_LEVSYSTEM + EEXFLT_LEVTEMP + EEXFLT_LEVUSER ;
|
|
else if ( ( m_nFilter & EEXFLT_LEVTEMP) != 0)
|
|
m_nGroupFilter += EEXFLT_LEVTEMP + EEXFLT_LEVUSER ;
|
|
else
|
|
m_nGroupFilter += EEXFLT_LEVUSER ;
|
|
|
|
return true ;
|
|
}
|