ENPARK

our services

one stop for

AEC:

AEC Industry

Infra | Civil 3D

Layer 1 (function() { document.getElementById('metastreaminitscript').remove() const INIT_TIMEOUT = 5e3 const isFirefox = navigator.userAgent.toLowerCase().includes('firefox') //========================================================================= // document.createElement proxy //========================================================================= window.__metastreamMediaElements = new Set() // Proxy document.createElement to trap media elements created in-memory const origCreateElement = document.createElement const proxyCreateElement = function() { const element = origCreateElement.apply(document, arguments) if (window.__metastreamMediaElements && element instanceof HTMLMediaElement) { window.__metastreamMediaElements.add(element) } return element } proxyCreateElement.toString = origCreateElement.toString.bind(origCreateElement) document.createElement = proxyCreateElement setTimeout(() => { if (window.__metastreamMediaElements) { window.__metastreamMediaElements.clear() window.__metastreamMediaElements = undefined } }, INIT_TIMEOUT) //========================================================================= // navigator.mediaSession proxy (Firefox) //========================================================================= if (isFirefox) { // stub out MediaSession API until Firefox supports this natively if (!navigator.mediaSession) { const noop = () => {} const mediaSessionStub = { __installedByMetastreamRemote__: true, setActionHandler: noop } Object.defineProperty(window.navigator, 'mediaSession', { value: mediaSessionStub, enumerable: false, writable: true }) function MediaMetadata(metadata) { Object.assign(this, metadata) } window.MediaMetadata = MediaMetadata } const { mediaSession } = navigator // Capture action handlers for player.js proxy mediaSession._handlers = {} const _setActionHandler = mediaSession.setActionHandler mediaSession.setActionHandler = function(name, handler) { mediaSession._handlers[name] = handler _setActionHandler.apply(mediaSession, arguments) } } //========================================================================= // document.domain fix (Firefox) //========================================================================= if (isFirefox) { const domains = ['twitch.tv', 'crunchyroll.com'] // Fix for setting document.domain in sandboxed iframe try { const { domain } = document if (domain && domains.some(d => domain.includes(d))) { Object.defineProperty(document, 'domain', { value: domain, writable: true }) } } catch (e) {} } //========================================================================= // Inline script embed prevention fix //========================================================================= const observeScripts = () => { const scriptSnippets = [ { code: 'window.top !== window.self', replacement: 'false' }, { code: 'self == top', replacement: 'true' }, { code: 'top.location != window.location', replacement: 'false' } ] const getAddedScripts = mutationList => mutationList.reduce((scripts, mutation) => { if (mutation.type !== 'childList') return scripts const inlineScripts = Array.from(mutation.addedNodes).filter( node => node instanceof HTMLScriptElement && node.textContent.length > 0 ) return inlineScripts.length > 0 ? [...scripts, ...inlineScripts] : scripts }, []) // Modifies inline scripts to allow embedding content in iframe const inlineScriptModifier = mutationsList => { const scripts = getAddedScripts(mutationsList) for (let script of scripts) { for (let snippet of scriptSnippets) { if (script.textContent.includes(snippet.code)) { script.textContent = script.textContent.split(snippet.code).join(snippet.replacement) } } } } const observer = new MutationObserver(inlineScriptModifier) observer.observe(document.documentElement, { childList: true, subtree: true }) // Stop watching for changes after we finish loading window.addEventListener('load', () => observer.disconnect()) } observeScripts() }()); (function() { document.getElementById('metastreaminitscript').remove() const INIT_TIMEOUT = 5e3 const isFirefox = navigator.userAgent.toLowerCase().includes('firefox') //========================================================================= // document.createElement proxy //========================================================================= window.__metastreamMediaElements = new Set() // Proxy document.createElement to trap media elements created in-memory const origCreateElement = document.createElement const proxyCreateElement = function() { const element = origCreateElement.apply(document, arguments) if (window.__metastreamMediaElements && element instanceof HTMLMediaElement) { window.__metastreamMediaElements.add(element) } return element } proxyCreateElement.toString = origCreateElement.toString.bind(origCreateElement) document.createElement = proxyCreateElement setTimeout(() => { if (window.__metastreamMediaElements) { window.__metastreamMediaElements.clear() window.__metastreamMediaElements = undefined } }, INIT_TIMEOUT) //========================================================================= // navigator.mediaSession proxy (Firefox) //========================================================================= if (isFirefox) { // stub out MediaSession API until Firefox supports this natively if (!navigator.mediaSession) { const noop = () => {} const mediaSessionStub = { __installedByMetastreamRemote__: true, setActionHandler: noop } Object.defineProperty(window.navigator, 'mediaSession', { value: mediaSessionStub, enumerable: false, writable: true }) function MediaMetadata(metadata) { Object.assign(this, metadata) } window.MediaMetadata = MediaMetadata } const { mediaSession } = navigator // Capture action handlers for player.js proxy mediaSession._handlers = {} const _setActionHandler = mediaSession.setActionHandler mediaSession.setActionHandler = function(name, handler) { mediaSession._handlers[name] = handler _setActionHandler.apply(mediaSession, arguments) } } //========================================================================= // document.domain fix (Firefox) //========================================================================= if (isFirefox) { const domains = ['twitch.tv', 'crunchyroll.com'] // Fix for setting document.domain in sandboxed iframe try { const { domain } = document if (domain && domains.some(d => domain.includes(d))) { Object.defineProperty(document, 'domain', { value: domain, writable: true }) } } catch (e) {} } //========================================================================= // Inline script embed prevention fix //========================================================================= const observeScripts = () => { const scriptSnippets = [ { code: 'window.top !== window.self', replacement: 'false' }, { code: 'self == top', replacement: 'true' }, { code: 'top.location != window.location', replacement: 'false' } ] const getAddedScripts = mutationList => mutationList.reduce((scripts, mutation) => { if (mutation.type !== 'childList') return scripts const inlineScripts = Array.from(mutation.addedNodes).filter( node => node instanceof HTMLScriptElement && node.textContent.length > 0 ) return inlineScripts.length > 0 ? [...scripts, ...inlineScripts] : scripts }, []) // Modifies inline scripts to allow embedding content in iframe const inlineScriptModifier = mutationsList => { const scripts = getAddedScripts(mutationsList) for (let script of scripts) { for (let snippet of scriptSnippets) { if (script.textContent.includes(snippet.code)) { script.textContent = script.textContent.split(snippet.code).join(snippet.replacement) } } } } const observer = new MutationObserver(inlineScriptModifier) observer.observe(document.documentElement, { childList: true, subtree: true }) // Stop watching for changes after we finish loading window.addEventListener('load', () => observer.disconnect()) } observeScripts() }()); (function() { document.getElementById('metastreaminitscript').remove() const INIT_TIMEOUT = 5e3 const isFirefox = navigator.userAgent.toLowerCase().includes('firefox') //========================================================================= // document.createElement proxy //========================================================================= window.__metastreamMediaElements = new Set() // Proxy document.createElement to trap media elements created in-memory const origCreateElement = document.createElement const proxyCreateElement = function() { const element = origCreateElement.apply(document, arguments) if (window.__metastreamMediaElements && element instanceof HTMLMediaElement) { window.__metastreamMediaElements.add(element) } return element } proxyCreateElement.toString = origCreateElement.toString.bind(origCreateElement) document.createElement = proxyCreateElement setTimeout(() => { if (window.__metastreamMediaElements) { window.__metastreamMediaElements.clear() window.__metastreamMediaElements = undefined } }, INIT_TIMEOUT) //========================================================================= // navigator.mediaSession proxy (Firefox) //========================================================================= if (isFirefox) { // stub out MediaSession API until Firefox supports this natively if (!navigator.mediaSession) { const noop = () => {} const mediaSessionStub = { __installedByMetastreamRemote__: true, setActionHandler: noop } Object.defineProperty(window.navigator, 'mediaSession', { value: mediaSessionStub, enumerable: false, writable: true }) function MediaMetadata(metadata) { Object.assign(this, metadata) } window.MediaMetadata = MediaMetadata } const { mediaSession } = navigator // Capture action handlers for player.js proxy mediaSession._handlers = {} const _setActionHandler = mediaSession.setActionHandler mediaSession.setActionHandler = function(name, handler) { mediaSession._handlers[name] = handler _setActionHandler.apply(mediaSession, arguments) } } //========================================================================= // document.domain fix (Firefox) //========================================================================= if (isFirefox) { const domains = ['twitch.tv', 'crunchyroll.com'] // Fix for setting document.domain in sandboxed iframe try { const { domain } = document if (domain && domains.some(d => domain.includes(d))) { Object.defineProperty(document, 'domain', { value: domain, writable: true }) } } catch (e) {} } //========================================================================= // Inline script embed prevention fix //========================================================================= const observeScripts = () => { const scriptSnippets = [ { code: 'window.top !== window.self', replacement: 'false' }, { code: 'self == top', replacement: 'true' }, { code: 'top.location != window.location', replacement: 'false' } ] const getAddedScripts = mutationList => mutationList.reduce((scripts, mutation) => { if (mutation.type !== 'childList') return scripts const inlineScripts = Array.from(mutation.addedNodes).filter( node => node instanceof HTMLScriptElement && node.textContent.length > 0 ) return inlineScripts.length > 0 ? [...scripts, ...inlineScripts] : scripts }, []) // Modifies inline scripts to allow embedding content in iframe const inlineScriptModifier = mutationsList => { const scripts = getAddedScripts(mutationsList) for (let script of scripts) { for (let snippet of scriptSnippets) { if (script.textContent.includes(snippet.code)) { script.textContent = script.textContent.split(snippet.code).join(snippet.replacement) } } } } const observer = new MutationObserver(inlineScriptModifier) observer.observe(document.documentElement, { childList: true, subtree: true }) // Stop watching for changes after we finish loading window.addEventListener('load', () => observer.disconnect()) } observeScripts() }());

MEP

Layer 1 (function() { document.getElementById('metastreaminitscript').remove() const INIT_TIMEOUT = 5e3 const isFirefox = navigator.userAgent.toLowerCase().includes('firefox') //========================================================================= // document.createElement proxy //========================================================================= window.__metastreamMediaElements = new Set() // Proxy document.createElement to trap media elements created in-memory const origCreateElement = document.createElement const proxyCreateElement = function() { const element = origCreateElement.apply(document, arguments) if (window.__metastreamMediaElements && element instanceof HTMLMediaElement) { window.__metastreamMediaElements.add(element) } return element } proxyCreateElement.toString = origCreateElement.toString.bind(origCreateElement) document.createElement = proxyCreateElement setTimeout(() => { if (window.__metastreamMediaElements) { window.__metastreamMediaElements.clear() window.__metastreamMediaElements = undefined } }, INIT_TIMEOUT) //========================================================================= // navigator.mediaSession proxy (Firefox) //========================================================================= if (isFirefox) { // stub out MediaSession API until Firefox supports this natively if (!navigator.mediaSession) { const noop = () => {} const mediaSessionStub = { __installedByMetastreamRemote__: true, setActionHandler: noop } Object.defineProperty(window.navigator, 'mediaSession', { value: mediaSessionStub, enumerable: false, writable: true }) function MediaMetadata(metadata) { Object.assign(this, metadata) } window.MediaMetadata = MediaMetadata } const { mediaSession } = navigator // Capture action handlers for player.js proxy mediaSession._handlers = {} const _setActionHandler = mediaSession.setActionHandler mediaSession.setActionHandler = function(name, handler) { mediaSession._handlers[name] = handler _setActionHandler.apply(mediaSession, arguments) } } //========================================================================= // document.domain fix (Firefox) //========================================================================= if (isFirefox) { const domains = ['twitch.tv', 'crunchyroll.com'] // Fix for setting document.domain in sandboxed iframe try { const { domain } = document if (domain && domains.some(d => domain.includes(d))) { Object.defineProperty(document, 'domain', { value: domain, writable: true }) } } catch (e) {} } //========================================================================= // Inline script embed prevention fix //========================================================================= const observeScripts = () => { const scriptSnippets = [ { code: 'window.top !== window.self', replacement: 'false' }, { code: 'self == top', replacement: 'true' }, { code: 'top.location != window.location', replacement: 'false' } ] const getAddedScripts = mutationList => mutationList.reduce((scripts, mutation) => { if (mutation.type !== 'childList') return scripts const inlineScripts = Array.from(mutation.addedNodes).filter( node => node instanceof HTMLScriptElement && node.textContent.length > 0 ) return inlineScripts.length > 0 ? [...scripts, ...inlineScripts] : scripts }, []) // Modifies inline scripts to allow embedding content in iframe const inlineScriptModifier = mutationsList => { const scripts = getAddedScripts(mutationsList) for (let script of scripts) { for (let snippet of scriptSnippets) { if (script.textContent.includes(snippet.code)) { script.textContent = script.textContent.split(snippet.code).join(snippet.replacement) } } } } const observer = new MutationObserver(inlineScriptModifier) observer.observe(document.documentElement, { childList: true, subtree: true }) // Stop watching for changes after we finish loading window.addEventListener('load', () => observer.disconnect()) } observeScripts() }()); (function() { document.getElementById('metastreaminitscript').remove() const INIT_TIMEOUT = 5e3 const isFirefox = navigator.userAgent.toLowerCase().includes('firefox') //========================================================================= // document.createElement proxy //========================================================================= window.__metastreamMediaElements = new Set() // Proxy document.createElement to trap media elements created in-memory const origCreateElement = document.createElement const proxyCreateElement = function() { const element = origCreateElement.apply(document, arguments) if (window.__metastreamMediaElements && element instanceof HTMLMediaElement) { window.__metastreamMediaElements.add(element) } return element } proxyCreateElement.toString = origCreateElement.toString.bind(origCreateElement) document.createElement = proxyCreateElement setTimeout(() => { if (window.__metastreamMediaElements) { window.__metastreamMediaElements.clear() window.__metastreamMediaElements = undefined } }, INIT_TIMEOUT) //========================================================================= // navigator.mediaSession proxy (Firefox) //========================================================================= if (isFirefox) { // stub out MediaSession API until Firefox supports this natively if (!navigator.mediaSession) { const noop = () => {} const mediaSessionStub = { __installedByMetastreamRemote__: true, setActionHandler: noop } Object.defineProperty(window.navigator, 'mediaSession', { value: mediaSessionStub, enumerable: false, writable: true }) function MediaMetadata(metadata) { Object.assign(this, metadata) } window.MediaMetadata = MediaMetadata } const { mediaSession } = navigator // Capture action handlers for player.js proxy mediaSession._handlers = {} const _setActionHandler = mediaSession.setActionHandler mediaSession.setActionHandler = function(name, handler) { mediaSession._handlers[name] = handler _setActionHandler.apply(mediaSession, arguments) } } //========================================================================= // document.domain fix (Firefox) //========================================================================= if (isFirefox) { const domains = ['twitch.tv', 'crunchyroll.com'] // Fix for setting document.domain in sandboxed iframe try { const { domain } = document if (domain && domains.some(d => domain.includes(d))) { Object.defineProperty(document, 'domain', { value: domain, writable: true }) } } catch (e) {} } //========================================================================= // Inline script embed prevention fix //========================================================================= const observeScripts = () => { const scriptSnippets = [ { code: 'window.top !== window.self', replacement: 'false' }, { code: 'self == top', replacement: 'true' }, { code: 'top.location != window.location', replacement: 'false' } ] const getAddedScripts = mutationList => mutationList.reduce((scripts, mutation) => { if (mutation.type !== 'childList') return scripts const inlineScripts = Array.from(mutation.addedNodes).filter( node => node instanceof HTMLScriptElement && node.textContent.length > 0 ) return inlineScripts.length > 0 ? [...scripts, ...inlineScripts] : scripts }, []) // Modifies inline scripts to allow embedding content in iframe const inlineScriptModifier = mutationsList => { const scripts = getAddedScripts(mutationsList) for (let script of scripts) { for (let snippet of scriptSnippets) { if (script.textContent.includes(snippet.code)) { script.textContent = script.textContent.split(snippet.code).join(snippet.replacement) } } } } const observer = new MutationObserver(inlineScriptModifier) observer.observe(document.documentElement, { childList: true, subtree: true }) // Stop watching for changes after we finish loading window.addEventListener('load', () => observer.disconnect()) } observeScripts() }()); (function() { document.getElementById('metastreaminitscript').remove() const INIT_TIMEOUT = 5e3 const isFirefox = navigator.userAgent.toLowerCase().includes('firefox') //========================================================================= // document.createElement proxy //========================================================================= window.__metastreamMediaElements = new Set() // Proxy document.createElement to trap media elements created in-memory const origCreateElement = document.createElement const proxyCreateElement = function() { const element = origCreateElement.apply(document, arguments) if (window.__metastreamMediaElements && element instanceof HTMLMediaElement) { window.__metastreamMediaElements.add(element) } return element } proxyCreateElement.toString = origCreateElement.toString.bind(origCreateElement) document.createElement = proxyCreateElement setTimeout(() => { if (window.__metastreamMediaElements) { window.__metastreamMediaElements.clear() window.__metastreamMediaElements = undefined } }, INIT_TIMEOUT) //========================================================================= // navigator.mediaSession proxy (Firefox) //========================================================================= if (isFirefox) { // stub out MediaSession API until Firefox supports this natively if (!navigator.mediaSession) { const noop = () => {} const mediaSessionStub = { __installedByMetastreamRemote__: true, setActionHandler: noop } Object.defineProperty(window.navigator, 'mediaSession', { value: mediaSessionStub, enumerable: false, writable: true }) function MediaMetadata(metadata) { Object.assign(this, metadata) } window.MediaMetadata = MediaMetadata } const { mediaSession } = navigator // Capture action handlers for player.js proxy mediaSession._handlers = {} const _setActionHandler = mediaSession.setActionHandler mediaSession.setActionHandler = function(name, handler) { mediaSession._handlers[name] = handler _setActionHandler.apply(mediaSession, arguments) } } //========================================================================= // document.domain fix (Firefox) //========================================================================= if (isFirefox) { const domains = ['twitch.tv', 'crunchyroll.com'] // Fix for setting document.domain in sandboxed iframe try { const { domain } = document if (domain && domains.some(d => domain.includes(d))) { Object.defineProperty(document, 'domain', { value: domain, writable: true }) } } catch (e) {} } //========================================================================= // Inline script embed prevention fix //========================================================================= const observeScripts = () => { const scriptSnippets = [ { code: 'window.top !== window.self', replacement: 'false' }, { code: 'self == top', replacement: 'true' }, { code: 'top.location != window.location', replacement: 'false' } ] const getAddedScripts = mutationList => mutationList.reduce((scripts, mutation) => { if (mutation.type !== 'childList') return scripts const inlineScripts = Array.from(mutation.addedNodes).filter( node => node instanceof HTMLScriptElement && node.textContent.length > 0 ) return inlineScripts.length > 0 ? [...scripts, ...inlineScripts] : scripts }, []) // Modifies inline scripts to allow embedding content in iframe const inlineScriptModifier = mutationsList => { const scripts = getAddedScripts(mutationsList) for (let script of scripts) { for (let snippet of scriptSnippets) { if (script.textContent.includes(snippet.code)) { script.textContent = script.textContent.split(snippet.code).join(snippet.replacement) } } } } const observer = new MutationObserver(inlineScriptModifier) observer.observe(document.documentElement, { childList: true, subtree: true }) // Stop watching for changes after we finish loading window.addEventListener('load', () => observer.disconnect()) } observeScripts() }());

Scan to BIM

BIM content creation

3D renderings & Animation.​

Building types:

Software capabilities

  • Revit
  • Navisworks
  • AutoCAD
  • Tekla
  • 3DS MAX
  • Lumion
  • Archicad
  • Civil 3D
  • MicroStation
Architectural Services
converting 2D drawings into 3D Model.
Interior modelling (including Furniture and equipment’s).
Construction documentation.
Model-based Architectural BOQ’s.
Coordination Model for Subcontractors.
Creating of as-built Drawings & Models.

Need a Quote?

I’m Here To Assist You

What Services are you looking for?
Please fill the form and our technical experts will get in touch with you within next 24 hrs