• 前端实现全景图1


    使用前端可视化界面的方案:xml+krpano

    约定开发命名规则
        a. XML标签中,自定义变量,方法,函数,都需使用下划线 _ 方式进行命名连接,禁止使用驼峰命名;
        b. XML调用js函数以 handle_xxx开头;
        c. 属性值不区分大小写,系统属性值-统一采用大写,自定义属性值采用小写加下划线;
        d. 所有标签中,name必须是唯一值,有重复会覆盖;
    项目所需标签记录, xml中所有标签及元素都不区分大小写:
    1. krpano 根标签所有xml文件都需要包含在 krpano 标签下,必须设置,且可以标签可以嵌套多次,
        a. 属性:version当前版本
    <krpano version="1.20.7">
        ...
    </krpano>
    2. scene 场景标签,属性:name 是必须值,切换场景需要用到这个值
    <krpano version="1.20.7">
        <scene name="scene_hongqi">
          ...
      </scene>
    </krpano>  
    3. preview 预览图标签,属性:
        a. url 全景图路径;type(SPHERE,CYLINDER,CUBESTRIP)默认SPHERE(球形);
    <krpano version="1.20.7">
        <scene name="hong_qi">
          <preview url="img/hongqi_1.jpg" type="SPHERE"></preview>
      </scene>
    </krpano>
    4. view 视图标签,属性:
        a. hlookat 水平视角(-180~180),水平方向;
        b. vlookat 垂直视角(-90~90),垂直方向;
        c. hlookatmin 视角左侧限制范围, 范围:-180—180,默认值:-180    此处参数要慢慢修改,不断调整参数,反复预览 ;
        d. hlookatmax 视角右侧限制范围,范围:-180—180,默认值:180;
        e. vlookatmin 视角向上限制范围,范围:-90—0,默认值:-90;
        f. vlookatmax 视角向下限制范围,范围:0—90,默认值:90;
        g. fovtype 视角类型,默认MFOV(VFOV垂直视角,HFOV水平视角,DFOV对角线视角,MFOV最大视角);
        h. fov 默认缩放视角FOV,初始化默认视角FOV,默认90;
        i. fovmin 缩放最小FOV,缩放最小FOV(场景拉近),必须小于初始FOV,默认60;
        j. fovmax 缩放最大FOV,缩放最大FOV(场景拉远),必须大于初始FOV,默认150;
        k. maxpixelzoom 缩放视角比例,范围:1.0—5.0。数值越大 拉近距离越近;
    <krpano version="1.20.7">
        <scene name="scene_hongqi">
        <preview url="img/hongqi_1.jpg" type="SPHERE" />
        <view hlookat="0" vlookat="0" hlookatmin="-180" hlookatmax="180" vlookatmin="-90" vlookatmax="90" fovtype="MFOV" fovmin="60" fovmax="150" fov="90" />
        </scene>
    </krpano>
    5. hotspot热点标签,分为内置属性和自定义属性:
        a. 内置属性:
        i. name 热点名称;
        ii. url 热点路径;
        iii. ath 热点坐标H,图中热点坐标H;
        iv. atv 热点坐标V,图中热点坐标V;
        v. scale 热点缩放,1为原始大小,0.1~0.9等小数值为缩小,大于1数值为放大;
        vi. zoom 热点缩放跟随,热点是否跟随场景缩放,默认true;
        vii. onloaded 热点加载事件,会写一些内置的action;
        viii. onclick 热点点击事件,切换场景及查看设备信息;
        b. 自定义属性:
        i. device_type 设备类型,设备类型热点,场景切换热点,不填则默认场景切换热点;
        ii. device_title 设备提示标题,热点上方显示名称,持续显示,仅对“设备类型热点”类型有效;
        iii. target_scene 目标场景,热点跳转的目标场景;
    <krpano version="1.20.7">
        <scene name="scene_hongqi">
        <preview url="img/hongqi_1.jpg" type="SPHERE" />
        <view hlookat="0" vlookat="0" hlookatmin="-180" hlookatmax="180" vlookatmin="-90" vlookatmax="90" fovtype="MFOV" fovmin="60" fovmax="150" fov="90" />
        <hotspot name="spot_scene" url="icon/hotspot.png" ath="0" atv="0" scale="0.6" zoom="true" />
        </scene>
    </krpano>
    6. acion 自定义动态代码标签,类似 js 中的 function,属性:
        a. name 函数名称,全局唯一;
        b. scope 作用域类型,global,local,parent;
        c. args 参数列表;
        d. 标签内部实现,函数操作;
    <krpano version="1.20.7">
        <scene name="scene_hongqi">
        <preview url="img/hongqi_1.jpg" type="SPHERE" />
        <view hlookat="0" vlookat="0" hlookatmin="-180" hlookatmax="180" vlookatmin="-90" vlookatmax="90" fovtype="MFOV" fovmin="60" fovmax="150" fov="90" />
        <hotspot name="spot_scene" url="icon/hotspot.png" ath="0" atv="0" scale="0.6" zoom="true"
                 device_type="" device_title="" target_scene="scene_xiaoshang"
                 onloaded="hotspot_do_animation();"
                 onclick="hotspot_click();"/>
        </scene>
      <scene name="scene_xiaoshang">
        <preview url="img/hongqi_2.jpg" type="SPHERE" />
        <view hlookat="0" vlookat="0" hlookatmin="-180" hlookatmax="180" vlookatmin="-90" vlookatmax="90" fovtype="MFOV" fovmin="60" fovmax="150" fov="90" />
        </scene>
      <!-- 热点增加动画 -->
      <action name="hotspot_do_animation" scope="local">
          calc(local.xframes, (caller.imagewidth /128) BOR 0);
        calc(local.frames, xframes * ((caller.imageheight / 128) BOR 0));
        def(local.frame, integer, 0);
        calc(caller.crop, '0|0|' + 128 + '|' + 128);
        setinterval(calc('crop_anim_' + caller.name), 0.03,
        if(caller.loaded,
        inc(frame);
        if(frame GE frames, if(caller.onlastframe !== null, callwith(caller, onlastframe() ) ); set(frame,0); );
        mod(xpos, frame, xframes);
        div(ypos, frame, xframes);
        Math.floor(ypos);
        mul(xpos, 128);
        mul(ypos, 128);
        calc(caller.crop, xpos + '|' + ypos + '|' + 128 + '|' + 128);
          ,
        clearinterval(calc('crop_anim_' + caller.name));
        );
        ,10);
      </action>
      <!-- 热点切换场景 -->
      <action name="hotspot_jump_scene" scope="local" args="jump_scene">
        loadscene(get(jump_scene),null,MERGE,ZOOMBLEND(2.0, 2.0, easeInOutSine));
      </action>
      <!-- 热点显示标题,device_title 字段 -->
      <action name="hotspot_show_title">
        txtadd(tooltipname, 'tooltip_', get(name));
        addplugin(get(tooltipname)); txtadd(plugin[get(tooltipname)].parent, 'hotspot[',get(name),']');
        set(plugin[get(tooltipname)].url,'%SWFPATH%/plugins/textfield.swf');
        set(plugin[get(tooltipname)].align,top);
        set(plugin[get(tooltipname)].edge,bottom);
        set(plugin[get(tooltipname)].x,0);
        set(plugin[get(tooltipname)].y,0);
        set(plugin[get(tooltipname)].autowidth,true); 
        set(plugin[get(tooltipname)].autoheight,true);
        set(plugin[get(tooltipname)].background,false);
        set(plugin[get(tooltipname)].border,false);
        set(plugin[get(tooltipname)].css,'text-align:center; color:#FFFFFF; font-family: PingFangSC-Medium,PingFang SC; font-weight:bold; font-size:16px;');
        set(plugin[get(tooltipname)].textshadow,1);
        set(plugin[get(tooltipname)].textshadowrange,6.0);
        set(plugin[get(tooltipname)].textshadowangle,90);
        copy(plugin[get(tooltipname)].html,hotspot[get(name)].device_title);
        set(plugin[get(tooltipname)].enabled,false);
      </action>
      <!-- 热点点击显示对话框 -->
      <action name="hotspot_click">
        js(handleClickHotSpots(get(device_type),get(target_scene)));
      </action>
    </krpano>
    // 全局方法
    function handleClickHotSpots(deviceType,targetScene) {
        if(deviceType){
        console.log('这里做弹框操作');
        } else {
        // 这里执行场景切换逻辑
        var krpano = document.getElementById('krpanoSWFObject');
        krpano.call(`hotspot_jump_scene(${targetScene})`);
        }
    }

     前端js操作 krpano,进行切换场景

    // 获取对象krpano
    var krpano = document.getElementById("krpanoSWFObject");
    // 执行一个krpano的内部动作或自定义动作,例如js操作跳转场景
    krpano.call("hotspot_jump_scene('scene_hongqi');");
  • 相关阅读:
    如何写好软件需求说明?
    怎么做,与为什么?[转]
    WCF学习中遇到的一些问题
    删除数据库中所有表、视图以及存储过程
    如何获取Repeater的当前行号
    Asp.Net 获取FileUpload控件的文件路径、文件名、扩展名
    IP地址通过WebService得到城市
    springboot、intellij与docker的结合
    开源GIS软件初探
    Statement接口提供的execute、executeQuery和executeUpdate之间的区别
  • 原文地址:https://www.cnblogs.com/ChineseLiao/p/16396318.html
Copyright © 2020-2023  润新知