Commit e2db714e authored by Oleg Dzhimiev's avatar Oleg Dzhimiev
Browse files

1. fixed errors when dragging over map by small distances

parent 65c3858d
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -798,6 +798,8 @@ function leaf_mousemove_nohc(e){
    var p0 = new L.LatLng(Data.camera.latitude,Data.camera.longitude);
    var p1 = new L.LatLng(Camera._latlng.lat,Camera._latlng.lng);

    var p_origin = new L.LatLng(Data.camera.kml.latitude,Data.camera.kml.longitude);

    var dh = Camera._heading - Math.PI/180*Data.camera.heading;

    Data.camera.heading   = Camera._heading*180/Math.PI;
@@ -805,7 +807,9 @@ function leaf_mousemove_nohc(e){
    Data.camera.longitude = Camera._latlng.lng;

    if ((p0.lat!=p1.lat)||(p0.lng!=p1.lng)){
        leaf_translation_v1(p0,p1);
        // hypothesis: dragging by small distances introduces cumulative errors
        //leaf_translation_v1(p0,p1);
        leaf_translation_v1(p_origin,p1);
    }else{
        x3dom_rotation(dh);
    }
@@ -856,6 +860,7 @@ function leaf_update_x3dom_marker(p1_ll,p2_ll,index){
  var dp_w = x3dom_delta_map2scene(p1_ll,p2_ll);

  mark.x = dp_w.x;
  mark.y = dp_w.y;
  mark.z = dp_w.z;

  if(!hecs){
@@ -870,13 +875,15 @@ function leaf_translation_v1(p0,p1){

    var dp_w = x3dom_delta_map2scene(p0,p1);

    x3dom_translation(dp_w.x,dp_w.y,dp_w.z);
    x3dom_translation_v2(dp_w.x,dp_w.y,dp_w.z);

    // if not updated then moving in 3D scene will make it jump
    Scene.old_view_translation = x3dom_getViewTranslation(Scene.element);

}



function x3d_mouseMove(){

    x3dom_update_map();
+23 −0
Original line number Diff line number Diff line
@@ -299,6 +299,7 @@ function x3dom_rotation(dangle){

/*
 * translate camera in x3dom space
 * not in use
 */
function x3dom_translation(dx,dy,dz){

@@ -319,6 +320,28 @@ function x3dom_translation(dx,dy,dz){

}

/*
 * set camera translation in x3dom space to x,y,z
 */
function x3dom_translation_v2(x,y,z){

    var delta = new x3dom.fields.SFVec3f(x,y,z);

    var mat = Scene.element.runtime.viewMatrix().inverse();

    var from = mat.e3();
    var at = from.subtract(mat.e2());
    var up = mat.e1();

    var newfrom = delta;
    var newat = newfrom.subtract(mat.e2());

    var newmat = x3dom.fields.SFMatrix4f.lookAt(newfrom, newat, up);

    x3dom_setViewpoint(newmat);

}

function x3dom_altelev(alt,elev){

    //x3dom_matrix_test();