@expofp/floorplan
Version:
Interactive floor plan library for expos and events
4 lines (3 loc) • 2.7 kB
JavaScript
import{Polygon as s,Rect as c}from"@expofp/renderer";import{Box as a,Polygon as d,Rect as x,isBox as u,isPolygon as l,isRect as p}from"@expofp/geometry";import{createCircleCanvas as y}from"./canvases";import{DEFAULT_FONT_LIGHT_URL as w,DEFAULT_FONT_URL as m}from"./fonts";export function boxToRenderer(e){return new c(e.min,e.max,0)}export function rectToRenderer(e){const n=e.size.x/2,t=e.size.y/2,r={x:e.center.x-n,y:e.center.y-t},o={x:e.center.x+n,y:e.center.y+t};return new c(r,o,e.rotation,e.elevation)}export function polygonToRenderer(e){const n=e.elevation,t=e.vertices.map(o=>({x:o.x,y:o.y,z:n})),r=e.indices;return new s(t,r)}export function rectToShapeDef(e,n){return createShapeDef(a.fromSvg(e),n)}export function meshToShapeDef(e,n){if(!e)throw new Error("Create ShapeDef: mesh is not provided");const t=e.positions.map(i=>({x:i[0],y:Math.abs(i[1])})),r=e.cells,o=new d(t,r);return createShapeDef(o,n)}export function createShapeDef(e,n="#000"){let t=e;if(e&&u(e)?t=boxToRenderer(e):e&&p(e)?t=rectToRenderer(e):e&&l(e)&&(t=polygonToRenderer(e)),!t||!(t instanceof s||t instanceof c))throw new Error("Invalid shape definition");return{shape:t,color:n}}export function createImageDef(e,n,t){if(!e)throw new Error("Image source is not provided");const r=rectToRenderer(n);return{source:e,bounds:r,...t}}export function createTextDef(e,n,t,r,o){if(e.length===0)throw new Error("Invalid text lines");const i=rectToRenderer(n);return{lines:e,bounds:i,padding:t,alignment:r,...o}}export function createTextDefLines(e,n,t,r=[void 0,void 0]){const[o,i]=e,f=[{text:o.join(`
`),fontUrl:r[0]||m,color:n,fontSize:t}];return i.length&&f.push({text:i.join(`
`),fontUrl:r[1]||w,color:n,fontSize:t}),f}export function createLineDef({p0:e,p1:n},t="#000",r=10){if(!(e?.x&&e.y||n?.x&&n.y))throw new Error("Line data is invalid");return{points:[{x:e.x,y:e.y},{x:n.x,y:n.y}],color:t,width:r}}export function createLayerDef(e,n,t){if(!e)throw new Error("Layer name is required");return n||(n=[]),{name:e,children:n,...t}}export function createSceneDef(e,n,t,r){let o;return n instanceof SVGRectElement?o=c.fromSvg(n):u(n)&&(o=boxToRenderer(n)),{rootLayer:createLayerDef("root",e),background:t,viewbox:o,memoryLimit:r}}export function createShapeDot(e,n="#000",t=1.5){const r=y(t,n),o=new x(e.center,{x:r.width,y:r.height},e.rotation);return createImageDef(r,o)}export function isDefaultScene(e){return e===void 0}export function pickDefaultScene(e){const n=e.find(t=>isDefaultScene(t.sceneId));if(!n)throw new Error("Default scene not found");return n}export function pickDefaultScenePoint(e){const n=e.find(t=>isDefaultScene(t.sceneId));if(!n)throw new Error("Default scene point not found");return n.point}