EgtExchange :
- esportazione con menu e file geometrie separati
This commit is contained in:
+91
-185
@@ -65,81 +65,9 @@ ExportThreeJS::SetOptions( int nFilter)
|
||||
bool
|
||||
ExportThreeJS::Export( IGeomDB* pGDB, int nId, const string& sFile, const string& sFileM, IEGrScene* pScene)
|
||||
{
|
||||
/*
|
||||
m_Writer.Close();
|
||||
if (!m_Writer.Init(sFile)) {
|
||||
LOG_ERROR(GetEExLogger(), "ExportThreeJS : Error on open file")
|
||||
return false;
|
||||
}
|
||||
|
||||
ISurfTriMesh* miaSurf = GetSurfTriMesh(pGDB->GetGeoObj(1117));
|
||||
ICurveComposite* miaCurvaSotto = GetCurveComposite(pGDB->GetGeoObj(1332));
|
||||
double Bi, Bf;
|
||||
miaCurvaSotto->GetDomain(Bi, Bf);
|
||||
ICurveComposite* miaCurvaSopra = GetCurveComposite(pGDB->GetGeoObj(1333));
|
||||
double Ti, Tf;
|
||||
miaCurvaSopra->GetDomain(Ti, Tf);
|
||||
ICurveComposite* miaCurvaSinistra = GetCurveComposite(pGDB->GetGeoObj(1334));
|
||||
double Li, Lf;
|
||||
miaCurvaSinistra->GetDomain(Li, Lf);
|
||||
ICurveComposite* miaCurvaDestra = GetCurveComposite(pGDB->GetGeoObj(1335));
|
||||
double Ri, Rf;
|
||||
miaCurvaDestra->GetDomain(Ri, Rf);
|
||||
|
||||
int iTotT = miaSurf->GetTriangleCount();
|
||||
int nIdVert[3];
|
||||
Point3d punto;
|
||||
double par;
|
||||
string str;
|
||||
for (int i = 0; i < iTotT; i++)
|
||||
{
|
||||
miaSurf->GetTriangle(i, nIdVert);
|
||||
str = "[";
|
||||
for (int j = 0; j < 3; j++)
|
||||
{
|
||||
str += "new THREE.Vector2";
|
||||
miaSurf->GetVertex(nIdVert[j], punto);
|
||||
if (miaCurvaSotto->GetParamAtPoint(punto, par, 100*EPS_SMALL))
|
||||
{
|
||||
par = par / Bf;
|
||||
str += "(" + ToString(par) + ",0),";
|
||||
}
|
||||
else if (miaCurvaSopra->GetParamAtPoint(punto, par, 100*EPS_SMALL))
|
||||
{
|
||||
par = par / Tf;
|
||||
str += "(" + ToString(par) + ",1),";
|
||||
}
|
||||
else if (miaCurvaSinistra->GetParamAtPoint(punto, par, 100*EPS_SMALL))
|
||||
{
|
||||
par = par / Lf;
|
||||
str += "(0, " + ToString(par) + "),";
|
||||
}
|
||||
else if (miaCurvaDestra->GetParamAtPoint(punto, par, 100*EPS_SMALL))
|
||||
{
|
||||
par = par / Rf;
|
||||
str += "(1," + ToString(par) + "),";
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Writer.OutText("Pizza");
|
||||
IGeoPoint3d* pt = CreateGeoPoint3d();
|
||||
pt->Set(punto);
|
||||
pGDB->AddGeoObj(GDB_ID_NULL, GDB_ID_ROOT, pt->Clone());
|
||||
}
|
||||
}
|
||||
m_Writer.OutText(str + "],");
|
||||
}
|
||||
|
||||
|
||||
if (!m_Writer.Close())
|
||||
return true;
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// verifico il DB geometrico
|
||||
if ( pGDB == nullptr) {
|
||||
LOG_ERROR(GetEExLogger(), "ExportThreeJS : Error on GeomDB")
|
||||
LOG_ERROR( GetEExLogger(), "ExportThreeJS : Error on GeomDB")
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -167,7 +95,6 @@ ExportThreeJS::Export( IGeomDB* pGDB, int nId, const string& sFile, const string
|
||||
}
|
||||
|
||||
|
||||
|
||||
// prelevo il Box3D globale (per ingombro e punto luce)
|
||||
BBox3d b3Globbox ;
|
||||
pGDB->GetGlobalBBox( nId, b3Globbox, BBF_ONLY_VISIBLE) ;
|
||||
@@ -187,27 +114,6 @@ ExportThreeJS::Export( IGeomDB* pGDB, int nId, const string& sFile, const string
|
||||
bOk = ExportObject( *pIter, pGDB, m_nGroupCount) ;
|
||||
// fine creazione menù con elementi globali
|
||||
m_Writer.OutText( " groupRoot.add(group0)");
|
||||
// --- m_Writer.OutText( " var reset = {") ;
|
||||
// --- m_Writer.OutText( " 'Reset': function() {") ;
|
||||
// --- m_Writer.OutText( " if (!first) {") ;
|
||||
// --- m_Writer.OutText( " GetColorBack(LastGroupSelected)") ;
|
||||
// --- m_Writer.OutText( " }") ;
|
||||
// --- m_Writer.OutText( " }") ;
|
||||
// --- m_Writer.OutText( " }") ;
|
||||
// --- m_Writer.OutText( " gui.add(reset, 'Reset').name('Deselect all');") ;
|
||||
// --- m_Writer.OutText( " const params = {" ) ;
|
||||
// --- m_Writer.OutText( " textField: 'Type Name_Id'") ;
|
||||
// --- m_Writer.OutText( " }") ;
|
||||
// --- m_Writer.OutText( " gui.add(params, 'textField').onFinishChange(function(value) {") ;
|
||||
// --- m_Writer.OutText( " if (value != '') {") ;
|
||||
// --- m_Writer.OutText( " findGroupByNameAndId(groupRoot, value);") ;
|
||||
// --- m_Writer.OutText( " if (!trovato) {") ;
|
||||
// --- m_Writer.OutText( " GetColorBack(LastGroupSelected);") ;
|
||||
// --- m_Writer.OutText( " window.alert('Element not found :(');") ;
|
||||
// --- m_Writer.OutText( " }") ;
|
||||
// --- m_Writer.OutText( " }") ;
|
||||
// --- m_Writer.OutText( " trovato = false;");
|
||||
// --- m_Writer.OutText( " }).name('Code');") ;
|
||||
|
||||
// creazione parte finale della pagina html
|
||||
bOk = FinishAmbient() ;
|
||||
@@ -253,7 +159,7 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
// 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>") ;
|
||||
// --- 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{") ;
|
||||
@@ -283,9 +189,9 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( "") ;
|
||||
m_Writer.OutText( " </style>") ;
|
||||
|
||||
m_Writer.OutText( " <script src = 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js'></script>") ;
|
||||
m_Writer.OutText( " <script type = 'text/javascript' src = 'https://iis01.egalware.com/Test3D/Lib/Controls/dat.gui.js'></script>") ;
|
||||
// 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
|
||||
@@ -295,9 +201,9 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
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 'https://iis01.egalware.com/Test3D/Lib/three.module.js';") ;
|
||||
m_Writer.OutText( " import { OrbitControls } from 'https://iis01.egalware.com/Test3D/Lib/Controls/orbitControlsM.js';") ;
|
||||
m_Writer.OutText( " import{OrbitControlsGizmo} from 'https://iis01.egalware.com/Test3D/Lib/Controls/OrbitControlsGizmo.js'; ");
|
||||
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;") ;
|
||||
@@ -315,7 +221,7 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
// 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( " 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
|
||||
@@ -332,23 +238,23 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
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)));
|
||||
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.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.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 );") ;
|
||||
// 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 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));");
|
||||
@@ -373,7 +279,7 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
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( " 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);") ;
|
||||
@@ -415,20 +321,6 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
m_Writer.OutText( " plane.receiveShadow = false;");
|
||||
m_Writer.OutText( " spotLight1.target = plane;") ;
|
||||
m_Writer.OutText( " var list_of_objects = [];") ;
|
||||
// codice per inizializzazione menu
|
||||
// --- m_Writer.OutText( " var gui = new dat.GUI({ width: 350 });") ;
|
||||
// --- m_Writer.OutText( " var gui0 = gui.addFolder('Root');") ;
|
||||
|
||||
/*
|
||||
ORGANIZZAZIONE DEL MENU GUI
|
||||
- ad ogni cartella del menu c'è associata una label
|
||||
- cliccando sulla label viene lanciata la funzione all'interno della relativa struttura creata, alla funzione viene passato il gruppo corrispondente
|
||||
- funzioni richiamate una volta avendo il gruppo (gruppo di linee, punti, mesh, vettori di altri gruppi) selezionato:
|
||||
- selectElement(...)
|
||||
- scanElement(...)
|
||||
- getColorBack(...)
|
||||
*/
|
||||
|
||||
|
||||
// ================================================================
|
||||
// CREAZIONE PARTE INIZIALE DEL MENU ==============================
|
||||
@@ -436,6 +328,7 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
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'>") ;
|
||||
@@ -625,6 +518,8 @@ ExportThreeJS::FinishAmbient()
|
||||
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);") ;
|
||||
@@ -660,7 +555,11 @@ ExportThreeJS::FinishAmbient()
|
||||
m_Writer.OutText( " element.material.color = element.material.oldColor;") ;
|
||||
m_Writer.OutText( " element.material.emissive = new THREE.Color(0x000000);") ;
|
||||
m_Writer.OutText( " element.material.emissiveIntensity = 1;") ;
|
||||
m_Writer.OutText( " }");
|
||||
m_Writer.OutText( " 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( " }") ;
|
||||
@@ -997,6 +896,8 @@ ExportThreeJS::ExportObject( const IGdbIterator& iIter, IGeomDB* pGDB, const int
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1222,37 +1123,38 @@ ExportThreeJS::ExportCurveComp3D( const string& sName, const IGeoObj* pGeoObj, c
|
||||
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();
|
||||
string sHexCol ;
|
||||
GetColor( Ccol, sHexCol) ;
|
||||
double dOpacity = Ccol.GetAlpha() ;
|
||||
|
||||
// controllo trasparenza e opacità
|
||||
double dOpacityThreeJs = 1;
|
||||
if (dOpacity < 1)
|
||||
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);
|
||||
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;
|
||||
dOpacityThreeJs = 0.7 + 0.2*dOpacity ;
|
||||
// dOpacityThreeJs = dOpacity;
|
||||
|
||||
// creo il materiale
|
||||
|
||||
// front side
|
||||
@@ -1263,95 +1165,99 @@ ExportThreeJS::ExportSTM( const string& sName, const IGeoObj* pGeoObj, const Fra
|
||||
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) + ".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)
|
||||
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) + " = [") ;
|
||||
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++)
|
||||
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) + "),");
|
||||
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(" ];");
|
||||
m_Writer.OutText( " ];") ;
|
||||
|
||||
// creo vettore delle facce dei triangoli
|
||||
|
||||
m_Writer.OutText(" var faces" + ToString(m_nCont) + " = [ ");
|
||||
m_Writer.OutText( " var faces" + ToString(m_nCont) + " = [ ") ;
|
||||
|
||||
// scorro tutti i triangoli associandogli una faccia della mesh
|
||||
for (int i = 0; i < iTotT; i++)
|
||||
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]) + "),");
|
||||
pSTM->GetTriangle( i, iPtCurrentTria) ;
|
||||
m_Writer.OutText( " new THREE.Face3(" + ToString( iPtCurrentTria[0]) + ", " + ToString( iPtCurrentTria[1]) + ", " + ToString( iPtCurrentTria[2]) + "),") ;
|
||||
}
|
||||
|
||||
m_Writer.OutText(" ];");
|
||||
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
|
||||
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;") ;
|
||||
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) + ")") ;
|
||||
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;") ;
|
||||
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) + ")") ;
|
||||
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
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user