egtExchange :
- posizione centrale dell'oggetto esportato - render pagina web (prime modifiche) - Posizione telecamera al cambio tra prospettica e ortografica - rotazione del cubo attorno al target arruale (e non all'origine) - Correzione grandezza della lista dei vertici nelle mesh.
This commit is contained in:
+210
-102
@@ -130,7 +130,7 @@ ExportThreeJS::CompressAll( const string& sFile)
|
||||
return false ;
|
||||
}
|
||||
pSource = zip_source_file( pZipper, ( m_sThreeJSLibDir + "\\Controls\\OrbitControlsM.js" ).c_str(), 0, 0) ;
|
||||
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Controls\\OrbitControlsM.js").c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
||||
if ( zip_file_add( pZipper, ( sFileTitle + "\\Lib\\Controls\\orbitControlsM.js").c_str(), pSource, ZIP_FL_ENC_UTF_8) == -1) {
|
||||
EraseFile( sFile) ;
|
||||
return false ;
|
||||
}
|
||||
@@ -523,7 +523,7 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
m_Writer.OutText( " <button type = 'button' class = 'col-4 mx-1 p-0 btn_controls' id = 'BTROTATE' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Automatic rotation'>") ;
|
||||
m_Writer.OutText( " <i class = 'fa-solid fa-arrow-rotate-left'></i>") ;
|
||||
m_Writer.OutText( " </button>") ;
|
||||
m_Writer.OutText( " <button type = 'button' class = 'col-4 mr-1 p-0 btn_controls' id = 'BTORIG' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Look to origin'>") ;
|
||||
m_Writer.OutText( " <button type = 'button' class = 'col-4 mr-1 p-0 btn_controls' id = 'BTORIG' data-bs-toggle = 'tooltip' data-bs-placement = 'bottom' title = 'Center all'>") ;
|
||||
m_Writer.OutText( " <i class = 'fa-solid fa-arrows-to-circle'></i>") ;
|
||||
m_Writer.OutText( " </button>") ;
|
||||
m_Writer.OutText( " </div>") ;
|
||||
@@ -686,6 +686,8 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
m_Writer.OutText( " var spotLight1 = null;") ; // punto luca dell scena ( e rendering delle ombre )
|
||||
m_Writer.OutText( " var plane = null;") ; // piano su cui poggia la griglia, visibile solo dal lato front
|
||||
m_Writer.OutText( " var ShowGrid = true;") ; // T/F -> se la griglia è nella scena o no
|
||||
m_Writer.OutText( " var BoxSceneCenter;") ; // box globale del groupRoot (tutti gli oggetti della scena)
|
||||
m_Writer.OutText( " var aspect = window.innerWidth / window.innerHeight;") ; // aspetRatio per risoluzione e rendering geometrie
|
||||
|
||||
// funzione init() -> funzione principale che viene richiamata per la creazione della scena e dei suoi oggetti
|
||||
m_Writer.OutText( " function init() { ") ;
|
||||
@@ -693,10 +695,11 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
m_Writer.OutText( " scene = new THREE.Scene();") ;
|
||||
// imposto telecamera ortografica (posizione, punto di focus, posizione piani di clipping e definizione della zona di viewing frustum) (o prospettica)
|
||||
m_Writer.OutText( " if(CameraView == 0){") ;
|
||||
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + ", " + ToString( m_dHalfWidth) + ", " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar) + ");") ;
|
||||
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar) + ");") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1," + ToString( m_dZFar) + " * 75);") ;
|
||||
m_Writer.OutText(" camera.aspect = aspect;") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " camera.position.x = " + ToString( m_ptCamera.y) + "; camera.position.y = " + ToString( m_ptCamera.z) + "; camera.position.z = " + ToString( m_ptCamera.x) + "; ") ;
|
||||
m_Writer.OutText( " var dist = camera.position.distanceTo(new THREE.Vector3(0,0,0));") ; // per Gizmo
|
||||
@@ -707,12 +710,12 @@ ExportThreeJS::HeadAmbient( IEGrScene* pScene, IGeomDB* pGDB, int nId)
|
||||
m_Writer.OutText( " renderer.setClearColor(new THREE.Color(0xD3D3D3));") ;
|
||||
m_Writer.OutText( " renderer.setPixelRatio(window.devicePixelRatio );") ;
|
||||
m_Writer.OutText( " renderer.toneMapping = THREE.ACESFilmicToneMapping;") ;
|
||||
m_Writer.OutText( " if (window.screen.width > window.screen.height) {") ;
|
||||
m_Writer.OutText( " renderer.setSize(window.screen.availWidth, window.screen.availHeight);") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " renderer.setSize(window.screen.availHeight, window.screen.availWidth);") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
//m_Writer.OutText( " if (window.screen.width > window.screen.height) {") ;
|
||||
m_Writer.OutText( " renderer.setSize(window.innerWidth, window.innerHeight);") ;
|
||||
//m_Writer.OutText( " }") ;
|
||||
//m_Writer.OutText( " else {") ;
|
||||
//m_Writer.OutText( " renderer.setSize(window.innerHeight, window.innerWidth);") ;
|
||||
//m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " renderer.shadowMapEnabled = true;") ;
|
||||
m_Writer.OutText( " renderer.sortObjects = false;") ;
|
||||
// punto luce
|
||||
@@ -777,6 +780,7 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " group.add(list_of_objects[i]);") ;
|
||||
m_Writer.OutText( " };");
|
||||
m_Writer.OutText( " list_of_objects = [];") ; // <--- svuotamento della lista di tutte le geometrie <--- guardare groupRoot
|
||||
m_Writer.OutText( " BoxSceneCenter = new THREE.Box3().setFromObject(groupRoot);") ; // <--- creazione del box globale di groupRoot
|
||||
|
||||
// controlli del menu
|
||||
m_Writer.OutText( " var center;") ;
|
||||
@@ -789,18 +793,40 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " tar : orbitControls.target,") ; // il target della telecamera
|
||||
m_Writer.OutText( " reset : function() {") ; // per resettare la telecamera alla condizioni iniziali
|
||||
m_Writer.OutText( " if(CameraView == 0){") ;
|
||||
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + ", " + ToString( m_dHalfWidth) + ", " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar) + ");") ;
|
||||
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar) + ");") ;
|
||||
m_Writer.OutText( " camera.position.x = " + ToString( m_ptCamera.y) + ";") ;
|
||||
m_Writer.OutText( " camera.position.y = " + ToString( m_ptCamera.z) + ";") ;
|
||||
m_Writer.OutText( " camera.position.z = " + ToString( m_ptCamera.x) + ";") ;
|
||||
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + "));") ;
|
||||
m_Writer.OutText( " }else {") ;
|
||||
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, " + ToString( m_dZFar) + " * 75);") ;
|
||||
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, 26000 * 75);") ;
|
||||
m_Writer.OutText( " camera.aspect = aspect;") ;
|
||||
m_Writer.OutText( " if ( ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) >= ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) ) {") ;
|
||||
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) * ( -7/4 );") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) * ( -7/4 );") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " camera.position.y = ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5;") ;
|
||||
m_Writer.OutText( " camera.position.z = ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5;") ;
|
||||
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
||||
m_Writer.OutText( " ));") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " camera.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( " camera.updateProjectionMatrix();") ;
|
||||
m_Writer.OutText( " orbitControls = new OrbitControls(camera, renderer.domElement);") ;
|
||||
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + ");") ;
|
||||
m_Writer.OutText( " if(CameraView == 1){ orbitControls.target = new THREE.Vector3(0,0,0); camera.position.y = Math.abs(camera.position.y);}") ;
|
||||
m_Writer.OutText( " if ( CameraView == 0 ) { ") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + ");") ;
|
||||
m_Writer.OutText( " } else {") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
||||
m_Writer.OutText( " );") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " if (boxCreated) {") ;
|
||||
m_Writer.OutText( " box = new THREE.BoxHelper(controls.element, 0xff0000);") ;
|
||||
m_Writer.OutText( " camera.position.y = Math.abs(" + ToString( m_ptMin.y + ( m_dimZ * 1.15)) + ");") ; //115% in valore assoluto
|
||||
@@ -848,17 +874,21 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " var Ctarget = null;") ;
|
||||
m_Writer.OutText( " var anim1 = 0;") ;
|
||||
m_Writer.OutText( " var distanceC = 0;") ;
|
||||
m_Writer.OutText( " viewCube.addEventListener('angle-change', ({ quaternion, t }) => {") ;
|
||||
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
|
||||
m_Writer.OutText( " if (viewCube._blockRot) {") ;
|
||||
m_Writer.OutText( " if (anim1 == 0) {") ;
|
||||
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(0, 0, 0));") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " anim1++;") ;
|
||||
m_Writer.OutText( " camera.position.lerp(Cvers.multiplyScalar(distanceC), t);") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " viewCube.addEventListener('angle-change', ( { quaternion, t } ) => {") ;
|
||||
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
|
||||
m_Writer.OutText( " if ( viewCube._blockRot ) { ") ;
|
||||
m_Writer.OutText( " if ( anim1 == 0 ) {") ;
|
||||
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(orbitControls.target.x, orbitControls.target.y, orbitControls.target.z));") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " anim1++;") ;
|
||||
m_Writer.OutText( " var VectorEnd = new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " orbitControls.target.x + Cvers.x * distanceC,") ;
|
||||
m_Writer.OutText( " orbitControls.target.y + Cvers.y * distanceC,") ;
|
||||
m_Writer.OutText( " orbitControls.target.z + Cvers.z * distanceC,") ;
|
||||
m_Writer.OutText( " )") ;
|
||||
m_Writer.OutText( " camera.position.lerp(VectorEnd, t);") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " });") ;
|
||||
|
||||
// Setting parametri di rotazione
|
||||
@@ -1024,12 +1054,30 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " });") ;
|
||||
m_Writer.OutText( " document.getElementById('BTORTHO').addEventListener('click', function(){") ;
|
||||
m_Writer.OutText( " CameraView = 0;") ;
|
||||
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + ", " + ToString( m_dHalfWidth) + ", " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar) + ");") ;
|
||||
m_Writer.OutText( " camera.position.x = " + ToString( m_ptCamera.y) + "; camera.position.y = " + ToString( m_ptCamera.z) + "; camera.position.z = " + ToString( m_ptCamera.x) + "; ") ;
|
||||
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + "));") ;
|
||||
m_Writer.OutText( " aspect = window.innerWidth/window.innerHeight;") ;
|
||||
m_Writer.OutText( " camera = new THREE.OrthographicCamera(" + ToString( -m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfWidth) + " * aspect / 2, " + ToString( m_dHalfHeight) + ", " + ToString( -m_dHalfHeight) + "," + ToString( m_dZNear) + ", " + ToString( m_dZFar * 5) + ");") ;
|
||||
m_Writer.OutText( " if (( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) >= ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) ) {") ;
|
||||
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) * ( -7/4 );") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) * ( -7/4 );") ;
|
||||
m_Writer.OutText( " } ") ;
|
||||
m_Writer.OutText( " camera.position.y = ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5;") ;
|
||||
m_Writer.OutText( " camera.position.z = ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5;") ;
|
||||
m_Writer.OutText( " camera.updateProjectionMatrix(); ") ;
|
||||
m_Writer.OutText( " orbitControls.update(); ") ;
|
||||
m_Writer.OutText( " camera.lookAt( new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5,") ;
|
||||
m_Writer.OutText( " ));") ;
|
||||
m_Writer.OutText( " orbitControls = new OrbitControls(camera, renderer.domElement);") ;
|
||||
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + ");") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
||||
m_Writer.OutText( " );") ;
|
||||
m_Writer.OutText( " const item = document.querySelector('.Contcube')") ;
|
||||
m_Writer.OutText( " while (item.firstChild) {") ;
|
||||
m_Writer.OutText( " item.removeChild(item.firstChild);") ;
|
||||
@@ -1042,53 +1090,80 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " viewCube = new ViewCubeControls(cubeCamera, undefined, undefined, cubeRenderer.domElement, orbitControls);") ;
|
||||
m_Writer.OutText( " cubeScene.add(viewCube.getObject());") ;
|
||||
m_Writer.OutText( " Cposition = null; Ctarget = null; anim1 = 0; distanceC = 0;") ;
|
||||
m_Writer.OutText( " viewCube.addEventListener('angle-change', ({ quaternion, t }) => {") ;
|
||||
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
|
||||
m_Writer.OutText( " if (viewCube._blockRot) {") ;
|
||||
m_Writer.OutText( " if (anim1 == 0) {") ;
|
||||
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(0, 0, 0)); //d0") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " anim1++;") ;
|
||||
m_Writer.OutText( " camera.position.lerp(Cvers.multiplyScalar(distanceC), t);") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " viewCube.addEventListener('angle-change', ( { quaternion, t } ) => {") ;
|
||||
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
|
||||
m_Writer.OutText( " if ( viewCube._blockRot ) {") ;
|
||||
m_Writer.OutText( " if ( anim1 == 0 ) {") ;
|
||||
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(orbitControls.target.x, orbitControls.target.y, orbitControls.target.z));") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " anim1++;") ;
|
||||
m_Writer.OutText( " var VectorEnd = new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " orbitControls.target.x + Cvers.x * distanceC,") ;
|
||||
m_Writer.OutText( " orbitControls.target.y + Cvers.y * distanceC,") ;
|
||||
m_Writer.OutText( " orbitControls.target.z + Cvers.z * distanceC,") ;
|
||||
m_Writer.OutText( " )") ;
|
||||
m_Writer.OutText( " camera.position.lerp(VectorEnd, t);") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " });") ;
|
||||
m_Writer.OutText( " ColoraCubo(viewCube);") ;
|
||||
m_Writer.OutText( " });") ;
|
||||
m_Writer.OutText( " document.getElementById('BTPERS').addEventListener('click', function(){") ;
|
||||
m_Writer.OutText( " CameraView = 1;") ;
|
||||
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, " + ToString( m_dZFar) + " * 75);") ;
|
||||
m_Writer.OutText( " camera.position.x = " + ToString( m_ptCamera.y) + "; camera.position.y = " + ToString( m_ptCamera.z) + "; camera.position.z = " + ToString( m_ptCamera.x) + "; ") ;
|
||||
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(" + ToString( m_ptCenter.y) + ", " + ToString( m_ptCenter.z) + ", " + ToString( m_ptCenter.x) + "));") ;
|
||||
m_Writer.OutText( " orbitControls = new OrbitControls(camera, renderer.domElement);") ;
|
||||
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0,0,0); camera.position.y = Math.abs(camera.position.y);") ;
|
||||
m_Writer.OutText( " const item = document.querySelector('.Contcube')") ;
|
||||
m_Writer.OutText( " while (item.firstChild) {") ;
|
||||
m_Writer.OutText( " item.removeChild(item.firstChild);") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " document.querySelector('.Contcube').appendChild(cubeRenderer.domElement);") ;
|
||||
m_Writer.OutText( " cubeScene = new THREE.Scene();") ;
|
||||
m_Writer.OutText( " cubeCamera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);") ;
|
||||
m_Writer.OutText( " cubeCamera.position.set(0, 0, 70);") ;
|
||||
m_Writer.OutText( " cubeCamera.lookAt(0, 0, 0);") ;
|
||||
m_Writer.OutText( " viewCube = new ViewCubeControls(cubeCamera, undefined, undefined, cubeRenderer.domElement, orbitControls);") ;
|
||||
m_Writer.OutText( " cubeScene.add(viewCube.getObject());") ;
|
||||
m_Writer.OutText( " Cposition = null; Ctarget = null; anim1 = 0; distanceC = 0;") ;
|
||||
m_Writer.OutText( " viewCube.addEventListener('angle-change', ({ quaternion, t }) => {") ;
|
||||
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
|
||||
m_Writer.OutText( " if (viewCube._blockRot) {") ;
|
||||
m_Writer.OutText( " if (anim1 == 0) {") ;
|
||||
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(0, 0, 0));") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " anim1++;") ;
|
||||
m_Writer.OutText( " camera.position.lerp(Cvers.multiplyScalar(distanceC), t);") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " });") ;
|
||||
m_Writer.OutText( " ColoraCubo(viewCube);") ;
|
||||
m_Writer.OutText( " CameraView = 1;") ;
|
||||
m_Writer.OutText( " aspect = window.innerWidth/window.innerHeight;") ;
|
||||
m_Writer.OutText( " camera = new THREE.PerspectiveCamera(45, window.screen.availWidth / window.screen.availHeight, 1, 26000 * 75);") ;
|
||||
m_Writer.OutText( " camera.aspect = aspect;") ;
|
||||
m_Writer.OutText( " if ( ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) >= ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) ) {") ;
|
||||
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.y - BoxSceneCenter.min.y ) * ( -7/4 );") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " camera.position.x = orbitControls.target.x - ( BoxSceneCenter.max.x - BoxSceneCenter.min.x ) * 0.5 + ( BoxSceneCenter.max.z - BoxSceneCenter.min.z ) * ( -7/4 );") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " camera.position.y = ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5;") ;
|
||||
m_Writer.OutText( " camera.position.z = ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5;") ;
|
||||
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " camera.lookAt(new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
||||
m_Writer.OutText( " ));") ;
|
||||
m_Writer.OutText( " orbitControls = new OrbitControls(camera, renderer.domElement);") ;
|
||||
m_Writer.OutText( " orbitControls.autoRotate = controls.motion;") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5,") ;
|
||||
m_Writer.OutText( " ( BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5") ;
|
||||
m_Writer.OutText( " );") ;
|
||||
m_Writer.OutText( " const item = document.querySelector('.Contcube')") ;
|
||||
m_Writer.OutText( " while ( item.firstChild ) {") ;
|
||||
m_Writer.OutText( " item.removeChild(item.firstChild);") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " document.querySelector('.Contcube').appendChild(cubeRenderer.domElement);") ;
|
||||
m_Writer.OutText( " cubeScene = new THREE.Scene();") ;
|
||||
m_Writer.OutText( " cubeCamera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000);") ;
|
||||
m_Writer.OutText( " cubeCamera.position.set(0, 0, 70);") ;
|
||||
m_Writer.OutText( " cubeCamera.lookAt(0, 0, 0);") ;
|
||||
m_Writer.OutText( " viewCube = new ViewCubeControls(cubeCamera, undefined, undefined, cubeRenderer.domElement, orbitControls);") ;
|
||||
m_Writer.OutText( " cubeScene.add(viewCube.getObject());") ;
|
||||
m_Writer.OutText( " Cposition = null; Ctarget = null; anim1 = 0; distanceC = 0;") ;
|
||||
m_Writer.OutText( " viewCube.addEventListener('angle-change', ( { quaternion, t } ) => {") ;
|
||||
m_Writer.OutText( " getVersor(viewCube._name_click);") ;
|
||||
m_Writer.OutText( " if ( viewCube._blockRot ) {") ;
|
||||
m_Writer.OutText( " if ( anim1 == 0 ) {") ;
|
||||
m_Writer.OutText( " distanceC = camera.position.distanceTo(new THREE.Vector3(orbitControls.target.x, orbitControls.target.y, orbitControls.target.z));") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " anim1++;") ;
|
||||
m_Writer.OutText( " var VectorEnd = new THREE.Vector3(") ;
|
||||
m_Writer.OutText( " orbitControls.target.x + Cvers.x * distanceC,") ;
|
||||
m_Writer.OutText( " orbitControls.target.y + Cvers.y * distanceC,") ;
|
||||
m_Writer.OutText( " orbitControls.target.z + Cvers.z * distanceC,") ;
|
||||
m_Writer.OutText( " )") ;
|
||||
m_Writer.OutText( " camera.position.lerp(VectorEnd, t);") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " });") ;
|
||||
m_Writer.OutText( " ColoraCubo(viewCube);") ;
|
||||
m_Writer.OutText( " });") ;
|
||||
|
||||
// eventi click sul menu di destra dei controlli
|
||||
@@ -1109,20 +1184,27 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " controls.motion = true;") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " });") ;
|
||||
m_Writer.OutText( " document.getElementById('BTORIG').addEventListener('click', function() {orbitControls.target = new THREE.Vector3(0, 0, 0); })") ;
|
||||
m_Writer.OutText( " document.getElementById('BTBOX').addEventListener('click', function() {") ;
|
||||
m_Writer.OutText( " if (controls.bBox) {") ;
|
||||
m_Writer.OutText( " controls.bBox = false;") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " controls.bBox = true;") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " document.getElementById('BTORIG').addEventListener('click', function() {") ;
|
||||
m_Writer.OutText( " BoxSceneCenter.getCenter(orbitControls.target);") ;
|
||||
m_Writer.OutText( " camera.position.x = orbitControls.target.x + camera.position.distanceTo(orbitControls.target) * ( -1 ),") ;
|
||||
m_Writer.OutText( " camera.position.y = orbitControls.target.y,") ;
|
||||
m_Writer.OutText( " camera.position.z = orbitControls.target.z") ;
|
||||
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " })") ;
|
||||
m_Writer.OutText( " document.getElementById('BTSEL').addEventListener('click', function() {") ;
|
||||
m_Writer.OutText( " GLOB_SEL = true;") ;
|
||||
m_Writer.OutText( " SelType = 0;") ;
|
||||
m_Writer.OutText( " GLOB_DIST = false;") ;
|
||||
m_Writer.OutText( " CancelMarkers();") ;
|
||||
m_Writer.OutText( " document.getElementById('BTBOX').addEventListener('click', function() {") ;
|
||||
m_Writer.OutText( " if (controls.bBox) {") ;
|
||||
m_Writer.OutText( " controls.bBox = false;") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " controls.bBox = true;") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " })") ;
|
||||
m_Writer.OutText( " document.getElementById('BTSEL').addEventListener('click', function() {") ;
|
||||
m_Writer.OutText( " GLOB_SEL = true;") ;
|
||||
m_Writer.OutText( " SelType = 0;") ;
|
||||
m_Writer.OutText( " GLOB_DIST = false;") ;
|
||||
m_Writer.OutText( " CancelMarkers();") ;
|
||||
m_Writer.OutText( " });") ;
|
||||
m_Writer.OutText( " document.getElementById('BTSHOW').addEventListener('click', function() {") ;
|
||||
m_Writer.OutText( " GLOB_SEL = true;") ;
|
||||
@@ -1165,6 +1247,16 @@ ExportThreeJS::FinishAmbient( void)
|
||||
|
||||
// funzione render per la scena
|
||||
m_Writer.OutText( " function renderScene() {") ;
|
||||
m_Writer.OutText( " if ( CameraView == 1 ) { // se prospettica ") ;
|
||||
m_Writer.OutText( " camera.aspect = window.innerWidth / window.innerHeight;") ;
|
||||
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else { // se ortografica") ;
|
||||
m_Writer.OutText( " aspect = window.innerWidth / window.innerHeight;") ;
|
||||
m_Writer.OutText( " camera.left = -3342.576634 * aspect / 2;") ;
|
||||
m_Writer.OutText( " camera.right = 3342.576634 * aspect / 2;") ;
|
||||
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " if (viewCube._blockRot == false) {") ;
|
||||
m_Writer.OutText( " if (ComeFromRot) {") ;
|
||||
m_Writer.OutText( " ComeFromRot = false;") ;
|
||||
@@ -1204,7 +1296,6 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
||||
m_Writer.OutText( " requestAnimationFrame(renderScene);") ;
|
||||
m_Writer.OutText( " renderer.setSize(window.screen.availWidth, window.screen.availHeight);") ;
|
||||
m_Writer.OutText( " renderer.render(scene, camera);") ;
|
||||
m_Writer.OutText( " GLOB_BOX = controls.bBox;") ;
|
||||
m_Writer.OutText( " if (controls.motion) {") ;
|
||||
@@ -1213,8 +1304,10 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " document.getElementById('BTROTATE').style.color = '#d9534f';") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " if (orbitControls.target.x == 0 && orbitControls.target.x == 0 && orbitControls.target.x == 0) {") ;
|
||||
m_Writer.OutText( " document.getElementById('BTORIG').style.color = '#5cb85c';") ;
|
||||
m_Writer.OutText( " if (( BoxSceneCenter.min.x + BoxSceneCenter.max.x ) * 0.5 == orbitControls.target.x && ") ;
|
||||
m_Writer.OutText( " (BoxSceneCenter.min.y + BoxSceneCenter.max.y ) * 0.5 == orbitControls.target.y && ") ;
|
||||
m_Writer.OutText( " (BoxSceneCenter.min.z + BoxSceneCenter.max.z ) * 0.5 == orbitControls.target.z ) { ") ;
|
||||
m_Writer.OutText( " document.getElementById('BTORIG').style.color = '#5cb85c';") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else {") ;
|
||||
m_Writer.OutText( " document.getElementById('BTORIG').style.color = '#d9534f';") ;
|
||||
@@ -2018,7 +2111,18 @@ ExportThreeJS::FinishAmbient( void)
|
||||
|
||||
// funzione resize della pagina
|
||||
m_Writer.OutText( " function onResize() {") ;
|
||||
m_Writer.OutText( " renderer.setSize(window.screen.availWidth, window.screen.availHeight);") ;
|
||||
m_Writer.OutText( " if ( CameraView == 1 ) { // se prospettica") ;
|
||||
m_Writer.OutText( " camera.aspect = window.innerWidth / window.innerHeight;") ;
|
||||
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
||||
m_Writer.OutText( " renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " else { // se ortografica") ;
|
||||
m_Writer.OutText( " aspect = window.innerWidth / window.innerHeight;") ;
|
||||
m_Writer.OutText( " camera.left = -3342.576634 * aspect / 2;") ;
|
||||
m_Writer.OutText( " camera.right = 3342.576634 * aspect / 2;") ;
|
||||
m_Writer.OutText( " camera.updateProjectionMatrix();") ;
|
||||
m_Writer.OutText( " renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
|
||||
// richiamo della funzione init() e dichiarazione degli eventi in javascript per controllo della scena
|
||||
@@ -2084,7 +2188,8 @@ ExportThreeJS::FinishAmbient( void)
|
||||
m_Writer.OutText( " document.getElementById('CScena').style.cursor = 'pointer';") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " if (e.key == 'o') {") ;
|
||||
m_Writer.OutText( " orbitControls.target = new THREE.Vector3(0, 0, 0);") ;
|
||||
m_Writer.OutText( " BoxSceneCenter.getCenter( orbitControls.target );") ;
|
||||
m_Writer.OutText( " orbitControls.update();") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " }") ;
|
||||
m_Writer.OutText( " if (e.key == 'Enter') {") ;
|
||||
@@ -2800,9 +2905,12 @@ 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 ;
|
||||
const ISurfTriMesh* pSTMtc = GetSurfTriMesh( pGeoObj) ;
|
||||
if ( pSTMtc == nullptr)
|
||||
return false ;
|
||||
|
||||
PtrOwner<ISurfTriMesh> pSTM( pSTMtc->Clone()) ;
|
||||
pSTM->DoCompacting() ;
|
||||
|
||||
// aumento il contatore generale per evitare nomi uguali su javascript
|
||||
m_nCont ++ ;
|
||||
@@ -2875,13 +2983,13 @@ ExportThreeJS::ExportSTM( const string& sName, const IGeoObj* pGeoObj, const Fra
|
||||
for ( int i = 0; i < iTotV; i++) {
|
||||
pSTM->GetVertex( i, ptCurrent) ;
|
||||
ptCurrent.LocToLoc( frFrame, m_frTHREEJSFrame) ;
|
||||
m_Writer.OutText(" new THREE.Vector3(" + ToString( ptCurrent.x) + ", " + ToString( ptCurrent.y) + ", " + ToString( ptCurrent.z) + "),", false) ;
|
||||
m_Writer.OutText(" new THREE.Vector3(" + ToString( ptCurrent.x, 15) + ", " + ToString( ptCurrent.y, 15) + ", " + ToString( ptCurrent.z, 15) + "),", false) ;
|
||||
}
|
||||
|
||||
m_Writer.OutText( " ];", false) ;
|
||||
|
||||
// creo vettore delle facce dei triangoli
|
||||
m_Writer.OutText( " var faces" + ToString(m_nCont) + " = [ ") ;
|
||||
m_Writer.OutText( " var faces" + ToString( m_nCont) + " = [ ") ;
|
||||
|
||||
// scorro tutti i triangoli associandogli una faccia della mesh
|
||||
for ( int i = 0; i < iTotT; i++) {
|
||||
@@ -2897,14 +3005,14 @@ ExportThreeJS::ExportSTM( const string& sName, const IGeoObj* pGeoObj, const Fra
|
||||
m_Writer.OutText( " geom" + ToString( m_nCont) + ".faces = faces" + ToString( m_nCont) + ";") ;
|
||||
m_Writer.OutText( " try{") ;
|
||||
m_Writer.OutText( " geom" + ToString( m_nCont) + ".computeFaceNormals();") ; // per rendering effetto ombre e luce
|
||||
m_Writer.OutText( " } catch(err){ console.log(err);};") ;
|
||||
m_Writer.OutText( " } catch(err){ console.log('computeFaceNormals error in " + ToString( m_nCont) + "'); console.log(err); console.log('---')}") ;
|
||||
|
||||
// creo la mesh unendo geometria (vertici e facce) e materiale
|
||||
if ( dOpacity < 1) {
|
||||
// mesh trasparente
|
||||
// front side -----------------------------
|
||||
m_Writer.OutText( " var front_surf_mesh" + ToString( m_nCont) + " = new THREE.Mesh(geom" + ToString( m_nCont) + ", front_surf_materials" + ToString( m_nCont) + ");") ;
|
||||
m_Writer.OutText( " front_surf_mesh" + ToString( m_nCont) + ".castShadow = true;") ;
|
||||
//m_Writer.OutText( " front_surf_mesh" + ToString( m_nCont) + ".castShadow = true;") ;
|
||||
|
||||
// aggiungo la superficie al suo gruppo di appartenenza
|
||||
if ( nGroupCount != -1)
|
||||
@@ -2912,7 +3020,7 @@ ExportThreeJS::ExportSTM( const string& sName, const IGeoObj* pGeoObj, const Fra
|
||||
|
||||
// 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( " back_surf_mesh" + ToString( m_nCont) + ".castShadow = true;") ;
|
||||
|
||||
// aggiungo la superficie al suo gruppo di appartenenza
|
||||
if( nGroupCount != -1)
|
||||
@@ -2923,7 +3031,7 @@ ExportThreeJS::ExportSTM( const string& sName, const IGeoObj* pGeoObj, const Fra
|
||||
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( " 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
|
||||
|
||||
Reference in New Issue
Block a user