@expofp/floorplan
Version:
Interactive floor plan library for expos and events
4 lines (3 loc) • 1.66 kB
JavaScript
import{Box as s,isBox as u,isMesh as p,isPolygon as x,isRect as D,Mesh as S,Rect as d}from"@expofp/geometry";import{circleCanvasCssSize as f,createCircleCanvas as l}from"../components/Map/drawing/config/canvases";import{DEFAULT_FONT_LIGHT_URL as m,DEFAULT_FONT_URL as w}from"./fonts";export function rectToShapeDef(e,t){return createShapeDef(s.fromSvg(e),t)}export function meshToShapeDef(e,t){if(!e)throw new Error("Create ShapeDef: mesh is not provided");const n=e.positions.map(o=>({x:o[0],y:Math.abs(o[1]),z:o[2]??0})),r=e.cells;return createShapeDef(new S(n,r),t)}export function createShapeDef(e,t="#000"){if(!e||!(u(e)||D(e)||x(e)||p(e)))throw new Error("Invalid shape definition");return{shape:e,color:t}}export function createImageDef(e,t,n){if(!e)throw new Error("Image source is not provided");return{source:e,bounds:t,...n}}export function createTextDef(e,t,n,r,o){if(e.length===0)throw new Error("Invalid text lines");return{lines:e,bounds:t,padding:n,alignment:r,...o}}export function createTextDefLines(e,t,n,r=[void 0,void 0]){const[o,i]=e,c=[{text:o.join(`
`),fontUrl:r[0]||w,color:t,fontSize:n}];return i.length&&c.push({text:i.join(`
`),fontUrl:r[1]||m,color:t,fontSize:n}),c}export function createLayerDef(e,t,n){if(!e)throw new Error("Layer name is required");return t||(t=[]),{name:e,children:t,...n}}export function createSceneDef(e,t,n){const r=t instanceof s?t:s.fromSvg(t);return{rootLayer:createLayerDef("root",e),background:n,viewbox:r}}export function createShapeDot(e,t="#000",n=a){const r=l(n,t),o=f(n),i=new d(e.center,{x:o,y:o},e.rotation,e.elevation);return createImageDef(r,i)}const a=1.5;export const SHAPE_DOT_CSS_PX=f(a);