📦 大空间模型户型图
MapviewFloorplanPlugin
功能说明
大空间模型户型图插件 是对模型户型图插件的升级版本,新增了缩放和拖动的手势操作。
借助此插件,您可以在 VR 3D 模型状态下展示更详细的二维户型图,除却以下同模型户型图插件实现的相同功能:
- 支持二维户型图( png / svg 格式)展示。
 - 房屋标签展示: 支持自定义标签样式。
 - 展示进入二维户型图前,相机位置和朝向: 支持自定义相机图标。
 - 支持多楼层 VR 房源,即支持多楼层切换。
 - 俯视视角上,二维户型图与 VR 3D 模型的自适应对齐。
 - 点击二维户型图房间,会自动进入到 VR 对应房间的合适点位。
 - 指北针展示: 暂不支持配置,但可以借助 CSS 选择器优先级方式覆盖原有样式。
 - 支持手势快捷操作:在二维户型图界面进行滑动,会快速切换到模型状态;在模型状态松手时,如果比较接近户型图的展示角度,会自动旋转模型,并展示户型图。此功能支持配置是否禁用。
 
大空间模型户型图还增加了以下功能:
- 等比放大、缩小二维户型图与 VR 3D模型,保证二者的对齐。
 - 拖动查看放大后的户型图展示,可以精准查看户型图的某一区域内容。
 
示例效果
安装引用
请按需选择 yarn 或 npm 安装方式:
- npm
 - Yarn
 - pnpm
 
npm install @realsee/dnalogel
yarn add @realsee/dnalogel
pnpm add @realsee/dnalogel
通过 es 引用:
import MapviewFloorplanPlugin from "@realsee/dnalogel"
开发指南
此插件的使用方式与模型户型图插件完全一致,包括初始化、数据载入、核心方法调用、自定义配置以及事件 hooks 使用,展示效果也基本相同,主要区别于大空间模型户型图插件增加了缩放和拖动功能,如果您已经掌握了模型户型图插件的使用,您也就掌握了大空间模型户型图插件的使用方式,只需要根据合适的使用场景调用即可。
初始化
在初始化 Five 实例的时候,将 MapviewFloorplanPlugin 配置在初始化插件参数即可。
import Five, { FivePluginInits } from '@realsee/five'
import MapviewFloorplanPlugin from '@realsee/dnalogel'
// 初始化 five 实例
const five = new Five({
  plugins: [
    [MapviewFloorplanPlugin, "mapviewFloorplanPlugin", {
      // 初始化参数
    }]
  ]
})
React 初始化
在创建 FiveProvider 组件时将 MapviewFloorplanPlugin 配置在初始化插件参数即可。
import { createFiveProvider } from '@realsee/five/react'
// 创建 FiveProvider 组件
const FiveProvider = createFiveProvider({
    plugins: [
        [MapviewFloorplanPlugin, "mapviewFloorplanPlugin", {
            // 初始化参数
        }]
    ]
})
Vue 初始化
在使用 FiveProvider 时,将 MapviewFloorplanPlugin 配置在初始化插件参数即可。
<template>
  <FiveProvider :fiveInitArgs="fiveInitArgs">
  </FiveProvider>
</template>
<script setup>
import  MapviewFloorplanPlugin from "@realsee/dnalogel/libs/MapviewFloorplanPlugin";
import { FiveProvider, FiveCanvas } from "@realsee/five/vue";
const fiveInitArgs = {
    plugins: [
        [
            MapviewFloorplanPlugin,
            'mapviewFloorplanPlugin', // 自定义插件名称
            {
                // 参数配置
            }
        ]
    ]
}
</script>
载入数据
// 获取插件实例
const pluginInstance = five.plugins.mapviewFloorplan
// 载入数据
pluginInstance.load(floorplanServerData)
插件核心方法
MapviewFloorplanPlugin 提供的核心方法有:
load(data: FloorplanServerData)载入户型图数据
您需要手动载入户型图数据,[FloorplanServerData] 的数据来源请阅读如视开放平台 API
appendTo(wrapper: Element)挂载 DOM 节点
您可以将户型图DOM模块载入您的 HTML 结构中。
async show(opts?: ShowOpts): true展示
调用插件的
show()方法,插件会自动操作five实例到模型俯视状态,并展示当前点位对应楼层的户型图。
const floorplanPlugin = five.plugins.floorplan
floorplanPlugin.show()
floorplanPlugin.show(options)
如果需要自定义展示逻辑,也可以传入
options进行配置,配置项声明如下:
interface ShowOpts {
  floorIndex?: number   // 要展示的楼层,默认是当前点位对应的楼层
  userAction?: boolean  // 在户型图展示时,调用 Five 相关 API 会透传 userAction
  modelOpacity?: number // 展示户型图时,模型对应的透明度,默认是 0.01
  immediately?: boolean // 图片出现是否要立即出现,默认会有 500ms 的动画,注意这个 immediately 不能取消模型动画
}
hide(options?: { isAutoHide?: boolean; userAction?: boolean )
您可以直接调用
hide()方法将户型图隐藏,如果在配置项autoShowEnable设置为true(默认设置)时,当用户在户型图上进行滑动操作时,超过一定滑动幅度会自动关闭户型图。
changeFloor(floorIndex: number)更改户型楼层
有些房源是多楼层的(复式、别墅等),每一层的户型均不同,您可以通过
changeFloor()直接切换对应楼层的户型。
需要注意的是,对于多楼层房源仅会高亮当前楼层的三维模型的模块。
当然,当用户在 VR 全景中走点时,对应的楼层发生变化户型图展示期间也会自动展示当前点位的楼层。
自定义配置
MapviewFloorplanPlugin 支持丰富的自定义配置选项(详见[MapviewFloorplanParameterType]),常见的配置项有:
selector?: string | Element插件挂载的 DOM 节点
DOM 选择器或 DOM 节点实例。 需要注意的是:DOM容器必须与 five canvas 宽高一样,且层级
z-index比 five canvas 高。
scale?: number户型图缩放比例
修改此参数会连同户型图下方的VR模型比例一同更改,默认为
1。
hoverEnable?: boolean是否开启鼠标hover高亮分间
默认值是
false。功能是:当鼠标hover至对应分间时,改分间会高亮。
getLabelElement?: (room: FloorplanRoomItem) => Element | null配置房屋标签
如果配置了这个函数,对于每一个房屋标签,都会调用此函数,并把标签的
Element替换成回调函数返回的ELement。 如果返回结果为null这类空值时,当前标签不展示。
如果不配置此函数,默认为所有标签都展示。 参数FloorplanRoomItem数据结构参考开放平台插件类型声明。
cameraImage?: { style: React.CSSProperties }配置相机图标
style传入的 CSS 样式会覆盖默认样式,包括backgroundImage、width、height等。
autoShowEnable: boolean手势快捷操作
在二维户型图界面进行滑动,会快速切换到模型状态;在模型状态松手时,如果比较接近户型图的展示角度,会自动旋转模型,并展示户型图。默认开启。
事件 Hooks
户型图相关的事件绑定在 hooks 对象上,可以使用 hooks.on 方法监听事件。如:
showAnimationEnded
户型图展示结束,只会在从不可见到可见触发,调用多次show只会触发一次 showAnimationEnded。
five.plugins.mapviewFloorplan.hooks.on('showAnimationEnded', ({ auto, userAction }) => {
  console.log('是否是用户滑动模型导致的户型图自动展示: ', auto)
  console.log('是否是用户行为导致的户型图展示: ', userAction)
  console.log('户型图展示完成')
})
hide
户型图消失完成
five.plugins.mapviewFloorplan.hooks.on('hide', ({ auto, userAction }) => {
  console.log('是否是用户滑动模型导致的户型图自动消失: ', auto)
  console.log('是否是用户行为导致的户型图消失: ', userAction)
  console.log('户型图已经消失')
})