Loading js/ui_init.js +8 −69 Original line number Original line Diff line number Diff line Loading @@ -256,7 +256,6 @@ function deep_init(){ function x3d_initial_camera_placement(){ function x3d_initial_camera_placement(){ // Roll compensation var heading = Data.camera.heading*Math.PI/180; var heading = Data.camera.heading*Math.PI/180; var tilt = (Data.camera.tilt-90)*Math.PI/180; var tilt = (Data.camera.tilt-90)*Math.PI/180; var roll = Data.camera.roll*Math.PI/180; var roll = Data.camera.roll*Math.PI/180; Loading Loading @@ -290,29 +289,12 @@ function x3d_initial_camera_placement(){ var RC_w = R0.inverse().mult(RC0_rw); var RC_w = R0.inverse().mult(RC0_rw); // store matrices // store matrices Data.camera.Matrices = { Data.camera.Matrices = { Ah: heading, At: tilt, Ar: roll, R_h_eul: Mh, R_t_eul: Mt, R_r_eul: Mr, R0 : R0, R0 : R0, Up0: RC_w.e1(), Up0: RC_w.e1(), RC_w: RC_w, RC_w: RC_w, }; }; // set view x3dom_setViewpoint(RC_w); var Q = new x3dom.fields.Quaternion(0, 0, 1, 0); Q.setValue(RC_w); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("position",RC_w.e3().toString()); viewpoint.attr("centerOfRotation",RC_w.e3().toString()); // update every time Data.camera.Matrices.RC_w = RC_w; } } Loading Loading @@ -487,19 +469,13 @@ function leaf_events(){ var p1_ll = Camera._latlng; var p1_ll = Camera._latlng; var p2_ll = Lm._latlng; var p2_ll = Lm._latlng; //var azimuth = getAzimuth(p1_ll,p2_ll); var azimuth = getAzimuth(p1_ll,p2_ll); //var initial_heading = Data.camera.Matrices.Ah*180/Math.PI; var angle = azimuth - Data.camera.Matrices.Ah*180/Math.PI; var distance = p1_ll.distanceTo(p2_ll); var distance = p1_ll.distanceTo(p2_ll); //console.log("angle from lat lng: "+angle); p_w = x3dom_delta_map2scene(p1_ll,p2_ll); mark.x = distance*Math.sin(Math.PI/180*angle); mark.x = p_w.x; mark.y = 0; mark.y = p_w.y; mark.z = -distance*Math.cos(Math.PI/180*angle); mark.z = p_w.z; mark.d_map = distance; mark.d_map = distance; mark.d_x3d = "<font style='color:red;'>drag over 3D</font>"; mark.d_x3d = "<font style='color:red;'>drag over 3D</font>"; Loading Loading @@ -644,43 +620,6 @@ function leaf_translation_v1(p0,p1){ function x3d_mouseMove(){ function x3d_mouseMove(){ var Camera = Map.marker; x3dom_update_map(); var mat = Scene.element.runtime.viewMatrix().inverse(); var R0 = Data.camera.Matrices.R0; var T = x3dom_toYawPitchRoll(); var m_rw = T.mult(R0).mult(mat).mult(T.inverse()); var ypr = x3dom_YawPitchRoll_degs(m_rw); var heading = ypr.yaw; Map.marker.setHeading(heading); var dp_w = mat.e3(); if (Scene.old_view_translation != null){ dp_w = dp_w.subtract(Scene.old_view_translation); } // from w to rw dp_rw = R0.multMatrixVec(dp_w); var distance = Math.sqrt(dp_rw.x*dp_rw.x+dp_rw.z*dp_rw.z); var angle = 180/Math.PI*Math.atan2(dp_rw.x,-dp_rw.z); var initial_coordinates = [Data.camera.latitude,Data.camera.longitude]; var p0 = new L.LatLng(initial_coordinates[0],initial_coordinates[1]);//Camera._latlng; var p1 = p0.CoordinatesOf(angle,distance); Map.marker.setBasePoint(p1); Map.marker._syncMeasureMarkersToBasePoint(); Data.camera.latitude = p1.lat; Data.camera.longitude = p1.lng; Data.camera.heading = heading; Scene.old_view_translation = mat.e3(); } } js/x3dom_functions.js +88 −58 Original line number Original line Diff line number Diff line Loading @@ -229,34 +229,15 @@ function x3dom_setUpRight(){ var from = mat.e3(); var from = mat.e3(); var at = from.subtract(mat.e2()); var at = from.subtract(mat.e2()); //var up = new x3dom.fields.SFVec3f(0, 1, 0); var up = Data.camera.Matrices.Up0; var up = Data.camera.Matrices.Up0; var s = mat.e2().cross(up).normalize(); var s = mat.e2().cross(up).normalize(); var newup = mat.e2().cross(s).normalize().negate(); var newup = mat.e2().cross(s).normalize().negate(); //at = from.add(v); mat = x3dom.fields.SFMatrix4f.lookAt(from, at, newup); mat = x3dom.fields.SFMatrix4f.lookAt(from, at, newup); //mat = mat.inverse(); //var m1 = x3dom.fields.SFMatrix4f.translation(from); //var m1n = x3dom.fields.SFMatrix4f.translation(from.negate()); //mat = m1.mult(mat).mult(m1n); var Q = new x3dom.fields.Quaternion(0,0,1,0); Q.setValue(mat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("position",mat.e3().toString()); viewpoint.attr("centerOfRotation",mat.e3().toString()); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); Data.camera.Matrices.RC_w = mat; x3dom_setViewpoint(mat); } } Loading Loading @@ -293,17 +274,7 @@ function x3dom_rotation(delta_a){ newmat = x3dom.fields.SFMatrix4f.lookAt(from, newat, up); newmat = x3dom.fields.SFMatrix4f.lookAt(from, newat, up); var Q = new x3dom.fields.Quaternion(0,0,1,0); x3dom_setViewpoint(newmat); //Q.setValue(newmat.inverse()); Q.setValue(newmat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("position",from.toString()); viewpoint.attr("centerOfRotation",from.toString()); Data.camera.Matrices.RC_w = newmat; } } Loading @@ -330,24 +301,12 @@ function x3dom_translation(dx,dy,dz){ var newmat = x3dom.fields.SFMatrix4f.lookAt(newfrom, newat, up); var newmat = x3dom.fields.SFMatrix4f.lookAt(newfrom, newat, up); var Q = new x3dom.fields.Quaternion(0,0,1,0); x3dom_setViewpoint(newmat); //Q.setValue(newmat.inverse()); Q.setValue(newmat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("position",newfrom.toString()); viewpoint.attr("centerOfRotation",newfrom.toString()); Data.camera.Matrices.RC_w = newmat; } } function x3dom_altelev(alt,elev){ function x3dom_altelev(alt,elev){ console.log(elev); //x3dom_matrix_test(); //x3dom_matrix_test(); var mat = Scene.element.runtime.viewMatrix().inverse(); var mat = Scene.element.runtime.viewMatrix().inverse(); Loading Loading @@ -377,16 +336,8 @@ function x3dom_altelev(alt,elev){ var newmat = matt.mult(R_w); var newmat = matt.mult(R_w); var Q = new x3dom.fields.Quaternion(0,0,1,0); x3dom_setViewpoint(newmat); Q.setValue(newmat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("position",newmat.e3().toString()); viewpoint.attr("centerOfRotation",newmat.e3().toString()); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); Data.camera.Matrices.RC_w = newmat; } } /** /** Loading Loading @@ -537,3 +488,82 @@ function x3dom_delta_map2scene(p0,p1){ return dp_w; return dp_w; } } // x,y,z - x3dom internal coords function x3dom_getDistAngle(x,y,z){ var R0 = Data.camera.Matrices.R0; var p_w = new x3dom.fields.SFVec3f(x,y,z); var p_rw = R0.multMatrixVec(p_w); var d = Math.sqrt(p_rw.x*p_rw.x+p_rw.z*p_rw.z); var a = Math.atan2(p_rw.x,-p_rw.z)*180/Math.PI; return Array(d,a); } function x3dom_update_map(){ var Camera = Map.marker; // real world ypr from viewmatrix var mat = Scene.element.runtime.viewMatrix().inverse(); var R0 = Data.camera.Matrices.R0; var T = x3dom_toYawPitchRoll(); var m_rw = T.mult(R0).mult(mat).mult(T.inverse()); var ypr = x3dom_YawPitchRoll_degs(m_rw); var heading = ypr.yaw; Map.marker.setHeading(heading); // real world angle distance of some point var dp_w = mat.e3(); if (Scene.old_view_translation != null){ dp_w = dp_w.subtract(Scene.old_view_translation); } // from w to rw dp_rw = R0.multMatrixVec(dp_w); var distance = Math.sqrt(dp_rw.x*dp_rw.x+dp_rw.z*dp_rw.z); var angle = 180/Math.PI*Math.atan2(dp_rw.x,-dp_rw.z); var initial_coordinates = [Data.camera.latitude,Data.camera.longitude]; var p0 = new L.LatLng(initial_coordinates[0],initial_coordinates[1]);//Camera._latlng; var p1 = p0.CoordinatesOf(angle,distance); Map.marker.setBasePoint(p1); Map.marker._syncMeasureMarkersToBasePoint(); Data.camera.latitude = p1.lat; Data.camera.longitude = p1.lng; Data.camera.heading = heading; Scene.old_view_translation = mat.e3(); } // uses globals function x3dom_setViewpoint(m){ var Q = new x3dom.fields.Quaternion(0, 0, 1, 0); Q.setValue(m); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("position",m.e3().toString()); viewpoint.attr("centerOfRotation",m.e3().toString()); // update every time Data.camera.Matrices.RC_w = m; } js/x3dom_init.js +8 −16 Original line number Original line Diff line number Diff line Loading @@ -862,14 +862,9 @@ X3DOMObject.Marker.drag = function(dx,dy){ X3DOMObject.Marker.slide = function(index,x,y,z){ X3DOMObject.Marker.slide = function(index,x,y,z){ var R0 = Data.camera.Matrices.R0; var da = x3dom_getDistAngle(x,y,z); //var T = x3dom_toYawPitchRoll(); var distance = da[0]; var angle = da[1]; var p_w = new x3dom.fields.SFVec3f(x,y,z); var p_rw = R0.multMatrixVec(p_w); var distance = Math.sqrt(p_rw.x*p_rw.x+p_rw.z*p_rw.z); var angle = Math.atan2(p_rw.x,-p_rw.z)*180/Math.PI; var p1_ll = Map.marker._latlng; var p1_ll = Map.marker._latlng; var p2_ll = p1_ll.CoordinatesOf(angle,distance); var p2_ll = p1_ll.CoordinatesOf(angle,distance); Loading Loading @@ -974,14 +969,11 @@ X3DOMObject.PointerMarker.prototype._registerEvents = function(){ // Create marker on the scene // Create marker on the scene new X3DOMObject.Marker(mark.x,mark.y,mark.z); new X3DOMObject.Marker(mark.x,mark.y,mark.z); // Create marker on the map var da = x3dom_getDistAngle(mark.x,mark.y,mark.z); var R0 = Data.camera.Matrices.R0; var distance = da[0]; var p_w = new x3dom.fields.SFVec3f(mark.x,mark.y,mark.z); var angle = da[1]; var p_rw = R0.multMatrixVec(p_w); var distance = Math.sqrt(p_rw.x*p_rw.x+p_rw.z*p_rw.z); var angle = Math.atan2(p_rw.x,-p_rw.z)*180/Math.PI; // Create marker on the map Camera.createMeasureMarker(angle,distance); Camera.createMeasureMarker(angle,distance); var map_mark = Camera._measureMarkers[Camera._measureMarkers.length-1]; var map_mark = Camera._measureMarkers[Camera._measureMarkers.length-1]; Loading Loading
js/ui_init.js +8 −69 Original line number Original line Diff line number Diff line Loading @@ -256,7 +256,6 @@ function deep_init(){ function x3d_initial_camera_placement(){ function x3d_initial_camera_placement(){ // Roll compensation var heading = Data.camera.heading*Math.PI/180; var heading = Data.camera.heading*Math.PI/180; var tilt = (Data.camera.tilt-90)*Math.PI/180; var tilt = (Data.camera.tilt-90)*Math.PI/180; var roll = Data.camera.roll*Math.PI/180; var roll = Data.camera.roll*Math.PI/180; Loading Loading @@ -290,29 +289,12 @@ function x3d_initial_camera_placement(){ var RC_w = R0.inverse().mult(RC0_rw); var RC_w = R0.inverse().mult(RC0_rw); // store matrices // store matrices Data.camera.Matrices = { Data.camera.Matrices = { Ah: heading, At: tilt, Ar: roll, R_h_eul: Mh, R_t_eul: Mt, R_r_eul: Mr, R0 : R0, R0 : R0, Up0: RC_w.e1(), Up0: RC_w.e1(), RC_w: RC_w, RC_w: RC_w, }; }; // set view x3dom_setViewpoint(RC_w); var Q = new x3dom.fields.Quaternion(0, 0, 1, 0); Q.setValue(RC_w); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("position",RC_w.e3().toString()); viewpoint.attr("centerOfRotation",RC_w.e3().toString()); // update every time Data.camera.Matrices.RC_w = RC_w; } } Loading Loading @@ -487,19 +469,13 @@ function leaf_events(){ var p1_ll = Camera._latlng; var p1_ll = Camera._latlng; var p2_ll = Lm._latlng; var p2_ll = Lm._latlng; //var azimuth = getAzimuth(p1_ll,p2_ll); var azimuth = getAzimuth(p1_ll,p2_ll); //var initial_heading = Data.camera.Matrices.Ah*180/Math.PI; var angle = azimuth - Data.camera.Matrices.Ah*180/Math.PI; var distance = p1_ll.distanceTo(p2_ll); var distance = p1_ll.distanceTo(p2_ll); //console.log("angle from lat lng: "+angle); p_w = x3dom_delta_map2scene(p1_ll,p2_ll); mark.x = distance*Math.sin(Math.PI/180*angle); mark.x = p_w.x; mark.y = 0; mark.y = p_w.y; mark.z = -distance*Math.cos(Math.PI/180*angle); mark.z = p_w.z; mark.d_map = distance; mark.d_map = distance; mark.d_x3d = "<font style='color:red;'>drag over 3D</font>"; mark.d_x3d = "<font style='color:red;'>drag over 3D</font>"; Loading Loading @@ -644,43 +620,6 @@ function leaf_translation_v1(p0,p1){ function x3d_mouseMove(){ function x3d_mouseMove(){ var Camera = Map.marker; x3dom_update_map(); var mat = Scene.element.runtime.viewMatrix().inverse(); var R0 = Data.camera.Matrices.R0; var T = x3dom_toYawPitchRoll(); var m_rw = T.mult(R0).mult(mat).mult(T.inverse()); var ypr = x3dom_YawPitchRoll_degs(m_rw); var heading = ypr.yaw; Map.marker.setHeading(heading); var dp_w = mat.e3(); if (Scene.old_view_translation != null){ dp_w = dp_w.subtract(Scene.old_view_translation); } // from w to rw dp_rw = R0.multMatrixVec(dp_w); var distance = Math.sqrt(dp_rw.x*dp_rw.x+dp_rw.z*dp_rw.z); var angle = 180/Math.PI*Math.atan2(dp_rw.x,-dp_rw.z); var initial_coordinates = [Data.camera.latitude,Data.camera.longitude]; var p0 = new L.LatLng(initial_coordinates[0],initial_coordinates[1]);//Camera._latlng; var p1 = p0.CoordinatesOf(angle,distance); Map.marker.setBasePoint(p1); Map.marker._syncMeasureMarkersToBasePoint(); Data.camera.latitude = p1.lat; Data.camera.longitude = p1.lng; Data.camera.heading = heading; Scene.old_view_translation = mat.e3(); } }
js/x3dom_functions.js +88 −58 Original line number Original line Diff line number Diff line Loading @@ -229,34 +229,15 @@ function x3dom_setUpRight(){ var from = mat.e3(); var from = mat.e3(); var at = from.subtract(mat.e2()); var at = from.subtract(mat.e2()); //var up = new x3dom.fields.SFVec3f(0, 1, 0); var up = Data.camera.Matrices.Up0; var up = Data.camera.Matrices.Up0; var s = mat.e2().cross(up).normalize(); var s = mat.e2().cross(up).normalize(); var newup = mat.e2().cross(s).normalize().negate(); var newup = mat.e2().cross(s).normalize().negate(); //at = from.add(v); mat = x3dom.fields.SFMatrix4f.lookAt(from, at, newup); mat = x3dom.fields.SFMatrix4f.lookAt(from, at, newup); //mat = mat.inverse(); //var m1 = x3dom.fields.SFMatrix4f.translation(from); //var m1n = x3dom.fields.SFMatrix4f.translation(from.negate()); //mat = m1.mult(mat).mult(m1n); var Q = new x3dom.fields.Quaternion(0,0,1,0); Q.setValue(mat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("position",mat.e3().toString()); viewpoint.attr("centerOfRotation",mat.e3().toString()); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); Data.camera.Matrices.RC_w = mat; x3dom_setViewpoint(mat); } } Loading Loading @@ -293,17 +274,7 @@ function x3dom_rotation(delta_a){ newmat = x3dom.fields.SFMatrix4f.lookAt(from, newat, up); newmat = x3dom.fields.SFMatrix4f.lookAt(from, newat, up); var Q = new x3dom.fields.Quaternion(0,0,1,0); x3dom_setViewpoint(newmat); //Q.setValue(newmat.inverse()); Q.setValue(newmat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("position",from.toString()); viewpoint.attr("centerOfRotation",from.toString()); Data.camera.Matrices.RC_w = newmat; } } Loading @@ -330,24 +301,12 @@ function x3dom_translation(dx,dy,dz){ var newmat = x3dom.fields.SFMatrix4f.lookAt(newfrom, newat, up); var newmat = x3dom.fields.SFMatrix4f.lookAt(newfrom, newat, up); var Q = new x3dom.fields.Quaternion(0,0,1,0); x3dom_setViewpoint(newmat); //Q.setValue(newmat.inverse()); Q.setValue(newmat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("position",newfrom.toString()); viewpoint.attr("centerOfRotation",newfrom.toString()); Data.camera.Matrices.RC_w = newmat; } } function x3dom_altelev(alt,elev){ function x3dom_altelev(alt,elev){ console.log(elev); //x3dom_matrix_test(); //x3dom_matrix_test(); var mat = Scene.element.runtime.viewMatrix().inverse(); var mat = Scene.element.runtime.viewMatrix().inverse(); Loading Loading @@ -377,16 +336,8 @@ function x3dom_altelev(alt,elev){ var newmat = matt.mult(R_w); var newmat = matt.mult(R_w); var Q = new x3dom.fields.Quaternion(0,0,1,0); x3dom_setViewpoint(newmat); Q.setValue(newmat); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("position",newmat.e3().toString()); viewpoint.attr("centerOfRotation",newmat.e3().toString()); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); Data.camera.Matrices.RC_w = newmat; } } /** /** Loading Loading @@ -537,3 +488,82 @@ function x3dom_delta_map2scene(p0,p1){ return dp_w; return dp_w; } } // x,y,z - x3dom internal coords function x3dom_getDistAngle(x,y,z){ var R0 = Data.camera.Matrices.R0; var p_w = new x3dom.fields.SFVec3f(x,y,z); var p_rw = R0.multMatrixVec(p_w); var d = Math.sqrt(p_rw.x*p_rw.x+p_rw.z*p_rw.z); var a = Math.atan2(p_rw.x,-p_rw.z)*180/Math.PI; return Array(d,a); } function x3dom_update_map(){ var Camera = Map.marker; // real world ypr from viewmatrix var mat = Scene.element.runtime.viewMatrix().inverse(); var R0 = Data.camera.Matrices.R0; var T = x3dom_toYawPitchRoll(); var m_rw = T.mult(R0).mult(mat).mult(T.inverse()); var ypr = x3dom_YawPitchRoll_degs(m_rw); var heading = ypr.yaw; Map.marker.setHeading(heading); // real world angle distance of some point var dp_w = mat.e3(); if (Scene.old_view_translation != null){ dp_w = dp_w.subtract(Scene.old_view_translation); } // from w to rw dp_rw = R0.multMatrixVec(dp_w); var distance = Math.sqrt(dp_rw.x*dp_rw.x+dp_rw.z*dp_rw.z); var angle = 180/Math.PI*Math.atan2(dp_rw.x,-dp_rw.z); var initial_coordinates = [Data.camera.latitude,Data.camera.longitude]; var p0 = new L.LatLng(initial_coordinates[0],initial_coordinates[1]);//Camera._latlng; var p1 = p0.CoordinatesOf(angle,distance); Map.marker.setBasePoint(p1); Map.marker._syncMeasureMarkersToBasePoint(); Data.camera.latitude = p1.lat; Data.camera.longitude = p1.lng; Data.camera.heading = heading; Scene.old_view_translation = mat.e3(); } // uses globals function x3dom_setViewpoint(m){ var Q = new x3dom.fields.Quaternion(0, 0, 1, 0); Q.setValue(m); var AA = Q.toAxisAngle(); var viewpoint = $(Scene.element).find("Viewpoint"); viewpoint.attr("orientation",AA[0].toString()+" "+AA[1]); viewpoint.attr("position",m.e3().toString()); viewpoint.attr("centerOfRotation",m.e3().toString()); // update every time Data.camera.Matrices.RC_w = m; }
js/x3dom_init.js +8 −16 Original line number Original line Diff line number Diff line Loading @@ -862,14 +862,9 @@ X3DOMObject.Marker.drag = function(dx,dy){ X3DOMObject.Marker.slide = function(index,x,y,z){ X3DOMObject.Marker.slide = function(index,x,y,z){ var R0 = Data.camera.Matrices.R0; var da = x3dom_getDistAngle(x,y,z); //var T = x3dom_toYawPitchRoll(); var distance = da[0]; var angle = da[1]; var p_w = new x3dom.fields.SFVec3f(x,y,z); var p_rw = R0.multMatrixVec(p_w); var distance = Math.sqrt(p_rw.x*p_rw.x+p_rw.z*p_rw.z); var angle = Math.atan2(p_rw.x,-p_rw.z)*180/Math.PI; var p1_ll = Map.marker._latlng; var p1_ll = Map.marker._latlng; var p2_ll = p1_ll.CoordinatesOf(angle,distance); var p2_ll = p1_ll.CoordinatesOf(angle,distance); Loading Loading @@ -974,14 +969,11 @@ X3DOMObject.PointerMarker.prototype._registerEvents = function(){ // Create marker on the scene // Create marker on the scene new X3DOMObject.Marker(mark.x,mark.y,mark.z); new X3DOMObject.Marker(mark.x,mark.y,mark.z); // Create marker on the map var da = x3dom_getDistAngle(mark.x,mark.y,mark.z); var R0 = Data.camera.Matrices.R0; var distance = da[0]; var p_w = new x3dom.fields.SFVec3f(mark.x,mark.y,mark.z); var angle = da[1]; var p_rw = R0.multMatrixVec(p_w); var distance = Math.sqrt(p_rw.x*p_rw.x+p_rw.z*p_rw.z); var angle = Math.atan2(p_rw.x,-p_rw.z)*180/Math.PI; // Create marker on the map Camera.createMeasureMarker(angle,distance); Camera.createMeasureMarker(angle,distance); var map_mark = Camera._measureMarkers[Camera._measureMarkers.length-1]; var map_mark = Camera._measureMarkers[Camera._measureMarkers.length-1]; Loading