b2e6005700
- esportazione con menu e file geometrie separati
1510 lines
86 KiB
C++
1510 lines
86 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalWare 2022-2022
|
|
//----------------------------------------------------------------------------
|
|
// File : ExportThreeJS.cpp Data : 05.07.22 Versione : 1.5h2
|
|
// Contenuto : Implementazione della classe per l'esportazione in formato html (javascript).
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 21.07.22 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "ExportThreeJS.h"
|
|
#include "DllMain.h"
|
|
#include "/EgtDev/Include/EExDllMain.h"
|
|
#include "/EgtDev/Include/EGkGeomDB.h"
|
|
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
|
|
#include "/EgtDev/Include/EGkSurfTriMesh.h"
|
|
#include "/EgtDev/Include/EGkGdbIterator.h"
|
|
#include "/EgtDev/Include/EGnStringUtils.h"
|
|
#include "/EgtDev/Include/SELkKeyProc.h"
|
|
#include "/EgtDev/Include/EgtKeyCodes.h"
|
|
#include "/EgtDev/Include/EgtStringConverter.h"
|
|
#include "/EgtDev/Include/EgtPointerOwner.h"
|
|
#include <fstream>
|
|
#include "/EgtDev/Include/EGkGeoVector3d.h"
|
|
#include "/EgtDev/Include/EGkCurveLine.h"
|
|
#include "/EgtDev/Include/EGkGeoPoint3d.h"
|
|
#include "/EgtDev/Include/EGKCurve.h"
|
|
#include "/EgtDev/Include/EGkGeoConst.h"
|
|
#include "/EgtDev/Include/EGkExtText.h"
|
|
#include "/EgtDev/Include/EGkSurfBezier.h"
|
|
#include "/EgtDev/Include/EGkGeoFrame3d.h"
|
|
#include "/EgtDev/Include/EGkFrame3d.h"
|
|
#include "/EgtDev/Include/EGkExtDimension.h"
|
|
#include "/EgtDev/Include/EGrScene.h"
|
|
#include "/EgtDev/Include/EGkCurveComposite.h"
|
|
|
|
|
|
using namespace std ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
IExportThreeJS*
|
|
CreateExportThreeJS( void)
|
|
{
|
|
// verifico la chiave e le opzioni
|
|
if ( ! GetEExNetHwKey() && ! TestKeyForEEx( GetEExKey(), KEYOPT_EEX_EXPBASE, GetEExLogger()))
|
|
return nullptr ;
|
|
// creo l'oggetto
|
|
return static_cast<IExportThreeJS*> ( new( nothrow) ExportThreeJS) ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::SetOptions( int nFilter)
|
|
{
|
|
m_nFilter = nFilter ;
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::Export( IGeomDB* pGDB, int nId, const string& sFile, const string& sFileM, IEGrScene* pScene)
|
|
{
|
|
// 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 ;
|
|
}
|
|
|
|
// apro il file di testo in scrittura
|
|
m_WriterM.Close() ;
|
|
if ( ! m_WriterM.Init( sFileM)) {
|
|
LOG_ERROR( GetEExLogger(), "ExportThreeJS : Error on open file")
|
|
return false ;
|
|
}
|
|
|
|
|
|
// prelevo il Box3D globale (per ingombro e punto luce)
|
|
BBox3d b3Globbox ;
|
|
pGDB->GetGlobalBBox( nId, b3Globbox, BBF_ONLY_VISIBLE) ;
|
|
b3Globbox.GetMinDim( m_ptMin, m_dimX, m_dimY, m_dimZ) ;
|
|
// m_dScala = max( m_dimX, m_dimY, m_dimZ) / 200 ;
|
|
m_ptMin.ToLoc( m_frTHREEJSFrame) ;
|
|
|
|
// creazione parte iniziale della pagina html
|
|
bool bOk = HeadAmbient( pScene, pGDB, nId) ;
|
|
|
|
// creo un iteratore
|
|
PtrOwner<IGdbIterator> pIter( CreateGdbIterator( pGDB)) ;
|
|
if ( IsNull( pIter))
|
|
return false ;
|
|
pIter->GoTo( nId) ;
|
|
// esporto l'oggetto e i suoi eventuali figli
|
|
bOk = ExportObject( *pIter, pGDB, m_nGroupCount) ;
|
|
// fine creazione menù con elementi globali
|
|
m_Writer.OutText( " groupRoot.add(group0)");
|
|
|
|
// creazione parte finale della pagina html
|
|
bOk = FinishAmbient() ;
|
|
|
|
// chiudo il file
|
|
if ( ! m_Writer.Close())
|
|
bOk = false ;
|
|
|
|
if (! m_WriterM.Close())
|
|
bOk = false ;
|
|
|
|
return bOk;
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
|
{
|
|
// ================================================================
|
|
// CREAZIONE PARTE INIZIALE DELLA SCENA ===========================
|
|
// ================================================================
|
|
|
|
// prelevo le impostazioni della camera da EGTCAM5
|
|
pScene->GetOrthoCamParam( &m_dHalfWidth, &m_dHalfHeight, &m_ZNear, &m_ZFar) ;
|
|
m_ptCenter = pScene->GetCenter() ;
|
|
double dAngVertDeg, dAngOrizzDeg, dDist ;
|
|
pScene->GetCamera( &dAngVertDeg, &dAngOrizzDeg, &dDist) ;
|
|
Vector3d vtDirCamera = FromSpherical( 1, dAngVertDeg, dAngOrizzDeg) ;
|
|
m_ptCamera = m_ptCenter + dDist * vtDirCamera;
|
|
m_dDistance = dDist ;
|
|
|
|
// prelevo i parametri della griglia
|
|
double dSnapStep ;
|
|
int nExtStep ;
|
|
pScene->GetGridParam( &dSnapStep, &nExtStep) ;
|
|
|
|
|
|
// scrittura parte iniziale del codice e librerie
|
|
m_Writer.OutText( "<!DOCTYPE html>") ;
|
|
m_Writer.OutText( "<html>") ;
|
|
m_Writer.OutText( " <head>") ;
|
|
// librerie
|
|
// --- m_Writer.OutText( " <script type='text/javascript' src='C:/EgtDev/Extern/ThreeJs/three.js'></script>") ; <---- original
|
|
// --- m_Writer.OutText( " <script type='text/javascript' src='C:/EgtDev/Extern/ThreeJs/OrbitControls.js'></script>") ; <--- original
|
|
// --- m_Writer.OutText( " <script type='text/javascript' src='C:/EgtDev/Extern/ThreeJs/dat.gui.js'></script>") ; <--- original
|
|
// stile
|
|
m_Writer.OutText( " <style>") ;
|
|
m_Writer.OutText( " body{") ;
|
|
m_Writer.OutText( " margin : 0;") ;
|
|
m_Writer.OutText( " overflow: hidden;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " .obit-controls-gizmo{") ;
|
|
m_Writer.OutText( " position: absolute;") ;
|
|
m_Writer.OutText( " bottom: 2em;") ;
|
|
m_Writer.OutText( " right: 2em;") ;
|
|
m_Writer.OutText( " z-index: 1000;") ;
|
|
m_Writer.OutText( " background-color: #FFF0;") ;
|
|
m_Writer.OutText( " border-radius: 100%;") ;
|
|
m_Writer.OutText( " transition: background-color .15s linear;") ;
|
|
m_Writer.OutText( " cursor: pointer;") ;
|
|
m_Writer.OutText( " touch-action: none;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " .obit-controls-gizmo.dragging, .obit-controls-gizmo:hover{") ;
|
|
m_Writer.OutText( " background-color: #FFF3;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " .obit-controls-gizmo.inactive{") ;
|
|
m_Writer.OutText( " pointer-events: none;") ;
|
|
m_Writer.OutText( " background-color: #FFF0 !important;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " </style>") ;
|
|
// librerie (non moduli)
|
|
m_Writer.OutText( " <script type = 'text/javascript' src = './Lib/jquery.js'></script>") ; //jquery
|
|
m_Writer.OutText( " <script type = 'text/javascript' src = './Lib/Controls/dat.gui.js'></script>") ; //datGui
|
|
|
|
m_Writer.OutText( " </head>") ;
|
|
// body
|
|
m_Writer.OutText( " <body>") ;
|
|
m_Writer.OutText( " <div id='WebGL-output'>") ;
|
|
//m_Writer.OutText( "<div syle='position:absolute' id='zoom_test'></div>"); // div di aiuto per controllo parametri telecamera, zoom
|
|
m_Writer.OutText( " </div>") ;
|
|
// --- m_Writer.OutText( " <script type='text/javascript'>") ; <----------- original
|
|
m_Writer.OutText( " <script type='module'>");
|
|
m_Writer.OutText( " import * as THREE from './Lib/three.module.js';") ; // modulo THREEJS
|
|
m_Writer.OutText( " import { OrbitControls } from './Lib/Controls/orbitControlsM.js';") ; // modulo Controllo telecamera
|
|
m_Writer.OutText( " import { OrbitControlsGizmo } from './Lib/Controls/OrbitControlsGizmo.js';") ; // modulo Controllo assi GIZMO
|
|
// variabili globali per script javascript
|
|
m_Writer.OutText( " var camera;") ;
|
|
m_Writer.OutText( " var scene;") ;
|
|
m_Writer.OutText( " var renderer;") ;
|
|
m_Writer.OutText( " var zoom = 1;") ;
|
|
m_Writer.OutText( " var groupRoot = new THREE.Group();");
|
|
m_Writer.OutText( " var list_of_groups = [];") ;
|
|
m_Writer.OutText( " var first = true;") ;
|
|
m_Writer.OutText( " var LastGroupSelected = null;") ;
|
|
m_Writer.OutText( " var trovato = false;") ;
|
|
// funzione init() -> funzione principale che viene richiamata per la creazione della scena e dei suoi oggetti
|
|
m_Writer.OutText( " function init() { ") ;
|
|
// codice per scena, telecamera e render
|
|
m_Writer.OutText( " scene = new THREE.Scene();") ;
|
|
// imposto telecamera ortografica (posizione, punto di focus, posizione piani di clipping e definizione della zona di viewing frustum
|
|
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + ", " + ToString( m_dHalfWidth) + ", " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_ZNear) + ", " + ToString( m_ZFar) + ");") ;
|
|
m_Writer.OutText( " camera.position.x = " + ToString( m_ptCamera.y) + "; camera.position.y = " + ToString( m_ptCamera.z) + "; camera.position.z = " + ToString( m_ptCamera.x) + "; ") ;
|
|
m_Writer.OutText( " var dist = camera.position.distanceTo(new THREE.Vector3(0,0,0)); // per Gizmo") ; // per Gizmo
|
|
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + "));") ;
|
|
m_Writer.OutText( " scene.add(camera)") ;
|
|
// impostazioni del render della scena
|
|
m_Writer.OutText( " renderer = new THREE.WebGLRenderer({ antialias: true, alpha:true, transparent: true });") ;
|
|
m_Writer.OutText( " renderer.setClearColor(new THREE.Color(0xD3D3D3));") ;
|
|
m_Writer.OutText( " renderer.setPixelRatio( window.devicePixelRatio );") ;
|
|
m_Writer.OutText( " renderer.toneMapping = THREE.ACESFilmicToneMapping;") ;
|
|
m_Writer.OutText( " if (window.screen.width > window.screen.height) {") ;
|
|
m_Writer.OutText( " renderer.setSize(window.screen.width, window.screen.height);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " renderer.setSize(window.screen.height, window.screen.width);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " renderer.shadowMapEnabled = true;") ;
|
|
m_Writer.OutText( " renderer.sortObjects = false;") ;
|
|
// punti luce
|
|
double dResult = sqrt(( m_ptMin.x + ( m_dimX * 2)) * ( m_ptMin.x + ( m_dimX * 2)) + ( m_ptMin.y + ( m_dimY * 2)) * ( m_ptMin.y + ( m_dimY * 2)) + ( m_ptMin.z + ( m_dimZ * 2)) * ( m_ptMin.z + ( m_dimZ * 2))) ;
|
|
m_Writer.OutText( " var spotLight1 = new THREE.SpotLight(0xFFFFFF);") ;
|
|
m_Writer.OutText( " spotLight1.position.set(" + ToString( m_ptMin.x + ( m_dimX * 2)) + ", " + ToString( m_ptMin.y + ( m_dimY * 2)) + ", " + ToString(( m_ptMin.z + ( m_dimZ*2))) + ");") ;
|
|
m_Writer.OutText( " spotLight1.intensity = 0.6;") ;
|
|
m_Writer.OutText( " spotLight1.angle = Math.PI/4;") ;
|
|
m_Writer.OutText( " spotLight1.distance = " + ToString( dResult) + "*2.5;") ;
|
|
m_Writer.OutText( " spotLight1.castShadow = true;") ;
|
|
m_Writer.OutText( " scene.add(spotLight1);") ;
|
|
// punto luce helper
|
|
// m_Writer.OutText( "const spotLightHelper1 = new THREE.SpotLightHelper( spotLight1 );") ;
|
|
// m_Writer.OutText( "scene.add( spotLightHelper1 );") ;
|
|
// ambiente
|
|
m_Writer.OutText( " var ambientLight = new THREE.AmbientLight(0x4d4d4d);") ;
|
|
m_Writer.OutText( " ambientLight.intensity = 1.25;") ;
|
|
m_Writer.OutText( " scene.add(ambientLight); ") ;
|
|
// codice per disegno griglia
|
|
m_Writer.OutText( " var size = " + ToString( nExtStep * dSnapStep) + ";") ;
|
|
m_Writer.OutText( " var divisions = " + ToString( dSnapStep) + ";");
|
|
// m_Writer.OutText("var divisions = 10;");
|
|
// ---- m_Writer.OutText( " var gridHelper = new THREE.GridHelper(size, divisions, new THREE.Color(1,0,0), new THREE.Color(0,1,0));");
|
|
// ---- m_Writer.OutText( " scene.add(gridHelper);");
|
|
// codice per disegnare le linee per la griglia scura
|
|
m_Writer.OutText( " var LineMaterial;") ;
|
|
m_Writer.OutText( " var LineGeometry;") ;
|
|
m_Writer.OutText( " var line;") ;
|
|
m_Writer.OutText( " for (var i = -10; i <= 10; i++)") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " LineMaterial = new THREE.LineBasicMaterial({ color: 0x444444 });") ;
|
|
m_Writer.OutText( " LineGeometry = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " LineGeometry.vertices.push(") ;
|
|
m_Writer.OutText( " new THREE.Vector3( " + ToString( nExtStep * dSnapStep) + ", 0, " + ToString( -nExtStep * dSnapStep) + "+ (" + ToString( nExtStep * dSnapStep / 10) + ") * ( i + 10 )),") ;
|
|
m_Writer.OutText( " new THREE.Vector3( " + ToString( -nExtStep * dSnapStep) + ", 0, " + ToString( -nExtStep * dSnapStep) + "+ (" + ToString( nExtStep * dSnapStep / 10) + ") * ( i + 10 ))") ;
|
|
m_Writer.OutText( " );") ;
|
|
m_Writer.OutText( " line = new THREE.Line(LineGeometry, LineMaterial);") ;
|
|
m_Writer.OutText( " scene.add(line);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " for (var i = -10; i <= 10; i++)") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " LineMaterial = new THREE.LineBasicMaterial({ color: 0x444444 });") ;
|
|
m_Writer.OutText( " LineGeometry = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " LineGeometry.vertices.push(") ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString( nExtStep * dSnapStep) + " - ( " + ToString( nExtStep * dSnapStep / 10) + " ) * ( i + 10), 0, -" + ToString( nExtStep * dSnapStep) + "),") ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString( nExtStep * dSnapStep) + " - ( " + ToString( nExtStep * dSnapStep / 10) + " ) * ( i + 10), 0, " + ToString( nExtStep * dSnapStep) + ")") ;
|
|
m_Writer.OutText( " );") ;
|
|
m_Writer.OutText( " line = new THREE.Line(LineGeometry, LineMaterial);") ;
|
|
m_Writer.OutText( " scene.add(line);") ;
|
|
m_Writer.OutText( " }") ;
|
|
// codice per sistema di riferimento
|
|
m_Writer.OutText( " var xdir = new THREE.Vector3(0,0,1);");
|
|
m_Writer.OutText( " xdir.normalize()") ;
|
|
m_Writer.OutText( " var origin = new THREE.Vector3(0,0,0);") ;
|
|
m_Writer.OutText( " var length = " + ToString( nExtStep * dSnapStep) + ";") ;
|
|
m_Writer.OutText( " var hex = 0xff0000;") ;
|
|
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(xdir, origin, length, hex, 0, 0);") ;
|
|
m_Writer.OutText( " scene.add(arrowHelper);") ;
|
|
m_Writer.OutText( " var ydir = new THREE.Vector3(1,0,0);") ;
|
|
m_Writer.OutText( " ydir.normalize()") ;
|
|
m_Writer.OutText( " var origin = new THREE.Vector3(0,0,0);") ;
|
|
m_Writer.OutText( " var length = " + ToString( nExtStep * dSnapStep) + ";") ;
|
|
m_Writer.OutText( " var hex = 0x006600;") ;
|
|
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(ydir, origin, length, hex, 0, 0);") ;
|
|
m_Writer.OutText( " scene.add(arrowHelper);") ;
|
|
m_Writer.OutText( " var zdir = new THREE.Vector3(0,1,0);") ;
|
|
m_Writer.OutText( " zdir.normalize()") ;
|
|
m_Writer.OutText( " var origin = new THREE.Vector3(0,0,0);") ;
|
|
m_Writer.OutText( " var length = " + ToString( nExtStep * dSnapStep / 100) + ";") ;
|
|
m_Writer.OutText( " var hex = 0x0000ff;") ;
|
|
m_Writer.OutText( " var arrowHelper = new THREE.ArrowHelper(zdir, origin, length, hex, 0, 0);") ;
|
|
m_Writer.OutText( " scene.add(arrowHelper);") ;
|
|
// codice per telecamera
|
|
// --- m_Writer.OutText( " var orbitControls = new THREE.OrbitControls(camera, document.getElementById('WebGL-output'), " + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + ", zoom);") ; <---- original
|
|
m_Writer.OutText( " var orbitControls = new OrbitControls(camera, document.getElementById('WebGL-output'));") ;
|
|
// --- m_Writer.OutText( " orbitControls.autoRotate = false;") ; <---- original
|
|
m_Writer.OutText( " orbitControls.autoRotate = true;") ;
|
|
m_Writer.OutText(" var controlsGizmo = new OrbitControlsGizmo(orbitControls, {size: 100, padding : 8, distance: dist});") ;
|
|
m_Writer.OutText( " var clock = new THREE.Clock();") ;
|
|
m_Writer.OutText( " var planeGeometry = new THREE.PlaneGeometry(200, 200, 1, 1);") ;
|
|
m_Writer.OutText( " var planeMaterial = new THREE.MeshLambertMaterial({ color: 0xFDFEFE, transparent : true, opacity : 0.4 });") ;
|
|
m_Writer.OutText( " var plane = new THREE.Mesh(planeGeometry, planeMaterial);") ;
|
|
m_Writer.OutText( " plane.rotation.x = -0.5 * Math.PI; plane.position.x = 0; plane.position.y = -0.1; plane.position.z = 0;") ;
|
|
m_Writer.OutText( " plane.receiveShadow = false;");
|
|
m_Writer.OutText( " spotLight1.target = plane;") ;
|
|
m_Writer.OutText( " var list_of_objects = [];") ;
|
|
|
|
// ================================================================
|
|
// CREAZIONE PARTE INIZIALE DEL MENU ==============================
|
|
// ================================================================
|
|
m_WriterM.OutText( "<!DOCTYPE html>") ;
|
|
m_WriterM.OutText( "<html>") ;
|
|
m_WriterM.OutText( " <head>" ) ;
|
|
// libreria per Bootstrap
|
|
m_WriterM.OutText( " <link rel = 'stylesheet' href = 'https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css'/>") ;
|
|
m_WriterM.OutText( " <link rel = 'stylesheet' href = 'https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css'/>") ;
|
|
m_WriterM.OutText( " <link href = 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css' rel = 'stylesheet'>") ;
|
|
m_WriterM.OutText( " <script src = 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js'></script>") ;
|
|
m_WriterM.OutText( " <script src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js'></script>") ;
|
|
m_WriterM.OutText( " <style>") ;
|
|
m_WriterM.OutText( " .list-group-item-action:hover{") ;
|
|
m_WriterM.OutText( " background-color: white;") ;
|
|
m_WriterM.OutText( " }") ;
|
|
m_WriterM.OutText( " .list-group-item{") ;
|
|
m_WriterM.OutText( " background-color: white;") ;
|
|
m_WriterM.OutText( " }") ;
|
|
m_WriterM.OutText( " </style>") ;
|
|
m_WriterM.OutText( " <script type = 'text/Javascript'>") ;
|
|
m_WriterM.OutText( " $(document).ready(function() {") ;
|
|
m_WriterM.OutText( " $('#listSearch').on('keyup', function() {") ;
|
|
m_WriterM.OutText( " var value = $(this).val().toLowerCase();") ;
|
|
m_WriterM.OutText( " $('ol').filter(function() {") ;
|
|
m_WriterM.OutText( " $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)") ;
|
|
m_WriterM.OutText( " });") ;
|
|
m_WriterM.OutText( " });") ;
|
|
m_WriterM.OutText( " });") ;
|
|
m_WriterM.OutText( " </script>") ;
|
|
m_WriterM.OutText( " </head>") ;
|
|
m_WriterM.OutText( " <body class = 'bg-light'>") ;
|
|
m_WriterM.OutText( "") ;
|
|
m_WriterM.OutText( " <div class = 'container mt-3 border-0 bg-light'>") ;
|
|
m_WriterM.OutText( "") ;
|
|
m_WriterM.OutText( " <div class = 'input-group mb-3'>") ;
|
|
m_WriterM.OutText( " <div class = 'input-group-prepend'>") ;
|
|
m_WriterM.OutText( " <span class = 'input-group-text' id = 'basic-addon1'>") ;
|
|
m_WriterM.OutText( " <i class = 'bi bi-search fas fa-search'></i>") ;
|
|
m_WriterM.OutText( " </span>") ;
|
|
m_WriterM.OutText( " </div>") ;
|
|
m_WriterM.OutText( " <input type = 'text' class = 'form-control' placeholder = 'Search...' aria-label = 'Username' aria-describedby = 'basic-addon1' id='listSearch'>") ;
|
|
m_WriterM.OutText( " </div>") ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::FinishAmbient()
|
|
{
|
|
|
|
/*
|
|
ORGANIZZAZIONE DELLA SCENA
|
|
- renderizzo prima le mesh trasparenti ordinate per distanza decrescente
|
|
- renderizzo tutti gli altri oggetti
|
|
*/
|
|
|
|
// aggiungo alla lista di oggetti le mesh trasparenti riordinandole per distanza
|
|
// renderizzo prima le mesh (facce) lontane
|
|
|
|
m_lTranspSurf.sort([]( const sSurfDist& a, const sSurfDist& b) { return a.dDistance > b.dDistance; }) ;
|
|
|
|
//scorro le superfici trasparenti
|
|
for ( sSurfDist sCurrSurvDist : m_lTranspSurf)
|
|
{
|
|
m_Writer.OutText( " // ---------------------------------------------------------------------") ;
|
|
// aggiungo le mesh trasparenti alla mia lista di oggetti e alla scena (front e back)
|
|
m_Writer.OutText( " list_of_objects.push(front_surf_mesh" + sCurrSurvDist.sName + ");") ;
|
|
m_Writer.OutText( " list_of_objects.push(back_surf_mesh" + sCurrSurvDist.sName + ");") ;
|
|
}
|
|
|
|
// carico il gruppo radice
|
|
// carico nella scena tutti gli oggetti
|
|
m_Writer.OutText( " for (var i = 0; i < list_of_objects.length; i++)") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " scene.add(list_of_objects[i])") ;
|
|
m_Writer.OutText( " };");
|
|
|
|
// controllo menu Gui
|
|
m_Writer.OutText( " var center;") ;
|
|
m_Writer.OutText( " var boxCreated = false;") ;
|
|
m_Writer.OutText( " var box;") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " /*") ;
|
|
m_Writer.OutText( " const helper = new THREE.CameraHelper( camera );") ;
|
|
m_Writer.OutText( " scene.add( helper );") ;
|
|
m_Writer.OutText( " */") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " var controls = {") ;
|
|
m_Writer.OutText( " element: null,") ;
|
|
m_Writer.OutText( " motion : true,") ;
|
|
m_Writer.OutText( " tar : orbitControls.target,") ;
|
|
m_Writer.OutText( " reset : function() {") ;
|
|
m_Writer.OutText( " zoom = 1;") ;
|
|
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + ", " + ToString( m_dHalfWidth) + ", " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_ZNear) + ", " + ToString( m_ZFar) + ");") ;
|
|
m_Writer.OutText( " camera.position.x = " + ToString( m_ptCamera.y) + ";") ;
|
|
m_Writer.OutText( " camera.position.y = " + ToString( m_ptCamera.z) + ";") ;
|
|
m_Writer.OutText( " camera.position.z = " + ToString( m_ptCamera.x) + ";") ;
|
|
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + "));") ;
|
|
m_Writer.OutText( " orbitControls = new OrbitControls(camera, document.getElementById('WebGL-output'));") ;
|
|
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " document.getElementsByClassName('obit-controls-gizmo')[0].remove();") ;
|
|
m_Writer.OutText( " controlsGizmo = new OrbitControlsGizmo(orbitControls, { size: 100, padding : 8 });") ;
|
|
m_Writer.OutText( " document.body.appendChild(controlsGizmo.domElement);") ;
|
|
m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchmove', false);") ;
|
|
m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchstart', false);") ;
|
|
m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchend', false);") ;
|
|
m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchcancel', false);") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " if (boxCreated) {") ;
|
|
m_Writer.OutText( " box = new THREE.BoxHelper(controls.element, 0xff0000);") ;
|
|
m_Writer.OutText( " camera.position.y = " + ToString( m_ptMin.y + ( m_dimZ * 1.1)) + ";") ; //115%
|
|
m_Writer.OutText( " var center = box.geometry.boundingSphere.center;") ;
|
|
m_Writer.OutText( " orbitControls.target = center;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " },") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " }") ;
|
|
|
|
// Cerco il parametro dall'url del gruppo da selezionare
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " // Lettura Parametri -------------- url -------") ;
|
|
m_Writer.OutText( " const queryString = window.location.search;") ;
|
|
m_Writer.OutText( " if (queryString != '') {") ;
|
|
m_Writer.OutText( " const urlParams = new URLSearchParams(queryString);") ;
|
|
m_Writer.OutText( " const element = urlParams.get('id')") ;
|
|
//m_Writer.OutText( " element = element.normalize('NFD').replace(/[\u0300-\u036f]/g, '') ") ;
|
|
m_Writer.OutText( " findGroupByNameAndId(groupRoot, element);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " // --------------------------------------------") ;
|
|
|
|
|
|
// funzione per ricavare un gruppo dato l'ID (name + ID)
|
|
m_Writer.OutText( "" );
|
|
m_Writer.OutText( " function findGroupByNameAndId(CurrentGroup, Id) {") ;
|
|
m_Writer.OutText( " CurrentGroup.children.forEach(element => {") ;
|
|
m_Writer.OutText( " if (element.name == Id) {") ;
|
|
// --- m_Writer.OutText( " ScanElements(element, true);") ; <---- original
|
|
m_Writer.OutText( " // creo il box per telecamera -----") ;
|
|
m_Writer.OutText( " controls.element = element;") ;
|
|
m_Writer.OutText( " createBox(element);") ;
|
|
m_Writer.OutText( " // ----------------------------------") ;
|
|
m_Writer.OutText( " EvidenziaLoadPage(element);") ;
|
|
m_Writer.OutText( " trovato = true;");
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " if (element.children.length != 0) {") ;
|
|
m_Writer.OutText( " findGroupByNameAndId(element, Id);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " });") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " // --------------------------------------------") ;
|
|
m_Writer.OutText( "") ;
|
|
|
|
// funzione per ricavare il gruppo selezionato dal menu
|
|
// --- m_Writer.OutText( " selectElement = function(val) {") ;
|
|
// --- m_Writer.OutText(" ScanElements(val, true);");
|
|
// --- m_Writer.OutText( " }") ;
|
|
|
|
// funzione per creare il box al gruppo selezionato
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " function createBox(element) {") ;
|
|
m_Writer.OutText( " var box = new THREE.BoxHelper(element, 0xff0000);") ;
|
|
m_Writer.OutText( " camera.position.y = " + ToString(m_ptMin.y + (m_dimZ * 1.1))+ ";") ; //115%
|
|
m_Writer.OutText( " var center = box.geometry.boundingSphere.center;") ;
|
|
m_Writer.OutText( " orbitControls.target = center;") ;
|
|
m_Writer.OutText(" controls.tar.x = center.x;") ;
|
|
m_Writer.OutText(" controls.tar.y = center.y;") ;
|
|
m_Writer.OutText(" controls.tar.z = center.z;") ;
|
|
m_Writer.OutText(" boxCreated = true;") ;
|
|
m_Writer.OutText(" }");
|
|
m_Writer.OutText(" // --------------------------------------------");
|
|
m_Writer.OutText( "") ;
|
|
|
|
// creazione del menu Gui
|
|
m_Writer.OutText( " var gui = new dat.GUI({ width: 200 });") ;
|
|
m_Writer.OutText( " gui.add(controls, 'motion').name('Rotation');") ;
|
|
m_Writer.OutText( " gui.add(controls, 'reset').name('Reset camera');") ;
|
|
m_Writer.OutText( " document.getElementsByClassName('dg main a')[0].style.marginRight = '0px';") ;
|
|
m_Writer.OutText(" // --------------------------------------------") ;
|
|
|
|
// funzione per evidenziare un gruppo selezionato (per timer) 0xFBF719
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " function EnlightGroup(SelGroup) {") ;
|
|
m_Writer.OutText( " if (SelGroup !== null) {");
|
|
m_Writer.OutText( " SelGroup.children.forEach(element => {") ;
|
|
m_Writer.OutText( " if (!(element instanceof THREE.Group)) {") ;
|
|
m_Writer.OutText( " if (element instanceof THREE.Line) { //linea") ;
|
|
m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else if (element instanceof THREE.Mesh) { //mesh") ;
|
|
m_Writer.OutText( " element.material.color = new THREE.Color(0x00ff00);") ;
|
|
m_Writer.OutText( " element.material.emissive = new THREE.Color(0xFBF719);") ;
|
|
m_Writer.OutText( " element.material.emissiveIntensity = 1.2;") ;
|
|
m_Writer.OutText( " 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(0xFBF719);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else if (element instanceof THREE.Vector3) { //vettore") ;
|
|
m_Writer.OutText( " element.line.material.color = new THREE.Color(0xFBF719);") ;
|
|
m_Writer.OutText( " element.cone.material.color = new THREE.Color(0xFBF719);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else if (element instanceof THREE.Object3D) { //frame") ;
|
|
m_Writer.OutText( " element.line.material.color = new THREE.Color(0xFBF719);") ;
|
|
m_Writer.OutText( " element.cone.material.color = new THREE.Color(0xFBF719);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else {") ;
|
|
m_Writer.OutText( " EnlightGroup(element);") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " });") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " // --------------------------------------------") ;
|
|
m_Writer.OutText( "") ;
|
|
|
|
// funzione per riportare il colore del gruppo selezionato a quello originale (per timer)
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " function GetColorBack(SelGroup) {") ;
|
|
m_Writer.OutText( " if (SelGroup !== null) {") ;
|
|
m_Writer.OutText( " SelGroup.children.forEach(element => {") ;
|
|
m_Writer.OutText( " if (!(element instanceof THREE.Group)) {") ;
|
|
m_Writer.OutText( " if (element instanceof THREE.Line) { //linea") ;
|
|
m_Writer.OutText( " element.material.color = element.material.oldColor;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else if (element instanceof THREE.Mesh) { //mesh") ;
|
|
m_Writer.OutText( " element.material.color = element.material.oldColor;") ;
|
|
m_Writer.OutText( " element.material.emissive = new THREE.Color(0x000000);") ;
|
|
m_Writer.OutText( " element.material.emissiveIntensity = 1;") ;
|
|
m_Writer.OutText( " 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( " }") ;
|
|
m_Writer.OutText( " // --------------------------------------------") ;
|
|
m_Writer.OutText( "") ;
|
|
|
|
// funzione per tenere evidenziato il gruppo selezionato (funzione con il timer)
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " function EvidenziaLoadPage(ChoosenGroup) {") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " if (ChoosenGroup === null) {") ;
|
|
m_Writer.OutText( " return;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " var i = 0;") ;
|
|
m_Writer.OutText( " var YellowSet = false;") ;
|
|
m_Writer.OutText( " var OrigColSet = false;") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " function animation() {") ;
|
|
m_Writer.OutText( " var timer = setTimeout(function() {") ;
|
|
m_Writer.OutText( " i++;") ;
|
|
m_Writer.OutText( " //console.log(i); //delete it") ;
|
|
m_Writer.OutText( " if (!YellowSet && i < 10)") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " // coloro di giallo !!!") ;
|
|
m_Writer.OutText( " EnlightGroup(ChoosenGroup);") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " YellowSet = true;") ;
|
|
m_Writer.OutText( " OrigColSet = false;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else if (!OrigColSet && (i >= 10 && i < 20))") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " // riporto i colori originali ") ;
|
|
m_Writer.OutText( " GetColorBack(ChoosenGroup);") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " YellowSet = false;") ;
|
|
m_Writer.OutText( " OrigColSet = true;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " else if (i == 20)") ;
|
|
m_Writer.OutText( " {") ;
|
|
m_Writer.OutText( " i = 0;") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " animation();") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " }, 25); //1.5 seconds test") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " animation(); // prima chimata") ;
|
|
m_Writer.OutText( "") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " // --------------------------------------------") ;
|
|
m_Writer.OutText( "") ;
|
|
|
|
// funzione per riportare il colore del gruppo selezionato a quello originale
|
|
// --- m_Writer.OutText(" GetColorBack = function(SelGroup) {") ;
|
|
// --- m_Writer.OutText(" if (SelGroup != = null) {") ;
|
|
// --- m_Writer.OutText(" SelGroup.children.forEach(element => {") ;
|
|
// --- m_Writer.OutText(" if (!(element instanceof THREE.Group)) {") ;
|
|
// --- m_Writer.OutText(" if (element instanceof THREE.Line) { //linea") ;
|
|
// --- m_Writer.OutText(" element.material.color = element.material.oldColor;") ;
|
|
// --- m_Writer.OutText(" }") ;
|
|
// --- m_Writer.OutText(" else if (element instanceof THREE.Mesh) { //mesh") ;
|
|
// --- m_Writer.OutText(" element.material.color = element.material.oldColor;");
|
|
// --- m_Writer.OutText(" }") ;
|
|
// --- m_Writer.OutText(" else if (element instanceof THREE.Points) { //punto");
|
|
// --- m_Writer.OutText(" element.material.color = element.material.oldColor;");
|
|
// --- m_Writer.OutText(" }");
|
|
// --- m_Writer.OutText(" else if (element instanceof THREE.Vector3) { //vettore");
|
|
// --- m_Writer.OutText(" element.line.material.color = element.oldColor;");
|
|
// --- m_Writer.OutText(" element.cone.material.color = element.oldColor;");
|
|
// --- m_Writer.OutText(" }");
|
|
// --- m_Writer.OutText(" else if (element instanceof THREE.Object3D) { //frame");
|
|
// --- m_Writer.OutText(" element.line.material.color = element.oldColor;");
|
|
// --- m_Writer.OutText(" element.cone.material.color = element.oldColor;");
|
|
// --- m_Writer.OutText(" }");
|
|
// --- m_Writer.OutText(" }");
|
|
// --- m_Writer.OutText(" else {");
|
|
// --- m_Writer.OutText(" GetColorBack(element);");
|
|
// --- m_Writer.OutText(" }");
|
|
// --- m_Writer.OutText(" });");
|
|
// --- m_Writer.OutText(" };");
|
|
// --- m_Writer.OutText(" }");
|
|
|
|
// funzione per evidenziare gli elementi dei un gruppo
|
|
// ---m_Writer.OutText( " ScanElements = function(SelGroup, c) {") ;
|
|
// ---m_Writer.OutText( " if(c){") ;
|
|
// ---m_Writer.OutText( " if (!first) {") ;
|
|
// ---m_Writer.OutText( " GetColorBack(LastGroupSelected);") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
// ---m_Writer.OutText( " first = false;") ;
|
|
// ---m_Writer.OutText( " LastGroupSelected = SelGroup;") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
// ---m_Writer.OutText( " SelGroup.children.forEach(element => {") ;
|
|
// ---m_Writer.OutText( " if (!(element instanceof THREE.Group)) {") ;
|
|
// ---m_Writer.OutText( " if (element instanceof THREE.Line) { //linea") ;
|
|
// ---m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
// ---m_Writer.OutText( " else if (element instanceof THREE.Mesh) { //mesh") ;
|
|
// ---m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
// ---m_Writer.OutText( " else if (element instanceof THREE.Points) { //punto") ;
|
|
// ---m_Writer.OutText( " element.material.color = new THREE.Color(0xFBF719);") ;
|
|
// ---m_Writer.OutText( " }");
|
|
// ---m_Writer.OutText( " else if (element instanceof THREE.Vector3) { //vettore") ;
|
|
// ---m_Writer.OutText( " element.line.material.color = new THREE.Color(0xFBF719);") ;
|
|
// ---m_Writer.OutText( " element.cone.material.color = new THREE.Color(0xFBF719);") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
// ---m_Writer.OutText( " else if (element instanceof THREE.Object3D) { //frame") ;
|
|
// ---m_Writer.OutText( " element.line.material.color = new THREE.Color(0xFBF719);") ;
|
|
// ---m_Writer.OutText( " element.cone.material.color = new THREE.Color(0xFBF719);") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
// ---m_Writer.OutText( " else {") ;
|
|
// ---m_Writer.OutText( " ScanElements(element, false);") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
// ---m_Writer.OutText( " });") ;
|
|
// ---m_Writer.OutText( " }") ;
|
|
|
|
// funzione render per la scena
|
|
m_Writer.OutText( " function renderScene() {") ;
|
|
//m_Writer.OutText( "const div = document.getElementById('zoom_test');"); // div per controllo parametri
|
|
//m_Writer.OutText( "div.textContent = " + ToString( m_dDistance) +";") ; // div per controllo parametri
|
|
|
|
m_Writer.OutText( " var delta = clock.get") ;
|
|
m_Writer.OutText( " orbitControls.update(zoom, " + ToString( m_dHalfWidth/2)+ ", " + ToString( m_dHalfHeight/2) + ");") ; // aggiornamento telecamera
|
|
// --- m_Writer.OutText( " camera.zoom = zoom;") ; <---- original
|
|
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
|
m_Writer.OutText( " camera.zoom = zoom + orbitControls.ComputedZoom - 1;") ;
|
|
m_Writer.OutText( " camera.updateProjectionMatrix();") ; // aggiornamento matrice di proiezione su piano Near di clipping
|
|
m_Writer.OutText( " requestAnimationFrame(renderScene);") ;
|
|
m_Writer.OutText( " renderer.render(scene, camera);") ;
|
|
m_Writer.OutText( " }") ;
|
|
|
|
// aggiungo il canvas alla pagina html con la mia scena
|
|
m_Writer.OutText( " document.getElementById('WebGL-output').appendChild(renderer.domElement);") ;
|
|
m_Writer.OutText( " document.body.appendChild(controlsGizmo.domElement);") ;
|
|
m_Writer.OutText( " renderScene();") ;
|
|
m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchmove', false);") ;
|
|
m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchstart', false);") ;
|
|
m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchend', false);") ;
|
|
m_Writer.OutText( " $('.obit-controls-gizmo').bind('touchcancel', false);") ;
|
|
m_Writer.OutText( " }") ;
|
|
|
|
// funzione resize della pagina
|
|
m_Writer.OutText( " function onResize() {") ;
|
|
m_Writer.OutText( " camera.aspect = window.innerWidth / window.innerHeight;") ;
|
|
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
|
m_Writer.OutText( " renderer.setSize(window.innerWidth, window.innerHeight);") ;
|
|
m_Writer.OutText( " }") ;
|
|
|
|
//funzione per lo zoom della pagina
|
|
m_Writer.OutText( " function zoomView(){") ;
|
|
m_Writer.OutText( " zoom += event.wheelDeltaY * 0.00025;") ;
|
|
m_Writer.OutText( " zoom = Math.max( Math.min( zoom, 10000000 ), 0.00000001);") ;
|
|
m_Writer.OutText( " };") ;
|
|
|
|
// richiamo della funzione init() e dichiarazione degli eventi in javascript per controllo della scena
|
|
m_Writer.OutText( " window.onload = init") ;
|
|
// m_Writer.OutText( " window.addEventListener('resize', onResize, false);") ;
|
|
m_Writer.OutText( " window.addEventListener('wheel', zoomView, false);") ;
|
|
m_Writer.OutText( " </script>") ;
|
|
m_Writer.OutText( " </body>") ;
|
|
m_Writer.OutText( "</html>") ;
|
|
|
|
|
|
|
|
// Termino scrittura del File del Menu
|
|
m_WriterM.OutText( " </body>") ;
|
|
m_WriterM.OutText( "</html>") ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
GetColor( const Color& Ccol, string& sHexCol)
|
|
{
|
|
// ottengo i codici R,G e B dei materiali
|
|
int iRedColor = Ccol.GetIntRed() ;
|
|
int iGreenColor = Ccol.GetIntGreen() ;
|
|
int iBlueColor = Ccol.GetIntBlue() ;
|
|
char chexColor[9] ;
|
|
|
|
// imposto il colore di Default o ricavo il corrispondente codice in esadecimale
|
|
std::snprintf( chexColor, sizeof chexColor, "0x%02x%02x%02x", iRedColor, iGreenColor, iBlueColor) ;
|
|
sHexCol = chexColor ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::ExportObject( const IGdbIterator& iIter, IGeomDB* pGDB, const int nGroupCount)
|
|
{
|
|
|
|
// recupero il livello dell'oggetto
|
|
int nLev = GDB_LV_USER;
|
|
iIter.GetCalcLevel(nLev);
|
|
// recupero il modo dell'oggetto
|
|
int nMode = GDB_MD_STD;
|
|
iIter.GetCalcMode(nMode);
|
|
// recupero lo stato dell'oggetto
|
|
int nStat = GDB_ST_ON;
|
|
iIter.GetCalcStatus(nStat);
|
|
|
|
if (TestFilter(nLev, nMode, nStat)) {
|
|
switch (iIter.GetGdbType()) {
|
|
case GDB_TY_GEO:
|
|
{
|
|
// recupero l'oggetto geometrico
|
|
const IGeoObj* pGeoObj = iIter.GetGeoObj();
|
|
if (pGeoObj == nullptr)
|
|
return true;
|
|
|
|
// recupero il riferimento globale dell'oggetto
|
|
Frame3d frFrame;
|
|
if (!iIter.GetGlobFrame(frFrame))
|
|
return false;
|
|
|
|
// se il filtro lo abilita
|
|
//if (TestFilter(nLev, nMode, nStat))
|
|
//{
|
|
// recupero eventuale nome
|
|
string sName;
|
|
if (!iIter.GetName(sName))
|
|
sName = ToString(iIter.GetId());
|
|
// colore oggetto
|
|
if (sName != "Box" && sName != "box")
|
|
{
|
|
Color cCol;
|
|
int nIndex;
|
|
bool bColorSpot = false;
|
|
iIter.GetMaterial(nIndex);
|
|
|
|
if (nIndex == GDB_MT_COLOR)
|
|
iIter.GetMaterial(cCol);
|
|
else
|
|
{
|
|
PtrOwner<IGdbIterator> iIterNew(CreateGdbIterator(pGDB));
|
|
int nParendID = iIter.GetParentId();
|
|
int nMaterialID;
|
|
while (!bColorSpot)
|
|
{
|
|
iIterNew->GoTo(nParendID);
|
|
if (iIterNew->GetMaterial(nMaterialID) && nMaterialID == GDB_MT_COLOR)
|
|
{
|
|
iIterNew->GetMaterial(cCol);
|
|
bColorSpot = true;
|
|
}
|
|
|
|
nParendID = iIterNew->GetParentId();
|
|
}
|
|
}
|
|
|
|
// emetto l'oggetto
|
|
|
|
switch ( pGeoObj->GetType()) {
|
|
case GEO_VECT3D: // vettore
|
|
if ( ! ExportVector3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case GEO_PNT3D: // punto
|
|
if ( ! ExportPoint3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case GEO_FRAME3D: // frame 3D
|
|
if ( ! ExportFrame3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case CRV_LINE: // linee rette
|
|
if ( ! ExportLine3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case CRV_ARC: // archi
|
|
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case CRV_COMPO: // curve composite
|
|
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case CRV_BEZIER: // curve di Bezier
|
|
if ( ! ExportCurveComp3D( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case SRF_TRIMESH: // superfici trimesh
|
|
if ( ! ExportSTM( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case SRF_FLATRGN: // flat region
|
|
if ( ! ExportSFR( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case SRF_BEZIER: // superfici di Bezier
|
|
if ( ! ExportSBezier( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case EXT_TEXT: // testi
|
|
if ( ! ExportText( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
case EXT_DIMENSION: // dimensione oggetti
|
|
if ( ! ExportDimension( ToString( iIter.GetId()), pGeoObj, frFrame, cCol, nGroupCount))
|
|
return false ;
|
|
break ;
|
|
default:
|
|
break ;
|
|
}
|
|
}
|
|
//}
|
|
}
|
|
return true ;
|
|
case GDB_TY_GROUP:
|
|
// esploro il gruppo
|
|
return ScanGroup( iIter, pGDB, nGroupCount);
|
|
default:
|
|
return false ;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::ExportVector3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
|
|
{
|
|
// prelevo il vettore (vettore stesso e punto di applicazione) e il suo colore
|
|
const IGeoVector3d* pVEC = GetGeoVector3d( pGeoObj) ;
|
|
if ( pVEC == nullptr)
|
|
return false ;
|
|
|
|
Vector3d vVec = pVEC->GetVector() ;
|
|
Point3d ptVec = pVEC->GetBase() ;
|
|
string sHexCol ;
|
|
GetColor( Ccol, sHexCol) ;
|
|
|
|
// porto il vettore in coordinate ThreeJS
|
|
vVec.ToGlob( frFrame) ;
|
|
ptVec.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
|
|
|
// scrivo il vettore
|
|
m_Writer.OutText( " var vettore" + sName + " = new THREE.Vector3(" + ToString(vVec.y) + ", " + ToString(vVec.z) + ", " + ToString(vVec.x) + ")") ;
|
|
m_Writer.OutText( " vettore" + sName + ".normalize();") ;
|
|
m_Writer.OutText( " var origin = new THREE.Vector3(" + ToString(ptVec.x) + ", " + ToString(ptVec.y) + ", " + ToString(ptVec.z) + ")") ;
|
|
m_Writer.OutText( " var length = " + ToString(vVec.Len()) + ";") ;
|
|
m_Writer.OutText( " var hex = " + sHexCol +";") ;
|
|
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(vettore" + sName + ", origin, length, hex);") ;
|
|
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ; //salvataggio colore per selezione
|
|
m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ;
|
|
|
|
// aggiungo il vettore al suo gruppo di appartenenza
|
|
if ( nGroupCount != -1)
|
|
m_Writer.OutText( " group" + ToString(nGroupCount) + ".children.push(arrowHelper" + sName + ")") ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::ExportLine3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
|
|
{
|
|
// prelevo la Linea retta (punto iniziale e punto finale) e il suo colore
|
|
const ICurveLine* pLINE = GetCurveLine( pGeoObj) ;
|
|
if ( pLINE == nullptr)
|
|
return false ;
|
|
|
|
Point3d pStartP = pLINE->GetStart() ;
|
|
Point3d pEndP = pLINE->GetEnd() ;
|
|
|
|
// porto i punti in coordinate ThreeJS
|
|
pStartP.LocToLoc(frFrame, m_frTHREEJSFrame) ;
|
|
pEndP.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
|
string sHexCol ;
|
|
GetColor( Ccol, sHexCol) ;
|
|
|
|
// scrivo la linea
|
|
m_Writer.OutText( " const line_material" + sName + " = new THREE.LineBasicMaterial({ color: " + sHexCol + " });") ;
|
|
m_Writer.OutText( " line_material" + sName + ".oldColor = new THREE.Color(" + sHexCol + ")") ;
|
|
m_Writer.OutText( " var line_geometry" + sName + " = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " line_geometry" + sName +".vertices.push(") ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString(pStartP.x) + "," + ToString(pStartP.y) + "," + ToString(pStartP.z) + "),") ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString(pEndP.x) + "," + ToString(pEndP.y) + "," + ToString(pEndP.z) + "));") ;
|
|
m_Writer.OutText( " var line" + sName + " = new THREE.Line(line_geometry" + sName +",line_material" + sName + ");") ;
|
|
m_Writer.OutText( " list_of_objects.push(line" + sName + ");") ;
|
|
|
|
// aggiungo la linea al suo gruppo di appartenenza
|
|
if ( nGroupCount != -1)
|
|
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(line" + sName + ")") ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::ExportPoint3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
|
|
{
|
|
// prelevo il punto e il suo colore
|
|
const IGeoPoint3d* pPoint = GetGeoPoint3d( pGeoObj) ;
|
|
if ( pPoint == nullptr)
|
|
return false ;
|
|
|
|
Point3d ptPoint = pPoint->GetPoint() ;
|
|
// porto il punto in coordinate ThreeJS
|
|
ptPoint.LocToLoc(frFrame, m_frTHREEJSFrame) ;
|
|
string sHexCol ;
|
|
GetColor( Ccol, sHexCol) ;
|
|
|
|
// scrivo il punto
|
|
m_Writer.OutText( " var dotGeometry" + sName + " = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " dotGeometry" + sName + ".vertices.push(new THREE.Vector3( " + ToString(ptPoint.x) + ", " + ToString(ptPoint.y) + ", " + ToString(ptPoint.z) + "));") ;
|
|
m_Writer.OutText( " var dotMaterial" + sName +" = new THREE.PointsMaterial( { size: 5, sizeAttenuation: false, color: " + sHexCol +" } );") ;
|
|
m_Writer.OutText( " dotMaterial" + sName + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
|
|
m_Writer.OutText( " var dot" + sName + " = new THREE.Points( dotGeometry" + sName +", dotMaterial" + sName +" );") ;
|
|
m_Writer.OutText( " list_of_objects.push(dot" + sName + ");") ;
|
|
|
|
// aggiungo il punto al suo gruppo di appartenenza
|
|
if (nGroupCount != -1)
|
|
m_Writer.OutText(" group" + ToString(nGroupCount) + ".children.push(dot" + sName + ")") ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::ExportFrame3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
|
|
{
|
|
// prelevo il frame (punto di applicazione e 3 versori) e i suoi colori
|
|
const IGeoFrame3d* pFrame = GetGeoFrame3d( pGeoObj);
|
|
if ( pFrame == nullptr)
|
|
return false ;
|
|
|
|
Frame3d frCurrentFrame = pFrame->GetFrame();
|
|
// porto il punto in coordinate ThreeJS
|
|
frCurrentFrame.ToGlob( frFrame) ;
|
|
string sHexCol;
|
|
GetColor( Ccol, sHexCol);
|
|
|
|
Point3d ptOrig = frCurrentFrame.Orig() ;
|
|
ptOrig.LocToLoc(frFrame, m_frTHREEJSFrame);
|
|
|
|
Vector3d vx = frCurrentFrame.VersZ() ;
|
|
Vector3d vy = frCurrentFrame.VersX() ;
|
|
Vector3d vz = frCurrentFrame.VersY() ;
|
|
|
|
// scrivo i 3 vettori
|
|
// x
|
|
m_Writer.OutText( " var xdir" + sName + " = new THREE.Vector3(" + ToString(vx.x) + ", " + ToString(vx.y) + ", " + ToString(vx.z) + ");") ;
|
|
m_Writer.OutText( " xdir" + sName + ".normalize()") ;
|
|
m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString(ptOrig.x) + ", " + ToString(ptOrig.y) + ", " + ToString(ptOrig.z)+ ");") ;
|
|
m_Writer.OutText( " var length = 25;") ;
|
|
m_Writer.OutText( " var hex = 0xff0000;") ;
|
|
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(xdir" + sName + ", origin" + sName + ", length, hex);") ;
|
|
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);") ;
|
|
m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ;
|
|
|
|
// aggiungo il vettore al suo gruppo di appartenenza
|
|
if (nGroupCount != -1)
|
|
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(arrowHelper" + sName + ")");
|
|
|
|
// y
|
|
m_Writer.OutText( " var ydir" + sName + " = new THREE.Vector3(" + ToString( vy.x) + ", " + ToString( vy.y) + ", " + ToString( vy.z) + ");") ;
|
|
m_Writer.OutText( " ydir" + sName + ".normalize()") ;
|
|
m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z) + ");") ;
|
|
m_Writer.OutText( " var length = 25;") ;
|
|
m_Writer.OutText( " var hex = 0x00ff00;") ;
|
|
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(ydir" + sName + ", origin" + sName + ", length, hex);") ;
|
|
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);");
|
|
m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ;
|
|
|
|
// aggiungo il vettore al suo gruppo di appartenenza
|
|
if (nGroupCount != -1)
|
|
m_Writer.OutText(" group" + ToString(nGroupCount) + ".children.push(arrowHelper" + sName + ")");
|
|
|
|
// z
|
|
m_Writer.OutText( " var zdir" + sName + " = new THREE.Vector3(" + ToString( vz.x) + ", " + ToString( vz.y) + ", " + ToString( vz.z) + ");") ;
|
|
m_Writer.OutText( " zdir" + sName + ".normalize()") ;
|
|
m_Writer.OutText( " var origin" + sName + " = new THREE.Vector3(" + ToString( ptOrig.x) + ", " + ToString( ptOrig.y) + ", " + ToString( ptOrig.z) + ");") ;
|
|
m_Writer.OutText( " var length = 25;") ;
|
|
m_Writer.OutText( " var hex = 0x0000ff;") ;
|
|
m_Writer.OutText( " var arrowHelper" + sName + " = new THREE.ArrowHelper(zdir" + sName + ", origin" + sName + ", length, hex);") ;
|
|
m_Writer.OutText( " arrowHelper" + sName + ".oldColor = new THREE.Color(hex);");
|
|
m_Writer.OutText( " list_of_objects.push(arrowHelper" + sName + ");") ;
|
|
|
|
// aggiungo il vettore al suo gruppo di appartenenza
|
|
if (nGroupCount != -1)
|
|
m_Writer.OutText(" group" + ToString(nGroupCount) + ".children.push(arrowHelper" + sName + ")");
|
|
|
|
return true ;
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::ExportCurveComp3D( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
|
|
{
|
|
// prelevo la curva composita e il suo colore
|
|
const ICurve* pCurve = GetCurve( pGeoObj) ;
|
|
if ( pCurve == nullptr)
|
|
return false ;
|
|
|
|
string sHexCol ;
|
|
GetColor( Ccol, sHexCol) ;
|
|
|
|
// approssimo la curva composita con delle linee
|
|
PolyLine pLine;
|
|
pCurve->ApproxWithLines( EPS_SMALL, m_ANG_TOL_STD_DEG, ICurve::APL_STD, pLine) ;
|
|
// prelevo il primo punto della curva composita (quindi della prima retta)
|
|
Point3d ptCurrent ;
|
|
pLine.GetFirstPoint( ptCurrent) ;
|
|
// porto il punto in coordinate ThreeJS
|
|
Point3d ptCurrentThreeJS = ptCurrent ;
|
|
ptCurrentThreeJS.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
|
|
|
// inizializzo la creazione della linea in javascript
|
|
m_Writer.OutText( " const line_material" + sName + " = new THREE.LineBasicMaterial({ color: " + sHexCol +" });") ;
|
|
m_Writer.OutText( " line_material" + sName + ".oldColor = new THREE.Color(" + sHexCol + ")") ;
|
|
m_Writer.OutText( " var line_geometry" + sName + " = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " line_geometry" + sName + ".vertices.push(") ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrentThreeJS.x) + "," + ToString( ptCurrentThreeJS.y) + "," + ToString( ptCurrentThreeJS.z) + "),") ;
|
|
|
|
// 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) + "),") ;
|
|
}
|
|
|
|
m_Writer.OutText( " );") ;
|
|
m_Writer.OutText( " var Compoline" + sName + " = new THREE.Line(line_geometry" + sName + ",line_material" + sName + ");") ;
|
|
m_Writer.OutText( " list_of_objects.push(Compoline" + sName + ");") ;
|
|
|
|
// aggiungo la curva composita al suo gruppo di appartenenza
|
|
|
|
if (nGroupCount != -1)
|
|
m_Writer.OutText(" group" + ToString(nGroupCount) + ".children.push(Compoline" + sName + ")");
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::ExportSTM( const string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
|
|
{
|
|
// verifico oggetto
|
|
const ISurfTriMesh* pSTM = GetSurfTriMesh( pGeoObj) ;
|
|
if ( pSTM == nullptr)
|
|
return false ;
|
|
|
|
// aumento il contatore generale per evitare nomi uguali su javascript
|
|
m_nCont++ ;
|
|
|
|
// ricavo il colore della faccia (R,G,B,A)
|
|
string sHexCol ;
|
|
GetColor( Ccol, sHexCol) ;
|
|
double dOpacity = Ccol.GetAlpha() ;
|
|
|
|
// controllo trasparenza e opacità
|
|
double dOpacityThreeJs = 1 ;
|
|
if ( dOpacity < 1)
|
|
{
|
|
// mesh trasparente
|
|
// calcolo distanza tra mesh e posizione delle telecamera (per riodinare l'ordine di visualizzazione)
|
|
BBox3d b3Localbox ;
|
|
pSTM->GetLocalBBox( b3Localbox) ;
|
|
b3Localbox.ToLoc( m_frTHREEJSFrame) ;
|
|
double dDistance = sqrt( b3Localbox.SqMaxDistFromPoint( m_ptCenter)) ;
|
|
sSurfDist sNewSurfDist ;
|
|
sNewSurfDist.SurvAlpha = pSTM ;
|
|
sNewSurfDist.dDistance = dDistance ;
|
|
sNewSurfDist.sName = ToString( m_nCont) ;
|
|
m_lTranspSurf.push_back( sNewSurfDist) ;
|
|
// --- dOpacityThreeJs = 0.1 * dOpacity * dOpacity + 0.25 * dOpacity + 0.5; // interpolazione quadratica per opacità (opacità ThreeJs diversa da opacità EGTCAM5)
|
|
dOpacityThreeJs = 0.7 + 0.2*dOpacity ;
|
|
// dOpacityThreeJs = dOpacity;
|
|
|
|
// creo il materiale
|
|
|
|
// front side
|
|
m_Writer.OutText( " var front_surf_materials" + ToString( m_nCont) + "= new THREE.MeshPhongMaterial({color: " + sHexCol + ", transparent: true , opacity: " + ToString( dOpacityThreeJs) + ", side: THREE.FrontSide});") ;
|
|
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
|
|
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".depthTest = true;"); // abilito test profondità
|
|
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".blending = THREE.CustomBlending") ; // flag per blending customizzato
|
|
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".blendEquation = THREE.AddEquation") ; // aggiungo equazione di blending
|
|
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".blendSrc = THREE.SrcAlphaFactor") ; // source blending factor --> glBlendFunc( srcfactor, destfactor)
|
|
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".blendDst = THREE.OneMinusSrcAlphaFactor;") ; // destination blending factor --> glBlendFunc( srcfactor, destfactor)
|
|
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".wasTransparent = true;") ; // nel caso sia selezionata
|
|
m_Writer.OutText( " front_surf_materials" + ToString( m_nCont) + ".hadOpacity = " + ToString( dOpacityThreeJs) + ";") ; // nel caso sia selezionata
|
|
|
|
// back side
|
|
m_Writer.OutText( " var back_surf_materials" + ToString(m_nCont) + "= new THREE.MeshPhongMaterial({color: " + sHexCol + ", transparent: true , opacity: " + ToString( dOpacityThreeJs) + ", side: THREE.BackSide});") ;
|
|
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
|
|
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".depthTest = true;") ; // abilito test profondità
|
|
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".blending = THREE.CustomBlending") ; // flag per blending customizzato
|
|
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".blendEquation = THREE.AddEquation") ; // aggiungo equazione di blending
|
|
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".blendSrc = THREE.SrcAlphaFactor") ; // source blending factor --> glBlendFunc( srcfactor, destfactor)
|
|
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".blendDst = THREE.OneMinusSrcAlphaFactor;") ; // destination blending factor --> glBlendFunc( srcfactor, destfactor)
|
|
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".wasTransparent = true;") ; // nel caso sia selezionata
|
|
m_Writer.OutText( " back_surf_materials" + ToString( m_nCont) + ".hadOpacity = " + ToString( dOpacityThreeJs) + ";") ; // nel caso sia selezionata
|
|
}
|
|
else
|
|
{
|
|
// mesh opaca
|
|
m_Writer.OutText( " var opaca_surf_materials" + ToString( m_nCont) + "= new THREE.MeshPhongMaterial({color: " + sHexCol + ", transparent: false , opacity: " + ToString( dOpacityThreeJs) + ", side: THREE.DoubleSide});") ;
|
|
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
|
|
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".depthTest = true;") ; // abilito test profondità
|
|
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".blending = THREE.CustomBlending") ; // flag per blending customizzato
|
|
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".blendEquation = THREE.AddEquation") ; // aggiungo equazione di blending
|
|
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".blendSrc = THREE.SrcAlphaFactor") ; // source blending factor --> glBlendFunc( srcfactor, destfactor)
|
|
m_Writer.OutText( " opaca_surf_materials" + ToString( m_nCont) + ".blendDst = THREE.OneMinusSrcAlphaFactor;") ; // destination blending factor --> glBlendFunc( srcfactor, destfactor)
|
|
}
|
|
|
|
// creo vettore di vertici per i triangoli della mesh
|
|
|
|
m_Writer.OutText(" var vertices" + ToString( m_nCont) + " = [") ;
|
|
|
|
int iTotV = pSTM->GetVertexCount() ;
|
|
int iTotT = pSTM->GetTriangleCount() ;
|
|
|
|
Point3d ptCurrent ;
|
|
int iPtCurrentTria[3] ;
|
|
|
|
// scorro tutti i vertici e ne scrivo le coordinate
|
|
for ( int i = 0; i < iTotV; i++)
|
|
{
|
|
pSTM->GetVertex( i, ptCurrent);
|
|
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame);
|
|
m_Writer.OutText(" new THREE.Vector3(" + ToString( ptCurrent.x) + ", " + ToString( ptCurrent.y) + ", " + ToString( ptCurrent.z) + "),") ;
|
|
}
|
|
|
|
m_Writer.OutText( " ];") ;
|
|
|
|
// 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]) + "),") ;
|
|
}
|
|
|
|
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( " geom" + ToString( m_nCont) + ".computeFaceNormals();") ; // per rendering effetto ombre e luce
|
|
|
|
// 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, m_ANG_TOL_STD_DEG, lstPL) ;
|
|
Point3d ptCurrent ;
|
|
|
|
// ricavo il colore della scritta (R,G,B,A)
|
|
string sHexCol ;
|
|
GetColor(Ccol, sHexCol) ;
|
|
|
|
// scorro tutte le curve trovate
|
|
for ( PolyLine aLine : lstPL)
|
|
{
|
|
// prelevo il primo punto
|
|
aLine.GetFirstPoint( ptCurrent) ;
|
|
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
|
// aumento il contatore generale per evitare nomi uguali su javascript
|
|
m_nCont++ ;
|
|
m_Writer.OutText( " const text_line_material" + ToString( m_nCont) + " = new THREE.LineBasicMaterial({ color: " + sHexCol + ", linewidth: 1.2 });") ;
|
|
m_Writer.OutText( " text_line_material" + ToString( m_nCont) + ".oldColor = new THREE.Color(" + sHexCol + ");") ;
|
|
m_Writer.OutText( " var text_line_geometry" + ToString( m_nCont) +" = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " text_line_geometry" + ToString( m_nCont) + ".vertices.push(") ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),") ;
|
|
|
|
// scorro tutti i punti e approssimo con delle linee rette
|
|
while (aLine.GetNextPoint(ptCurrent))
|
|
{
|
|
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),") ;
|
|
}
|
|
|
|
m_Writer.OutText( " );") ;
|
|
m_Writer.OutText( " var text_Compoline" + ToString( m_nCont) + " = new THREE.Line(text_line_geometry" + ToString( m_nCont) + ",text_line_material" + ToString( m_nCont) + ");") ;
|
|
m_Writer.OutText( " text_Compoline" + ToString( m_nCont) + ".translateY(1);") ;
|
|
m_Writer.OutText( " list_of_objects.push(text_Compoline" + ToString( m_nCont) + ");") ;
|
|
|
|
// aggiungo la polyline al suo gruppo di appartenenza
|
|
if (nGroupCount != -1)
|
|
m_Writer.OutText( " group" + ToString( nGroupCount) + ".children.push(text_Compoline" + ToString( m_nCont) + ")") ;
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::ExportDimension( const std::string& sName, const IGeoObj* pGeoObj, const Frame3d& frFrame, const Color& Ccol, const int nGroupCount)
|
|
{
|
|
// verifico l'oggetto
|
|
const IExtDimension* pDim = GetExtDimension( pGeoObj);
|
|
if ( pDim == nullptr)
|
|
return false ;
|
|
|
|
// approssimo con delle curve
|
|
POLYLINELIST lstPL ;
|
|
pDim->ApproxWithLines( EPS_SMALL, m_ANG_TOL_STD_DEG, lstPL) ;
|
|
Point3d ptCurrent ;
|
|
int iDiff = 0 ;
|
|
|
|
// prelevo il colore
|
|
string sHexCol ;
|
|
GetColor( Ccol, sHexCol) ;
|
|
|
|
// per ogni curva di approssimazione scorro i suoi punti e creo delle linee rette
|
|
for ( PolyLine aLine : lstPL)
|
|
{
|
|
aLine.GetFirstPoint( ptCurrent) ;
|
|
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
|
m_Writer.OutText( " const text_line_material" + sName + ToString( iDiff) + " = new THREE.LineBasicMaterial({ color: " + sHexCol + "});") ;
|
|
m_Writer.OutText( " text_line_material" + sName + ToString(iDiff) + ".oldColor = new THREE.Color(" + sHexCol + ")") ;
|
|
m_Writer.OutText( " var text_line_geometry" + sName + ToString( iDiff) + " = new THREE.Geometry();") ;
|
|
m_Writer.OutText( " text_line_geometry" + sName + ToString( iDiff) + ".vertices.push(") ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),") ;
|
|
|
|
while ( aLine.GetNextPoint( ptCurrent))
|
|
{
|
|
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
|
m_Writer.OutText( " new THREE.Vector3(" + ToString( ptCurrent.x) + "," + ToString( ptCurrent.y) + "," + ToString( ptCurrent.z) + "),") ;
|
|
}
|
|
|
|
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_WriterM.OutText(" <ol class='list-group-item'>");
|
|
else
|
|
m_WriterM.OutText( " <ol class='list-group-item border-0 bg-light' style='background-color: white;'>") ;
|
|
//m_WriterM.OutText( " <div id = 'block_" + ToString(m_nGroupCount) + "' style = 'padding-left:40px'>") ; //<---
|
|
|
|
string sName ;
|
|
pIter->GetName(sName);
|
|
for ( int i = 0; sName[i] != '\0'; i++) // sostituisco gli spazi con underscore
|
|
{
|
|
if (sName[i] == ' ')
|
|
sName[i] = '_';
|
|
}
|
|
sName += "_" + ToString(pIter->GetId());
|
|
string sId = ToString(pIter->GetId()) ;
|
|
|
|
m_Writer.OutText( " group" + ToString( m_nGroupCount) + ".name = '" + sId + "'") ;
|
|
//m_Writer.OutText( " group" + ToString(m_nGroupCount) + ".name = group" + ToString(m_nGroupCount) + ".name.normalize('NFD').replace(/[\u0300-\u036f]/g, '')");
|
|
//m_WriterM.OutText(" <a id = 'a_block_" + ToString( m_nGroupCount) + "' href = 'https://iis01.egalware.com/test3D/Esempio99.html?id=" + sId + "'>" + sName + "</a>"); //<---
|
|
|
|
if (!sId.compare("0"))
|
|
{
|
|
m_WriterM.OutText( " <a class='list-group-item list-group-item-action list-group-flush list-group-item-primary' href = 'https://iis01.egalware.com/test3D/Esempio99.html?'> Basic </a>") ;
|
|
}
|
|
else
|
|
{
|
|
m_WriterM.OutText(" <a class='list-group-item list-group-item-action list-group-flush list-group-item-primary' href = 'https://iis01.egalware.com/test3D/Esempio99.html?id=" + sId + "'>" + sName + " </a>");
|
|
}
|
|
|
|
if (nGroupCount != -1 && m_nGroupCount != nGroupCount) {
|
|
// --- m_Writer.OutText(" var gui" + ToString(m_nGroupCount) + "= gui" + ToString(nGroupCount) + ".addFolder('" + sName + "');");
|
|
}
|
|
|
|
|
|
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_WriterM.OutText( " </div>") ;
|
|
m_WriterM.OutText( " </ol>") ; //<---
|
|
|
|
/*
|
|
if (!pIter->GetName(sName)) {
|
|
sName = "Layer" + ToString(pIter->GetId());
|
|
}
|
|
*/
|
|
|
|
/* <--- original
|
|
m_Writer.OutText( " var settings" + ToString( nCurrentGroup) + " = {") ;
|
|
m_Writer.OutText( " 'S_Group" + ToString( nCurrentGroup)+ "' : function() { selectElement(group" + ToString( nCurrentGroup) + ") }") ;
|
|
m_Writer.OutText( " }") ;
|
|
m_Writer.OutText( " gui" + ToString( nGroupCount) + ".add(settings" + ToString( nCurrentGroup) + ", 'S_Group" + ToString( nCurrentGroup) + "').name('" + sName + "')") ;
|
|
*/
|
|
}
|
|
return bOk ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
ExportThreeJS::TestFilter( int nLev, int nMode, int nStat)
|
|
{
|
|
/*
|
|
if (( nLev == GDB_LV_USER && (m_nFilter & EEXFLT_LEVUSER) == 0) ||
|
|
( nLev == GDB_LV_SYSTEM && (m_nFilter & EEXFLT_LEVSYSTEM) == 0) ||
|
|
( nLev == GDB_LV_TEMP && (m_nFilter & EEXFLT_LEVTEMP) == 0))
|
|
return false;
|
|
if (( nMode == GDB_MD_STD && (m_nFilter & EEXFLT_MODESTD) == 0) ||
|
|
( nMode == GDB_MD_LOCKED && (m_nFilter & EEXFLT_MODELOCKED) == 0) ||
|
|
( nMode == GDB_MD_HIDDEN && (m_nFilter & EEXFLT_MODEHIDDEN) == 0))
|
|
return false;
|
|
*/
|
|
if (( nStat == GDB_ST_OFF && (m_nFilter & EEXFLT_STAOFF) == 0) ||
|
|
( nStat == GDB_ST_ON && (m_nFilter & EEXFLT_STAON) == 0) ||
|
|
( nStat == GDB_ST_SEL && (m_nFilter & EEXFLT_STASEL) == 0))
|
|
return false ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|