From 4b051ea0eccbc717c8dc463b713744ae20f23811 Mon Sep 17 00:00:00 2001 From: Riccardo Elitropi Date: Mon, 24 Oct 2022 16:49:02 +0200 Subject: [PATCH] EgtExchange : - indentazione codice - modifica posizione telecamera con apertura da URL parametrizzato. --- ExportThreeJS.cpp | 3442 ++++++++++++++++++++++----------------------- ExportThreeJS.h | 1 - 2 files changed, 1700 insertions(+), 1743 deletions(-) diff --git a/ExportThreeJS.cpp b/ExportThreeJS.cpp index 7309b4a..f4ea8d8 100644 --- a/ExportThreeJS.cpp +++ b/ExportThreeJS.cpp @@ -6,7 +6,7 @@ // // // -// Modifiche : 19.10.22 DS Creazione modulo. +// Modifiche : 24.10.22 DS Creazione modulo. // // //---------------------------------------------------------------------------- @@ -45,7 +45,7 @@ using namespace std ; const double ANG_TOL_STD_DEG = 15 ; //---------------------------------------------------------------------------- -string ExportThreeJS::m_sThreeJSLibDir = "C:\\EgtData\\ThreeJSLib"; +string ExportThreeJS::m_sThreeJSLibDir = "C:\\EgtData\\ThreeJSLib" ; //---------------------------------------------------------------------------- bool @@ -59,91 +59,18 @@ SetThreeJSLibDir( const string& sThreeJSLibDir) IExportThreeJS* CreateExportThreeJS( void) { - // verifico la chiave e le opzioni - if ( ! GetEExNetHwKey() && ! TestKeyForEEx( GetEExKey(), KEYOPT_EEX_EXPBASE, GetEExLogger())) - return nullptr ; - // creo l'oggetto - return static_cast< IExportThreeJS*> ( new( nothrow) ExportThreeJS) ; + // verifico la chiave e le opzioni + if ( ! GetEExNetHwKey() && ! TestKeyForEEx( GetEExKey(), KEYOPT_EEX_EXPBASE, GetEExLogger())) + return nullptr ; + // creo l'oggetto + return static_cast< IExportThreeJS*> ( new( nothrow) ExportThreeJS) ; } //---------------------------------------------------------------------------- bool ExportThreeJS::SetOptions( int nFilter) { - m_nFilter = nFilter ; - return true ; -} - -//---------------------------------------------------------------------------- -bool -ExportThreeJS::CreateFolderSpace( const string& SFileName, const string& sUserPath, const string& sLibPath) -{ - // dichiarazione percorsi - string sDir = sUserPath + SFileName ; - string sDirLib = sDir + "\\Lib" ; - - // creo la directory dove salvare il file e le librerie - if ( ! CreateDirectoryEgt( sDir)) - return false ; - if ( ! CreateDirectoryEgt( sDir + "\\Lib")) - return false ; - - // *** Controls, Css, Immagini - if ( ! CreateDirectoryEgt( sDirLib + "\\Controls")) - return false ; - if ( ! CreateDirectoryEgt( sDirLib + "\\Css")) - return false ; - if ( ! CreateDirectoryEgt( sDirLib + "\\Css\\Bootstrap")) - return false ; - if ( ! CreateDirectoryEgt( sDirLib + "\\Css\\fontawesome")) - return false ; - if ( ! CreateDirectoryEgt( sDirLib + "\\Css\\fontawesome\\css")) - return false ; - if ( ! CreateDirectoryEgt( sDirLib + "\\Css\\fontawesome\\webfonts")) - return false ; - if ( ! CreateDirectoryEgt( sDirLib + "\\immagini")) - return false ; - - // *** files - if ( ! CopyFileEgt( sLibPath + "Controls\\OrbitControlsM.js", sDirLib + "\\Controls\\OrbitControlsM.js")) - return false ; - if ( ! CopyFileEgt( sLibPath + "Controls\\ViewCubeControls.js", sDirLib + "\\Controls\\ViewCubeControls.js")) - return false ; - - if ( ! CopyFileEgt( sLibPath + "Css\\Bootstrap\\bootstrap.min.css", sDirLib + "\\Css\\Bootstrap\\bootstrap.min.css")) - return false ; - if ( ! CopyFileEgt( sLibPath + "Css\\Bootstrap\\bootstrap-icons.css", sDirLib + "\\Css\\Bootstrap\\bootstrap-icons.css")) - return false ; - if ( ! CopyFileEgt( sLibPath + "Css\\Bootstrap\\fontawesomeall.css", sDirLib + "\\Css\\Bootstrap\\fontawesomeall.css")) - return false ; - - if ( ! CopyFileEgt( sLibPath + "Css\\fontawesome\\css\\all.min.css", sDirLib + "\\Css\\fontawesome\\css\\all.min.css")) - return false ; - if ( ! CopyFileEgt( sLibPath + "Css\\fontawesome\\webfonts\\fa-brands-400.ttf", sDirLib + "\\Css\\fontawesome\\webfonts\\fa-brands-400.ttf")) - return false ; - if ( ! CopyFileEgt( sLibPath + "Css\\fontawesome\\webfonts\\fa-regular-400.ttf", sDirLib + "\\Css\\fontawesome\\webfonts\\fa-regular-400.ttf")) - return false ; - if ( ! CopyFileEgt( sLibPath + "Css\\fontawesome\\webfonts\\fa-solid-900.ttf", sDirLib + "\\Css\\fontawesome\\webfonts\\fa-solid-900.ttf")) - return false ; - if ( ! CopyFileEgt( sLibPath + "Css\\fontawesome\\webfonts\\fa-v4compatibility.ttf", sDirLib + "\\Css\\fontawesome\\webfonts\\fa-v4compatibility.ttf")) - return false ; - - if ( ! CopyFileEgt( sLibPath + "Css\\StileScena.css", sDirLib + "\\Css\\StileScena.css")) - return false ; - - if ( ! CopyFileEgt( sLibPath + "immagini\\LogoQ.png", sDirLib + "\\immagini\\LogoQ.png")) - return false ; - if ( ! CopyFileEgt( sLibPath + "immagini\\LogoV.png", sDirLib + "\\immagini\\LogoV.png")) - return false ; - - if ( ! CopyFileEgt( sLibPath + "jquery.js", sDirLib + "\\jquery.js")) - return false ; - if ( ! CopyFileEgt( sLibPath + "three.module.js", sDirLib + "\\three.module.js")) - return false ; - - if ( ! CopyFileEgt( sLibPath + "info.txt", sUserPath + "\\info.txt")) - return false ; - + m_nFilter = nFilter ; return true ; } @@ -166,68 +93,150 @@ ExportThreeJS::CompressAll( const string& sFile) return false ; } - // File html - zip_source_t* pSource = zip_source_file( pZipper, ( sFile).c_str(), 0, 0) ; - if ( zip_file_add( pZipper, sFileName.c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) + // 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 - int nLibIndex = zip_dir_add( pZipper, "Lib", ZIP_FL_ENC_UTF_8) ; + 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) ; - int nJQndex = zip_file_add( pZipper, "Lib\\jquery.js", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nThreeIndex = zip_file_add( pZipper, "Lib\\three.module.js", pSource, ZIP_FL_ENC_UTF_8) ; + if ( zip_file_add(pZipper, ( sFileTitle + "\\Lib\\three.module.js").c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) { + EraseFile( sFile) ; + return false ; + } - // Controls - int nControlIndex = zip_dir_add( pZipper, "Lib\\Controls", ZIP_FL_ENC_UTF_8) ; + // 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) ; - int nOBIndex = zip_file_add( pZipper, "Lib\\Controls\\OrbitControlsM.js", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nVCCIndex = zip_file_add( pZipper, "Lib\\Controls\\ViewCubeControls.js", pSource, ZIP_FL_ENC_UTF_8) ; + if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Controls\\ViewCubeControls.js").c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) { + EraseFile( sFile) ; + return false ; + } - // Css - int nCssIndex = zip_dir_add( pZipper, "Lib\\Css", ZIP_FL_ENC_UTF_8) ; + // 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) ; - int nSCIndex = zip_file_add( pZipper, "Lib\\Css\\StileScena.css", pSource, ZIP_FL_ENC_UTF_8) ; + 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 - int nCssBIndex = zip_dir_add( pZipper, "Lib\\Css\\Bootstrap", ZIP_FL_ENC_UTF_8) ; + // 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) ; - int nBMIndex = zip_file_add( pZipper, "Lib\\Css\\Bootstrap\\bootstrap.min.css", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nBIIndex = zip_file_add( pZipper, "Lib\\Css\\Bootstrap\\bootstrap-icons.css", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nfaIndex = zip_file_add( pZipper, "Lib\\Css\\Bootstrap\\fontawesomeall.css", pSource, ZIP_FL_ENC_UTF_8) ; + 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 - int nCssfIndex = zip_dir_add( pZipper, "Lib\\Css\\fontawesome", ZIP_FL_ENC_UTF_8) ; + // 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 - int nfaCIndex = zip_dir_add( pZipper, "Lib\\Css\\fontawesome\\css", ZIP_FL_ENC_UTF_8) ; + // 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) ; - int nfaAMIndex = zip_file_add( pZipper, "Lib\\Css\\fontawesome\\css\\all.min.css", pSource, ZIP_FL_ENC_UTF_8) ; + 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 - int nfaWIndex = zip_dir_add( pZipper, "Lib\\Css\\fontawesome\\webfonts", ZIP_FL_ENC_UTF_8) ; + // 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) ; - int nfafbIndex = zip_file_add( pZipper, "Lib\\Css\\fontawesome\\webfonts\\fa-brands-400.ttf", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nfafrIndex = zip_file_add( pZipper, "Lib\\Css\\fontawesome\\webfonts\\fa-regular-400.ttf", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nfafsIndex = zip_file_add( pZipper, "Lib\\Css\\fontawesome\\webfonts\\fa-solid-900.ttf", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nfafvIndex = zip_file_add( pZipper, "Lib\\Css\\fontawesome\\webfonts\\fa-v4compatibility.ttf", pSource, ZIP_FL_ENC_UTF_8) ; + 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 - int nImmIndex = zip_dir_add( pZipper, "Lib\\Immagini", ZIP_FL_ENC_UTF_8) ; + 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) ; - int nIQIndex = zip_file_add( pZipper, "Lib\\Immagini\\LogoQ.png", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nIVIndex = zip_file_add( pZipper, "Lib\\Immagini\\LogoV.png", pSource, ZIP_FL_ENC_UTF_8) ; + 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) ; - int nInfoIndex = zip_file_add( pZipper, "info.txt", pSource, ZIP_FL_ENC_UTF_8) ; + 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) { @@ -284,25 +293,25 @@ ExportThreeJS::Export( IGeomDB* pGDB, int nId, IEGrScene* pScene, bool bUdm, con return false ; // esporto l'oggetto e i suoi eventuali figli - PtrOwner pIter( CreateGdbIterator( pGDB)) ; + 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 + // aggiungo tutto ciò che è nella scena nel nodo radice m_Writer.OutText( " groupRoot.add(group0)") ; - // creazione parte finale della pagina html + // creazione parte finale della pagina html if ( ! FinishAmbient()) return false ; - // chiudo il file + // chiudo il file if ( ! m_Writer.Close()) return false ; - // comprimo la cartella + // comprimo la cartella if ( ! CompressAll( sFile)) return false ; @@ -313,9 +322,9 @@ ExportThreeJS::Export( IGeomDB* pGDB, int nId, IEGrScene* pScene, bool bUdm, con bool ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId) { - // ================================================================ - // CREAZIONE PARTE INIZIALE DELLA SCENA =========================== - // ================================================================ + // ================================================================ + // CREAZIONE PARTE INIZIALE DELLA SCENA =========================== + // ================================================================ double dAngVertDeg, dAngOrizzDeg, dDist ; // parametri della telecamera double dSnapStep ; // parametri della griglia @@ -353,13 +362,13 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId) string sPath = "" ; // percorso relativo all'interno delle cartelle (modificabile per future implementazioni) - // scrittura parte iniziale del codice e librerie + // scrittura parte iniziale del codice e librerie m_Writer.OutText( "") ; m_Writer.OutText( "") ; m_Writer.OutText( " ") ; // m_Writer.OutText( " ") ; m_Writer.OutText( " ") ; - m_Writer.OutText( " "); + m_Writer.OutText( " ") ; m_Writer.OutText( " ") ; m_Writer.OutText( " ") ; m_Writer.OutText( " ") ; - // script per pulsante del menu laterale - m_Writer.OutText( " ") ; - m_Writer.OutText( "") ; - // codice html per la creazione del menu laterale - m_Writer.OutText( " ") ; - // codice html per la creazione del menu contestuale al click del mouse - 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 per pulsante del menu laterale + m_Writer.OutText( " ") ; + m_Writer.OutText( "") ; + // codice html per la creazione del menu laterale + m_Writer.OutText( " ") ; + // codice html per la creazione del menu contestuale al click del mouse + m_Writer.OutText( " ") ; + m_Writer.OutText( " ") ; + m_Writer.OutText( "") ; return true ; } @@ -2466,17 +2437,17 @@ ExportThreeJS::FinishAmbient( void) 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] ; + // 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 ; + // 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 ; + return true ; } //---------------------------------------------------------------------------- @@ -2484,17 +2455,16 @@ bool ExportThreeJS::ExportObject( const IGdbIterator& iIter, IGeomDB* pGDB, const int nGroupCount) { // recupero il livello dell'oggetto - int nLev = GDB_LV_USER; + int nLev = GDB_LV_USER ; iIter.GetCalcLevel( nLev) ; // recupero il modo dell'oggetto - int nMode = GDB_MD_STD; + int nMode = GDB_MD_STD ; iIter.GetCalcMode( nMode) ; // recupero lo stato dell'oggetto - int nStat = GDB_ST_ON; + int nStat = GDB_ST_ON ; iIter.GetCalcStatus( nStat) ; - //if ( TestFilter( nLev, nMode, nStat)) { - switch ( iIter.GetGdbType()) { + switch ( iIter.GetGdbType()) { case GDB_TY_GEO : { // recupero l'oggetto geometrico @@ -2522,7 +2492,7 @@ ExportThreeJS::ExportObject( const IGdbIterator& iIter, IGeomDB* pGDB, const int if ( nIndex == GDB_MT_COLOR) iIter.GetMaterial( cCol) ; else { - PtrOwner iIterNew( CreateGdbIterator( pGDB)) ; + PtrOwner< IGdbIterator> iIterNew( CreateGdbIterator( pGDB)) ; int nParendID = iIter.GetParentId() ; int nMaterialID ; while ( ! bColorSpot) { @@ -2537,67 +2507,66 @@ ExportThreeJS::ExportObject( const IGdbIterator& iIter, IGeomDB* pGDB, const int // 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 ; + 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 + // esploro il gruppo return ScanGroup( iIter, pGDB, nGroupCount) ; default : return false ; - } - //} + } return true ; } @@ -2606,362 +2575,353 @@ ExportThreeJS::ExportObject( const IGdbIterator& iIter, IGeomDB* pGDB, const int 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 ; + // 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) ; + 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) ; + // porto il vettore in coordinate ThreeJS + vVec.ToGlob( frFrame) ; + ptVec.LocToLoc( frFrame, m_frTHREEJSFrame) ; - // scrivo il vettore - m_Writer.OutText( " var vettore" + sName + " = new THREE.Vector3(" + ToString( vVec.y) + ", " + ToString( vVec.z) + ", " + ToString( vVec.x) + ")") ; - m_Writer.OutText( " vettore" + sName + ".normalize();") ; - m_Writer.OutText( " var origin = new THREE.Vector3(" + ToString( ptVec.x) + ", " + ToString( ptVec.y) + ", " + ToString( ptVec.z) + ")") ; - m_Writer.OutText( " var length = " + ToString( vVec.Len()) + ";") ; - m_Writer.OutText( " var hex = " + sHexCol +";") ; - m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(vettore" + sName + ", origin, length, hex);") ; - m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; //salvataggio colore per selezione - m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ; + // scrivo il vettore + m_Writer.OutText( " var vettore" + sName + " = new THREE.Vector3(" + ToString( vVec.y) + ", " + ToString( vVec.z) + ", " + ToString( vVec.x) + ")") ; + m_Writer.OutText( " vettore" + sName + ".normalize();") ; + m_Writer.OutText( " var origin = new THREE.Vector3(" + ToString( ptVec.x) + ", " + ToString( ptVec.y) + ", " + ToString( ptVec.z) + ")") ; + m_Writer.OutText( " var length = " + ToString( vVec.Len()) + ";") ; + m_Writer.OutText( " var hex = " + sHexCol +";") ; + m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(vettore" + sName + ", origin, length, hex);") ; + m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; //salvataggio colore per selezione + m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ; - // aggiungo il vettore al suo gruppo di appartenenza - if ( nGroupCount != -1) - m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")") ; + // aggiungo il vettore al suo gruppo di appartenenza + if ( nGroupCount != -1) + m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")") ; - return true ; + 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 ; + // 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() ; + 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) ; + // 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 + ");") ; + // 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 + ")") ; + // aggiungo la linea al suo gruppo di appartenenza + if ( nGroupCount != -1) + m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(line" + sName + ")") ; - return true ; + 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 ; + // 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) ; + 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 + ");") ; + // 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 + ")") ; + // aggiungo il punto al suo gruppo di appartenenza + if ( nGroupCount != -1) + m_Writer.OutText(" group" + ToString( nGroupCount) + ".children.push(dot" + sName + ")") ; - return true ; + 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 ; + // 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) ; + 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) ; + Point3d ptOrig = frCurrentFrame.Orig() ; + ptOrig.LocToLoc( frFrame, m_frTHREEJSFrame) ; - Vector3d vx = frCurrentFrame.VersZ() ; - Vector3d vy = frCurrentFrame.VersX() ; - Vector3d vz = frCurrentFrame.VersY() ; + Vector3d vx = frCurrentFrame.VersZ() ; + Vector3d vy = frCurrentFrame.VersX() ; + Vector3d vz = frCurrentFrame.VersY() ; - // scrivo i 3 vettori - // x - m_Writer.OutText( " var xdir" + sName + " = new THREE.Vector3(" + ToString( vx.x) + ", " + ToString( vx.y) + ", " + ToString( vx.z) + ");") ; - m_Writer.OutText( " xdir" + sName + ".normalize()") ; - m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z)+ ");") ; - m_Writer.OutText( " var length = 25;") ; - m_Writer.OutText( " var hex = 0xff0000;") ; - m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(xdir" + sName + ", origin" + sName + ", length, hex);") ; - m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; - m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ; + // scrivo i 3 vettori + // x + m_Writer.OutText( " var xdir" + sName + " = new THREE.Vector3(" + ToString( vx.x) + ", " + ToString( vx.y) + ", " + ToString( vx.z) + ");") ; + m_Writer.OutText( " xdir" + sName + ".normalize()") ; + m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z)+ ");") ; + m_Writer.OutText( " var length = 25;") ; + m_Writer.OutText( " var hex = 0xff0000;") ; + m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(xdir" + sName + ", origin" + sName + ", length, hex);") ; + m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; + m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ; - // aggiungo il vettore al suo gruppo di appartenenza - if (nGroupCount != -1) - m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")"); + // aggiungo il vettore al suo gruppo di appartenenza + if ( nGroupCount != -1) + m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")") ; - // y - m_Writer.OutText( " var ydir" + sName + " = new THREE.Vector3(" + ToString( vy.x) + ", " + ToString( vy.y) + ", " + ToString( vy.z) + ");") ; - m_Writer.OutText( " ydir" + sName + ".normalize()") ; - m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z) + ");") ; - m_Writer.OutText( " var length = 25;") ; - m_Writer.OutText( " var hex = 0x00ff00;") ; - m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(ydir" + sName + ", origin" + sName + ", length, hex);") ; - m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; - m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ; + // y + m_Writer.OutText( " var ydir" + sName + " = new THREE.Vector3(" + ToString( vy.x) + ", " + ToString( vy.y) + ", " + ToString( vy.z) + ");") ; + m_Writer.OutText( " ydir" + sName + ".normalize()") ; + m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z) + ");") ; + m_Writer.OutText( " var length = 25;") ; + m_Writer.OutText( " var hex = 0x00ff00;") ; + m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(ydir" + sName + ", origin" + sName + ", length, hex);") ; + m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; + m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ; - // aggiungo il vettore al suo gruppo di appartenenza - if ( nGroupCount != -1) - m_Writer.OutText(" group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")") ; + // aggiungo il vettore al suo gruppo di appartenenza + if ( nGroupCount != -1) + m_Writer.OutText(" group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")") ; - // z - m_Writer.OutText( " var zdir" + sName + " = new THREE.Vector3(" + ToString( vz.x) + ", " + ToString( vz.y) + ", " + ToString( vz.z) + ");") ; - m_Writer.OutText( " zdir" + sName + ".normalize()") ; - m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z) + ");") ; - m_Writer.OutText( " var length = 25;") ; - m_Writer.OutText( " var hex = 0x0000ff;") ; - m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(zdir" + sName + ", origin" + sName + ", length, hex);") ; - m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);"); - m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ; + // z + m_Writer.OutText( " var zdir" + sName + " = new THREE.Vector3(" + ToString( vz.x) + ", " + ToString( vz.y) + ", " + ToString( vz.z) + ");") ; + m_Writer.OutText( " zdir" + sName + ".normalize()") ; + m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z) + ");") ; + m_Writer.OutText( " var length = 25;") ; + m_Writer.OutText( " var hex = 0x0000ff;") ; + m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(zdir" + sName + ", origin" + sName + ", length, hex);") ; + m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; + m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ; - // aggiungo il vettore al suo gruppo di appartenenza - if ( nGroupCount != -1) - m_Writer.OutText(" group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")") ; + // aggiungo il vettore al suo gruppo di appartenenza + if ( nGroupCount != -1) + m_Writer.OutText(" group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")") ; - return true ; + 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 ; + // prelevo la curva composita e il suo colore + const ICurve* pCurve = GetCurve( pGeoObj) ; + if ( pCurve == nullptr) + return false ; - string sHexCol ; - GetColor( Ccol, sHexCol) ; + 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) ; + // 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) ; + // 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) ; - } + // 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 + // aggiungo la curva composita al suo gruppo di appartenenza + if ( nGroupCount != -1) + m_Writer.OutText(" group" + ToString( nGroupCount) + ".children.push(Compoline" + sName + ")") ; - if ( nGroupCount != -1) - m_Writer.OutText(" group" + ToString( nGroupCount) + ".children.push(Compoline" + sName + ")") ; - - return true ; + return true ; } //---------------------------------------------------------------------------- bool ExportThreeJS::ExportSTM( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount) { - // verifico oggetto - const ISurfTriMesh* pSTM = GetSurfTriMesh( pGeoObj) ; - if ( pSTM == nullptr) - return false ; + // verifico oggetto + const ISurfTriMesh* pSTM = GetSurfTriMesh( pGeoObj) ; + if ( pSTM == nullptr) + return false ; - // aumento il contatore generale per evitare nomi uguali su javascript - m_nCont ++ ; + // 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() ; + // 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.1 * dOpacity * dOpacity + 0.25 * dOpacity + 0.5; // interpolazione quadratica per opacità (opacità ThreeJs diversa da opacità EGTCAM5) - dOpacityThreeJs = 0.7 + 0.2*dOpacity ; - // dOpacityThreeJs = dOpacity; + // 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 + // 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) - } + // 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 + // creo vettore di vertici per i triangoli della mesh + m_Writer.OutText(" var vertices" + ToString( m_nCont) + " = [") ; - m_Writer.OutText(" var vertices" + ToString( m_nCont) + " = [") ; + int iTotV = pSTM->GetVertexCount() ; + int iTotT = pSTM->GetTriangleCount() ; - int iTotV = pSTM->GetVertexCount() ; - int iTotT = pSTM->GetTriangleCount() ; + Point3d ptCurrent ; + int iPtCurrentTria[3] ; - Point3d ptCurrent ; - int iPtCurrentTria[3] ; + // scorro tutti i vertici e ne scrivo le coordinate + for ( int i = 0; i < iTotV; i++) { + pSTM->GetVertex( i, ptCurrent) ; + ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ; + m_Writer.OutText(" new THREE.Vector3(" + ToString( ptCurrent.x) + ", " + ToString( ptCurrent.y) + ", " + ToString( ptCurrent.z) + "),", false) ; + } - // scorro tutti i vertici e ne scrivo le coordinate - for ( int i = 0; i < iTotV; i++) { - pSTM->GetVertex( i, ptCurrent) ; - ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ; - m_Writer.OutText(" new THREE.Vector3(" + ToString( ptCurrent.x) + ", " + ToString( ptCurrent.y) + ", " + ToString( ptCurrent.z) + "),", false) ; - } + m_Writer.OutText( " ];", false) ; - m_Writer.OutText( " ];", false) ; + // creo vettore delle facce dei triangoli + m_Writer.OutText( " var faces" + ToString(m_nCont) + " = [ ") ; - // creo vettore delle facce dei triangoli + // 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( " var faces" + ToString(m_nCont) + " = [ ") ; + m_Writer.OutText( " ];") ; - // 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) ; - } + // creo la geometria con i vertici e le facce + m_Writer.OutText( " var geom" + ToString( m_nCont) + " = new THREE.Geometry();") ; + m_Writer.OutText( " geom" + ToString( m_nCont) + ".vertices = vertices" + ToString( m_nCont) + ";") ; + m_Writer.OutText( " geom" + ToString( m_nCont) + ".faces = faces" + ToString( m_nCont) + ";") ; + m_Writer.OutText( " try{") ; + m_Writer.OutText( " geom" + ToString( m_nCont) + ".computeFaceNormals();") ; // per rendering effetto ombre e luce + m_Writer.OutText( " } catch(err){ console.log(err);};") ; - m_Writer.OutText( " ];") ; - - // creo la geometria con i vertici e le facce - m_Writer.OutText( " var geom" + ToString( m_nCont) + " = new THREE.Geometry();") ; - m_Writer.OutText( " geom" + ToString( m_nCont) + ".vertices = vertices" + ToString( m_nCont) + ";") ; - m_Writer.OutText( " geom" + ToString( m_nCont) + ".faces = faces" + ToString( m_nCont) + ";") ; - m_Writer.OutText( " try{") ; - m_Writer.OutText( " geom" + ToString( m_nCont) + ".computeFaceNormals();") ; // per rendering effetto ombre e luce - m_Writer.OutText( " } catch(err){ console.log(err);};") ; - - // creo la mesh unendo geometria (vertici e facce) e materiale - if ( dOpacity < 1) { - // mesh trasparente - // front side ----------------------------- - m_Writer.OutText( " var front_surf_mesh" + ToString( m_nCont) + " = new THREE.Mesh(geom" + ToString( m_nCont) + ", front_surf_materials" + ToString( m_nCont) + ");") ; - m_Writer.OutText( " front_surf_mesh" + ToString( m_nCont) + ".castShadow = true;") ; - - // aggiungo la superficie al suo gruppo di appartenenza - if ( nGroupCount != -1) - m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(front_surf_mesh" + ToString( m_nCont) + ")") ; - - // back side ------------------------------- - m_Writer.OutText( " var back_surf_mesh" + ToString( m_nCont) + " = new THREE.Mesh(geom" + ToString( m_nCont) + ", back_surf_materials" + ToString(m_nCont) + ");") ; - m_Writer.OutText( " back_surf_mesh" + ToString( m_nCont) + ".castShadow = true;") ; - - // aggiungo la superficie al suo gruppo di appartenenza - if( nGroupCount != -1) - m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(back_surf_mesh" + ToString( m_nCont) + ")") ; - - // non aggiungo la mesh alla lista degli oggetti della scena, prima le riordino nella funzione FinishAmbient() - } - else { - // mesh opaca - m_Writer.OutText( " var opaca_mesh_" + ToString( m_nCont) + " = new THREE.Mesh(geom" + ToString( m_nCont) + ", opaca_surf_materials" + ToString( m_nCont) + ");") ; - m_Writer.OutText( " opaca_mesh_" + ToString( m_nCont) + ".castShadow = true;") ; - m_Writer.OutText( " list_of_objects.push(opaca_mesh_" + ToString( m_nCont) + ");") ; // aggiungo la mesh alla lista degli oggetti della scena - - // aggiungo al superficie al suo gruppo di appartenenza - if ( nGroupCount != -1) - m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(opaca_mesh_" + ToString( m_nCont) + ")") ; - } - - //m_Writer.OutText(" }"); - //m_Writer.OutText(" catch(err){ console.log(err); }"); + // 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 ; } @@ -2983,13 +2943,13 @@ ExportThreeJS::ExportSFR( const string& sName, const IGeoObj* pGeoObj, const Fra 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) ; + // 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) ; } @@ -2997,46 +2957,46 @@ ExportThreeJS::ExportSBezier( const std::string& sName, const IGeoObj* pGeoObj, 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 ; + // 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) ; + // 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 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) ; - } + // scorro tutti i punti e approssimo con delle linee rette + while ( aLine.GetNextPoint( ptCurrent)) { + ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ; + m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),", false) ; + } - m_Writer.OutText( " );") ; - m_Writer.OutText( " var text_Compoline" + ToString( m_nCont) + " = new THREE.Line(text_line_geometry" + ToString( m_nCont) + ",text_line_material" + ToString( m_nCont) + ");") ; - m_Writer.OutText( " text_Compoline" + ToString( m_nCont) + ".translateY(1);") ; - m_Writer.OutText( " list_of_objects.push(text_Compoline" + ToString( m_nCont) + ");") ; + 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) + ")") ; + // 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 ; } @@ -3045,125 +3005,123 @@ ExportThreeJS::ExportText( const string& sName, const IGeoObj* pGeoObj, const Fr 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 ; + // 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 ; + // 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) ; + // 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) ; + // 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) ; - } + 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 ++ ; + 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 ; + // 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 pIter( CreateGdbIterator( iIter.GetGDB())) ; - if ( IsNull( pIter)) - return false ; - // scandisco il gruppo - bool bOk = true ; + // creo un iteratore + PtrOwner pIter( CreateGdbIterator( iIter.GetGDB())) ; + if ( IsNull( pIter)) + return false ; + // scandisco il gruppo + bool bOk = true ; - pIter->GoTo( iIter.GetId()) ; + pIter->GoTo( iIter.GetId()) ; - //================================================================================================ - // recupero il livello dell'oggetto - int nLev = GDB_LV_USER ; - iIter.GetCalcLevel( nLev) ; - // recupero il modo dell'oggetto - int nMode = GDB_MD_STD; - iIter.GetCalcMode( nMode) ; - // recupero lo stato dell'oggetto - int nStat = GDB_ST_ON ; - iIter.GetCalcStatus( nStat) ; + // recupero il livello dell'oggetto + int nLev = GDB_LV_USER ; + iIter.GetCalcLevel( nLev) ; + // recupero il modo dell'oggetto + int nMode = GDB_MD_STD; + iIter.GetCalcMode( nMode) ; + // recupero lo stato dell'oggetto + int nStat = GDB_ST_ON ; + iIter.GetCalcStatus( nStat) ; - if ( TestFilter( nLev, nMode, nStat)) { - m_nGroupCount ++ ; - m_Writer.OutText(" const group" + ToString( m_nGroupCount) + " = new THREE.Group();") ; + if ( TestFilter( nLev, nMode, nStat)) { + m_nGroupCount ++ ; + m_Writer.OutText( " const group" + ToString( m_nGroupCount) + " = new THREE.Group();") ; - if ( nGroupCount != -1) - m_sCodMenu += "
    " ; - - string sName ; - pIter->GetName( sName) ; - string sId = ToString( pIter->GetId()) ; + if ( nGroupCount != -1) + m_sCodMenu += "
      " ; + + string sName ; + pIter->GetName( sName) ; + string sId = ToString( pIter->GetId()) ; - m_Writer.OutText( " group" + ToString( m_nGroupCount) + ".name = '" + sId + "'") ; - // aggiung l'EventListner per il menù laterale sinistro - m_Writer.OutText( " document.getElementById('p_id_" + sId + "').addEventListener('click', function(){ if(!booked) { findGroupByNameAndId(groupRoot, " + sId + ", 1); }});") ; - m_Writer.OutText( " document.getElementById('lb_" + sId + "').addEventListener('click', function(){ lightbulb('lb_" + sId + "', 0)});") ; + 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 += "
      " ; - m_sCodMenu += "" ; - m_sCodMenu += "" ; - m_sCodMenu += "
      " ; - } - else { - m_sCodMenu += "
      " ; - m_sCodMenu += "" ; - m_sCodMenu += "" ; - m_sCodMenu += "
      " ; - } + if ( ! sId.compare( "0")) { + m_sCodMenu += "
      " ; + m_sCodMenu += "" ; + m_sCodMenu += "" ; + m_sCodMenu += "
      " ; + } + else { + m_sCodMenu += "
      " ; + m_sCodMenu += "" ; + m_sCodMenu += "" ; + m_sCodMenu += "
      " ; + } - int nCurrentGroup = m_nGroupCount; + int nCurrentGroup = m_nGroupCount ; - for ( bool bNext = pIter->GoToFirstInGroup(iIter) ; bNext ; bNext = pIter->GoToNext()) { - if ( ! ExportObject( *pIter, pGDB, nCurrentGroup)) - bOk = false ; - } + 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) + ")") ; - } + if ( nGroupCount != -1) { + m_Writer.OutText(" group" + ToString( nGroupCount) + ".add(group" + ToString( nCurrentGroup) + ")") ; + } - m_sCodMenu += "
    " ; - - } - return bOk ; + m_sCodMenu += "
" ; + } + return bOk ; } //---------------------------------------------------------------------------- diff --git a/ExportThreeJS.h b/ExportThreeJS.h index c80f942..9239506 100644 --- a/ExportThreeJS.h +++ b/ExportThreeJS.h @@ -41,7 +41,6 @@ class ExportThreeJS : public IExportThreeJS ExportThreeJS( void) : m_nFilter( EEXFLT_DEFAULT), m_nCont( 0), m_nGroupCount( -1), m_bShowGrid( true) {} private: - bool CreateFolderSpace( const std::string& SFileName, const std::string& sUserPath, const std::string& sLibPath) ; bool HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId) ; bool FinishAmbient( void) ; bool CompressAll( const std::string& sFile) ;