@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.32 kB
JavaScript
import{Box as s}from"@expofp/geometry";const x="areamap";export function getSceneVenueRect(e){const n=e?.rootLayer?.children;if(!n?.length)return null;let t=1/0,o=1/0,a=-1/0,c=-1/0;const f=(i,r)=>{!Number.isFinite(i)||!Number.isFinite(r)||(i<t&&(t=i),r<o&&(o=r),i>a&&(a=i),r>c&&(c=r))},u=i=>{const r=i;r.children&&r.children.forEach(u),r.bounds?.min&&r.bounds?.max&&(f(r.bounds.min.x,r.bounds.min.y),f(r.bounds.max.x,r.bounds.max.y)),r.points&&r.points.forEach(l=>f(l.x,l.y))};for(const i of n){const r=i.name;typeof r=="string"&&r.toLowerCase()===x||u(i)}return t>a||o>c?null:s.fromMinMax({x:t,y:o},{x:a,y:c})}export function getVenueFitMarginPercent(e,n){return!e||!n||n.area<=0||e.area/n.area>.1?.15:.25}export function expandRectByPercent(e,n){return n?e.expand({x:e.size.width*n,y:e.size.height*n}):e}export function getVenueFitRect(e,n){const t=getSceneVenueRect(e);return t?expandRectByPercent(t,getVenueFitMarginPercent(t,n)):null}export function resolveVenueFitRect(e){if(e.layerViewbox)return{rect:e.layerViewbox,source:"layer-viewbox"};if(e.explicitArea)return{rect:e.explicitArea,source:"explicit-viewbox"};if(e.layerRectangle)return{rect:e.layerRectangle,source:"layer-rectangle"};const n=getVenueFitRect(e.sceneDef,e.svgArea);return n?{rect:n,source:"scene-derived"}:{rect:e.svgArea,source:"svg-area"}}