{"id":27181,"date":"2025-10-31T05:39:07","date_gmt":"2025-10-31T04:39:07","guid":{"rendered":"https:\/\/www.ingexium.com\/engineering-architecture\/"},"modified":"2026-04-05T08:52:55","modified_gmt":"2026-04-05T06:52:55","slug":"engineering-architecture","status":"publish","type":"page","link":"https:\/\/www.ingexium.com\/en\/engineering-architecture\/","title":{"rendered":"Engineering &amp; Architecture"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"27181\" class=\"elementor elementor-27181 elementor-25432\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2141bfd elementor-section-full_width custom-row elementor-section-height-default elementor-section-height-default\" data-id=\"2141bfd\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;thegem_custom_css&quot;:&quot; #home_wave{\\n    position: absolute;\\n    width:100%;\\n    height: 100%;\\n    left: 0;\\n    top: -200px;\\n    z-index: 0;\\n}\\n.custom-row canvas {\\n\\tposition: absolute;\\n\\tbottom: -500px;\\n\\tleft: 0;\\n\\tz-index: 0;\\n}&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2c87fc0\" data-id=\"2c87fc0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-3478289 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3478289\" data-element_type=\"section\" data-e-type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-thegem\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-cbb13ad\" data-id=\"cbb13ad\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8061ac8 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"8061ac8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"title-h1 elementor-heading-title elementor-size-default\">Engineering &amp; Architecture<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36fb4ee elementor-widget__width-initial flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"36fb4ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"title-h5 light elementor-heading-title elementor-size-default\">Integrated design between form, function and structural behavior.<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-866b236 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"866b236\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<div class=\"title-h2\">Architectural and structural solutions for efficiency and durability<\/div>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-902f4fd elementor-hidden-tablet\" data-id=\"902f4fd\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-d1af77b elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"d1af77b\" data-element_type=\"section\" data-e-type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-0904e40\" data-id=\"0904e40\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-06c6a4b\" data-id=\"06c6a4b\" data-element_type=\"column\" data-e-type=\"column\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4e08214 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"4e08214\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-67aec85 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-html\" data-id=\"67aec85\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/94\/three.min.js\" type=\"text\/javascript\"><\/script>\r\n\r\n<div id=\"home_wave\"><\/div>\r\n\r\n<script type=\"text\/javascript\">\r\n(function ($) {\r\n    $(function () {\r\n\/**\r\n * @author mrdoob \/ http:\/\/mrdoob.com\/\r\n *\/\r\n\r\nTHREE.SpriteCanvasMaterial = function ( parameters ) {\r\n\r\n\tTHREE.Material.call( this );\r\n\r\n\tthis.type = 'SpriteCanvasMaterial';\r\n\r\n\tthis.color = new THREE.Color( 0x1b1a1a );\r\n\tthis.program = function () {};\r\n\r\n\tthis.setValues( parameters );\r\n\r\n};\r\n\r\nTHREE.SpriteCanvasMaterial.prototype = Object.create( THREE.Material.prototype );\r\nTHREE.SpriteCanvasMaterial.prototype.constructor = THREE.SpriteCanvasMaterial;\r\nTHREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial = true;\r\n\r\nTHREE.SpriteCanvasMaterial.prototype.clone = function () {\r\n\r\n\tvar material = new THREE.SpriteCanvasMaterial();\r\n\r\n\tmaterial.copy( this );\r\n\tmaterial.color.copy( this.color );\r\n\tmaterial.program = this.program;\r\n\r\n\treturn material;\r\n\r\n};\r\n\r\n\/\/\r\n\r\nTHREE.CanvasRenderer = function ( parameters ) {\r\n\r\n\tconsole.log( 'THREE.CanvasRenderer', THREE.REVISION );\r\n\r\n\tparameters = parameters || {};\r\n\r\n\tvar _this = this,\r\n\t\t_renderData, _elements, _lights,\r\n\t\t_projector = new THREE.Projector(),\r\n\r\n\t\t_canvas = parameters.canvas !== undefined\r\n\t\t\t\t ? parameters.canvas\r\n\t\t\t\t : document.createElement( 'canvas' ),\r\n\r\n\t\t_canvasWidth = _canvas.width,\r\n\t\t_canvasHeight = _canvas.height,\r\n\t\t_canvasWidthHalf = Math.floor( _canvasWidth \/ 2 ),\r\n\t\t_canvasHeightHalf = Math.floor( _canvasHeight \/ 2 ),\r\n\r\n\t\t_viewportX = 0,\r\n\t\t_viewportY = 0,\r\n\t\t_viewportWidth = _canvasWidth,\r\n\t\t_viewportHeight = _canvasHeight,\r\n\r\n\t\t_pixelRatio = 1,\r\n\r\n\t\t_context = _canvas.getContext( '2d', {\r\n\t\t\talpha: parameters.alpha === true\r\n\t\t} ),\r\n\r\n\t\t_clearColor = new THREE.Color( 0xffffff ),\r\n\t\t_clearAlpha = parameters.alpha === true ? 0 : 1,\r\n\r\n\t\t_contextGlobalAlpha = 1,\r\n\t\t_contextGlobalCompositeOperation = 0,\r\n\t\t_contextStrokeStyle = null,\r\n\t\t_contextFillStyle = null,\r\n\t\t_contextLineWidth = null,\r\n\t\t_contextLineCap = null,\r\n\t\t_contextLineJoin = null,\r\n\t\t_contextLineDash = [],\r\n\r\n\t\t_v1, _v2, _v3,\r\n\r\n\t\t_v1x, _v1y, _v2x, _v2y, _v3x, _v3y,\r\n\r\n\t\t_color = new THREE.Color(),\r\n\r\n\t\t_diffuseColor = new THREE.Color(),\r\n\t\t_emissiveColor = new THREE.Color(),\r\n\r\n\t\t_lightColor = new THREE.Color(),\r\n\r\n\t\t_patterns = {},\r\n\r\n\t\t_uvs,\r\n\t\t_uv1x, _uv1y, _uv2x, _uv2y, _uv3x, _uv3y,\r\n\r\n\t\t_clipBox = new THREE.Box2(),\r\n\t\t_clearBox = new THREE.Box2(),\r\n\t\t_elemBox = new THREE.Box2(),\r\n\r\n\t\t_ambientLight = new THREE.Color(),\r\n\t\t_directionalLights = new THREE.Color(),\r\n\t\t_pointLights = new THREE.Color(),\r\n\r\n\t\t_vector3 = new THREE.Vector3(), \/\/ Needed for PointLight\r\n\t\t_centroid = new THREE.Vector3(),\r\n\t\t_normal = new THREE.Vector3(),\r\n\t\t_normalViewMatrix = new THREE.Matrix3();\r\n\r\n\t\/* TODO\r\n\t_canvas.mozImageSmoothingEnabled = false;\r\n\t_canvas.webkitImageSmoothingEnabled = false;\r\n\t_canvas.msImageSmoothingEnabled = false;\r\n\t_canvas.imageSmoothingEnabled = false;\r\n\t*\/\r\n\r\n\t\/\/ dash+gap fallbacks for Firefox and everything else\r\n\r\n\tif ( _context.setLineDash === undefined ) {\r\n\r\n\t\t_context.setLineDash = function () {};\r\n\r\n\t}\r\n\r\n\tthis.domElement = _canvas;\r\n\r\n\tthis.autoClear = true;\r\n\tthis.sortObjects = true;\r\n\tthis.sortElements = true;\r\n\r\n\tthis.info = {\r\n\r\n\t\trender: {\r\n\r\n\t\t\tvertices: 0,\r\n\t\t\tfaces: 0\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t\/\/ WebGLRenderer compatibility\r\n\r\n\tthis.supportsVertexTextures = function () {};\r\n\tthis.setFaceCulling = function () {};\r\n\r\n\t\/\/ API\r\n\r\n\tthis.getContext = function () {\r\n\r\n\t\treturn _context;\r\n\r\n\t};\r\n\r\n\tthis.getContextAttributes = function () {\r\n\r\n\t\treturn _context.getContextAttributes();\r\n\r\n\t};\r\n\r\n\tthis.getPixelRatio = function () {\r\n\r\n\t\treturn _pixelRatio;\r\n\r\n\t};\r\n\r\n\tthis.setPixelRatio = function ( value ) {\r\n\r\n\t\tif ( value !== undefined ) _pixelRatio = value;\r\n\r\n\t};\r\n\r\n\tthis.setSize = function ( width, height, updateStyle ) {\r\n\r\n\t\t_canvasWidth = width * _pixelRatio;\r\n\t\t_canvasHeight = height * _pixelRatio;\r\n\r\n\t\t_canvas.width = _canvasWidth;\r\n\t\t_canvas.height = _canvasHeight;\r\n\r\n\t\t_canvasWidthHalf = Math.floor( _canvasWidth \/ 2 );\r\n\t\t_canvasHeightHalf = Math.floor( _canvasHeight \/ 2 );\r\n\r\n\t\tif ( updateStyle !== false ) {\r\n\r\n\t\t\t_canvas.style.width = width + 'px';\r\n\t\t\t_canvas.style.height = height + 'px';\r\n\r\n\t\t}\r\n\r\n\t\t_clipBox.min.set( - _canvasWidthHalf, - _canvasHeightHalf );\r\n\t\t_clipBox.max.set(   _canvasWidthHalf,   _canvasHeightHalf );\r\n\r\n\t\t_clearBox.min.set( - _canvasWidthHalf, - _canvasHeightHalf );\r\n\t\t_clearBox.max.set(   _canvasWidthHalf,   _canvasHeightHalf );\r\n\r\n\t\t_contextGlobalAlpha = 1;\r\n\t\t_contextGlobalCompositeOperation = 0;\r\n\t\t_contextStrokeStyle = null;\r\n\t\t_contextFillStyle = null;\r\n\t\t_contextLineWidth = null;\r\n\t\t_contextLineCap = null;\r\n\t\t_contextLineJoin = null;\r\n\r\n\t\tthis.setViewport( 0, 0, width, height );\r\n\r\n\t};\r\n\r\n\tthis.setViewport = function ( x, y, width, height ) {\r\n\r\n\t\t_viewportX = x * _pixelRatio;\r\n\t\t_viewportY = y * _pixelRatio;\r\n\r\n\t\t_viewportWidth = width * _pixelRatio;\r\n\t\t_viewportHeight = height * _pixelRatio;\r\n\r\n\t};\r\n\r\n\tthis.setScissor = function () {};\r\n\tthis.setScissorTest = function () {};\r\n\r\n\tthis.setClearColor = function ( color, alpha ) {\r\n\r\n\t\t_clearColor.set( color );\r\n\t\t_clearAlpha = alpha !== undefined ? alpha : 1;\r\n\r\n\t\t_clearBox.min.set( - _canvasWidthHalf, - _canvasHeightHalf );\r\n\t\t_clearBox.max.set(   _canvasWidthHalf,   _canvasHeightHalf );\r\n\r\n\t};\r\n\r\n\tthis.setClearColorHex = function ( hex, alpha ) {\r\n\r\n\t\tconsole.warn( 'THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.' );\r\n\t\tthis.setClearColor( hex, alpha );\r\n\r\n\t};\r\n\r\n\tthis.getClearColor = function () {\r\n\r\n\t\treturn _clearColor;\r\n\r\n\t};\r\n\r\n\tthis.getClearAlpha = function () {\r\n\r\n\t\treturn _clearAlpha;\r\n\r\n\t};\r\n\r\n\tthis.getMaxAnisotropy = function () {\r\n\r\n\t\treturn 0;\r\n\r\n\t};\r\n\r\n\tthis.clear = function () {\r\n\r\n\t\tif ( _clearBox.isEmpty() === false ) {\r\n\r\n\t\t\t_clearBox.intersect( _clipBox );\r\n\t\t\t_clearBox.expandByScalar( 2 );\r\n\r\n\t\t\t_clearBox.min.x =   _clearBox.min.x + _canvasWidthHalf;\r\n\t\t\t_clearBox.min.y = - _clearBox.min.y + _canvasHeightHalf;\t\t\/\/ higher y value !\r\n\t\t\t_clearBox.max.x =   _clearBox.max.x + _canvasWidthHalf;\r\n\t\t\t_clearBox.max.y = - _clearBox.max.y + _canvasHeightHalf;\t\t\/\/ lower y value !\r\n\r\n\t\t\tif ( _clearAlpha < 1 ) {\r\n\r\n\t\t\t\t_context.clearRect(\r\n\t\t\t\t\t_clearBox.min.x | 0,\r\n\t\t\t\t\t_clearBox.max.y | 0,\r\n\t\t\t\t\t( _clearBox.max.x - _clearBox.min.x ) | 0,\r\n\t\t\t\t\t( _clearBox.min.y - _clearBox.max.y ) | 0\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( _clearAlpha > 0 ) {\r\n\r\n\t\t\t\tsetBlending( THREE.NormalBlending );\r\n\t\t\t\tsetOpacity( 1 );\r\n\r\n\t\t\t\tsetFillStyle( 'rgba(' + Math.floor( _clearColor.r * 255 ) + ',' + Math.floor( _clearColor.g * 255 ) + ',' + Math.floor( _clearColor.b * 255 ) + ',' + _clearAlpha + ')' );\r\n\r\n\t\t\t\t_context.fillRect(\r\n\t\t\t\t\t_clearBox.min.x | 0,\r\n\t\t\t\t\t_clearBox.max.y | 0,\r\n\t\t\t\t\t( _clearBox.max.x - _clearBox.min.x ) | 0,\r\n\t\t\t\t\t( _clearBox.min.y - _clearBox.max.y ) | 0\r\n\t\t\t\t);\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_clearBox.makeEmpty();\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\t\/\/ compatibility\r\n\r\n\tthis.clearColor = function () {};\r\n\tthis.clearDepth = function () {};\r\n\tthis.clearStencil = function () {};\r\n\r\n\tthis.render = function ( scene, camera ) {\r\n\r\n\t\tif ( camera.isCamera === undefined ) {\r\n\r\n\t\t\tconsole.error( 'THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.' );\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\tvar background = scene.background;\r\n\r\n\t\tif ( background && background.isColor ) {\r\n\r\n\t\t\tsetFillStyle( 'rgb(' + Math.floor( background.r * 255 ) + ',' + Math.floor( background.g * 255 ) + ',' + Math.floor( background.b * 255 ) + ')' );\r\n\t\t\t_context.fillRect( 0, 0, _canvasWidth, _canvasHeight );\r\n\r\n\t\t} else if ( this.autoClear === true ) {\r\n\r\n\t\t\tthis.clear();\r\n\r\n\t\t}\r\n\r\n\t\t_this.info.render.vertices = 0;\r\n\t\t_this.info.render.faces = 0;\r\n\r\n\t\t_context.setTransform( _viewportWidth \/ _canvasWidth, 0, 0, - _viewportHeight \/ _canvasHeight, _viewportX, _canvasHeight - _viewportY );\r\n\t\t_context.translate( _canvasWidthHalf, _canvasHeightHalf );\r\n\r\n\t\t_renderData = _projector.projectScene( scene, camera, this.sortObjects, this.sortElements );\r\n\t\t_elements = _renderData.elements;\r\n\t\t_lights = _renderData.lights;\r\n\r\n\t\t_normalViewMatrix.getNormalMatrix( camera.matrixWorldInverse );\r\n\r\n\t\t\/* DEBUG\r\n\t\tsetFillStyle( 'rgba( 0, 255, 255, 0.5 )' );\r\n\t\t_context.fillRect( _clipBox.min.x, _clipBox.min.y, _clipBox.max.x - _clipBox.min.x, _clipBox.max.y - _clipBox.min.y );\r\n\t\t*\/\r\n\r\n\t\tcalculateLights();\r\n\r\n\t\tfor ( var e = 0, el = _elements.length; e < el; e ++ ) {\r\n\r\n\t\t\tvar element = _elements[ e ];\r\n\r\n\t\t\tvar material = element.material;\r\n\r\n\t\t\tif ( material === undefined || material.opacity === 0 ) continue;\r\n\r\n\t\t\t_elemBox.makeEmpty();\r\n\r\n\t\t\tif ( element instanceof THREE.RenderableSprite ) {\r\n\r\n\t\t\t\t_v1 = element;\r\n\t\t\t\t_v1.x *= _canvasWidthHalf; _v1.y *= _canvasHeightHalf;\r\n\r\n\t\t\t\trenderSprite( _v1, element, material );\r\n\r\n\t\t\t} else if ( element instanceof THREE.RenderableLine ) {\r\n\r\n\t\t\t\t_v1 = element.v1; _v2 = element.v2;\r\n\r\n\t\t\t\t_v1.positionScreen.x *= _canvasWidthHalf; _v1.positionScreen.y *= _canvasHeightHalf;\r\n\t\t\t\t_v2.positionScreen.x *= _canvasWidthHalf; _v2.positionScreen.y *= _canvasHeightHalf;\r\n\r\n\t\t\t\t_elemBox.setFromPoints( [\r\n\t\t\t\t\t_v1.positionScreen,\r\n\t\t\t\t\t_v2.positionScreen\r\n\t\t\t\t] );\r\n\r\n\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\r\n\r\n\t\t\t\t\trenderLine( _v1, _v2, element, material );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( element instanceof THREE.RenderableFace ) {\r\n\r\n\t\t\t\t_v1 = element.v1; _v2 = element.v2; _v3 = element.v3;\r\n\r\n\t\t\t\tif ( _v1.positionScreen.z < - 1 || _v1.positionScreen.z > 1 ) continue;\r\n\t\t\t\tif ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;\r\n\t\t\t\tif ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;\r\n\r\n\t\t\t\t_v1.positionScreen.x *= _canvasWidthHalf; _v1.positionScreen.y *= _canvasHeightHalf;\r\n\t\t\t\t_v2.positionScreen.x *= _canvasWidthHalf; _v2.positionScreen.y *= _canvasHeightHalf;\r\n\t\t\t\t_v3.positionScreen.x *= _canvasWidthHalf; _v3.positionScreen.y *= _canvasHeightHalf;\r\n\r\n\t\t\t\tif ( material.overdraw > 0 ) {\r\n\r\n\t\t\t\t\texpand( _v1.positionScreen, _v2.positionScreen, material.overdraw );\r\n\t\t\t\t\texpand( _v2.positionScreen, _v3.positionScreen, material.overdraw );\r\n\t\t\t\t\texpand( _v3.positionScreen, _v1.positionScreen, material.overdraw );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_elemBox.setFromPoints( [\r\n\t\t\t\t\t_v1.positionScreen,\r\n\t\t\t\t\t_v2.positionScreen,\r\n\t\t\t\t\t_v3.positionScreen\r\n\t\t\t\t] );\r\n\r\n\t\t\t\tif ( _clipBox.intersectsBox( _elemBox ) === true ) {\r\n\r\n\t\t\t\t\trenderFace3( _v1, _v2, _v3, 0, 1, 2, element, material );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t\/* DEBUG\r\n\t\t\tsetLineWidth( 1 );\r\n\t\t\tsetStrokeStyle( 'rgba( 0, 255, 0, 0.5 )' );\r\n\t\t\t_context.strokeRect( _elemBox.min.x, _elemBox.min.y, _elemBox.max.x - _elemBox.min.x, _elemBox.max.y - _elemBox.min.y );\r\n\t\t\t*\/\r\n\r\n\t\t\t_clearBox.union( _elemBox );\r\n\r\n\t\t}\r\n\r\n\t\t\/* DEBUG\r\n\t\tsetLineWidth( 1 );\r\n\t\tsetStrokeStyle( 'rgba( 255, 0, 0, 0.5 )' );\r\n\t\t_context.strokeRect( _clearBox.min.x, _clearBox.min.y, _clearBox.max.x - _clearBox.min.x, _clearBox.max.y - _clearBox.min.y );\r\n\t\t*\/\r\n\r\n\t\t_context.setTransform( 1, 0, 0, 1, 0, 0 );\r\n\r\n\t};\r\n\r\n\t\/\/\r\n\r\n\tfunction calculateLights() {\r\n\r\n\t\t_ambientLight.setRGB( 0, 0, 0 );\r\n\t\t_directionalLights.setRGB( 0, 0, 0 );\r\n\t\t_pointLights.setRGB( 0, 0, 0 );\r\n\r\n\t\tfor ( var l = 0, ll = _lights.length; l < ll; l ++ ) {\r\n\r\n\t\t\tvar light = _lights[ l ];\r\n\t\t\tvar lightColor = light.color;\r\n\r\n\t\t\tif ( light.isAmbientLight ) {\r\n\r\n\t\t\t\t_ambientLight.add( lightColor );\r\n\r\n\t\t\t} else if ( light.isDirectionalLight ) {\r\n\r\n\t\t\t\t\/\/ for sprites\r\n\r\n\t\t\t\t_directionalLights.add( lightColor );\r\n\r\n\t\t\t} else if ( light.isPointLight ) {\r\n\r\n\t\t\t\t\/\/ for sprites\r\n\r\n\t\t\t\t_pointLights.add( lightColor );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction calculateLight( position, normal, color ) {\r\n\r\n\t\tfor ( var l = 0, ll = _lights.length; l < ll; l ++ ) {\r\n\r\n\t\t\tvar light = _lights[ l ];\r\n\r\n\t\t\t_lightColor.copy( light.color );\r\n\r\n\t\t\tif ( light.isDirectionalLight ) {\r\n\r\n\t\t\t\tvar lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld ).normalize();\r\n\r\n\t\t\t\tvar amount = normal.dot( lightPosition );\r\n\r\n\t\t\t\tif ( amount <= 0 ) continue;\r\n\r\n\t\t\t\tamount *= light.intensity;\r\n\r\n\t\t\t\tcolor.add( _lightColor.multiplyScalar( amount ) );\r\n\r\n\t\t\t} else if ( light.isPointLight ) {\r\n\r\n\t\t\t\tvar lightPosition = _vector3.setFromMatrixPosition( light.matrixWorld );\r\n\r\n\t\t\t\tvar amount = normal.dot( _vector3.subVectors( lightPosition, position ).normalize() );\r\n\r\n\t\t\t\tif ( amount <= 0 ) continue;\r\n\r\n\t\t\t\tamount *= light.distance == 0 ? 1 : 1 - Math.min( position.distanceTo( lightPosition ) \/ light.distance, 1 );\r\n\r\n\t\t\t\tif ( amount == 0 ) continue;\r\n\r\n\t\t\t\tamount *= light.intensity;\r\n\r\n\t\t\t\tcolor.add( _lightColor.multiplyScalar( amount ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction renderSprite( v1, element, material ) {\r\n\r\n\t\tsetOpacity( material.opacity );\r\n\t\tsetBlending( material.blending );\r\n\r\n\t\tvar scaleX = element.scale.x * _canvasWidthHalf;\r\n\t\tvar scaleY = element.scale.y * _canvasHeightHalf;\r\n\r\n\t\tvar dist = Math.sqrt( scaleX * scaleX + scaleY * scaleY ); \/\/ allow for rotated sprite\r\n\t\t_elemBox.min.set( v1.x - dist, v1.y - dist );\r\n\t\t_elemBox.max.set( v1.x + dist, v1.y + dist );\r\n\r\n\t\tif ( material.isSpriteMaterial ) {\r\n\r\n\t\t\tvar texture = material.map;\r\n\r\n\t\t\tif ( texture !== null ) {\r\n\r\n\t\t\t\tvar pattern = _patterns[ texture.id ];\r\n\r\n\t\t\t\tif ( pattern === undefined || pattern.version !== texture.version ) {\r\n\r\n\t\t\t\t\tpattern = textureToPattern( texture );\r\n\t\t\t\t\t_patterns[ texture.id ] = pattern;\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( pattern.canvas !== undefined ) {\r\n\r\n\t\t\t\t\tsetFillStyle( pattern.canvas );\r\n\r\n\t\t\t\t\tvar bitmap = texture.image;\r\n\r\n\t\t\t\t\tvar ox = bitmap.width * texture.offset.x;\r\n\t\t\t\t\tvar oy = bitmap.height * texture.offset.y;\r\n\r\n\t\t\t\t\tvar sx = bitmap.width * texture.repeat.x;\r\n\t\t\t\t\tvar sy = bitmap.height * texture.repeat.y;\r\n\r\n\t\t\t\t\tvar cx = scaleX \/ sx;\r\n\t\t\t\t\tvar cy = scaleY \/ sy;\r\n\r\n\t\t\t\t\t_context.save();\r\n\t\t\t\t\t_context.translate( v1.x, v1.y );\r\n\t\t\t\t\tif ( material.rotation !== 0 ) _context.rotate( material.rotation );\r\n\t\t\t\t\t_context.translate( - scaleX \/ 2, - scaleY \/ 2 );\r\n\t\t\t\t\t_context.scale( cx, cy );\r\n\t\t\t\t\t_context.translate( - ox, - oy );\r\n\t\t\t\t\t_context.fillRect( ox, oy, sx, sy );\r\n\t\t\t\t\t_context.restore();\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t\/\/ no texture\r\n\r\n\t\t\t\tsetFillStyle( material.color.getStyle() );\r\n\r\n\t\t\t\t_context.save();\r\n\t\t\t\t_context.translate( v1.x, v1.y );\r\n\t\t\t\tif ( material.rotation !== 0 ) _context.rotate( material.rotation );\r\n\t\t\t\t_context.scale( scaleX, - scaleY );\r\n\t\t\t\t_context.fillRect( - 0.5, - 0.5, 1, 1 );\r\n\t\t\t\t_context.restore();\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( material.isSpriteCanvasMaterial ) {\r\n\r\n\t\t\tsetStrokeStyle( material.color.getStyle() );\r\n\t\t\tsetFillStyle( material.color.getStyle() );\r\n\r\n\t\t\t_context.save();\r\n\t\t\t_context.translate( v1.x, v1.y );\r\n\t\t\tif ( material.rotation !== 0 ) _context.rotate( material.rotation );\r\n\t\t\t_context.scale( scaleX, scaleY );\r\n\r\n\t\t\tmaterial.program( _context );\r\n\r\n\t\t\t_context.restore();\r\n\r\n\t\t} else if ( material.isPointsMaterial ) {\r\n\r\n\t\t\tsetFillStyle( material.color.getStyle() );\r\n\r\n\t\t\t_context.save();\r\n\t\t\t_context.translate( v1.x, v1.y );\r\n\t\t\tif ( material.rotation !== 0 ) _context.rotate( material.rotation );\r\n\t\t\t_context.scale( scaleX * material.size, - scaleY * material.size );\r\n\t\t\t_context.fillRect( - 0.5, - 0.5, 1, 1 );\r\n\t\t\t_context.restore();\r\n\r\n\t\t}\r\n\r\n\t\t\/* DEBUG\r\n\t\tsetStrokeStyle( 'rgb(255,255,0)' );\r\n\t\t_context.beginPath();\r\n\t\t_context.moveTo( v1.x - 10, v1.y );\r\n\t\t_context.lineTo( v1.x + 10, v1.y );\r\n\t\t_context.moveTo( v1.x, v1.y - 10 );\r\n\t\t_context.lineTo( v1.x, v1.y + 10 );\r\n\t\t_context.stroke();\r\n\t\t*\/\r\n\r\n\t}\r\n\r\n\tfunction renderLine( v1, v2, element, material ) {\r\n\r\n\t\tsetOpacity( material.opacity );\r\n\t\tsetBlending( material.blending );\r\n\r\n\t\t_context.beginPath();\r\n\t\t_context.moveTo( v1.positionScreen.x, v1.positionScreen.y );\r\n\t\t_context.lineTo( v2.positionScreen.x, v2.positionScreen.y );\r\n\r\n\t\tif ( material.isLineBasicMaterial ) {\r\n\r\n\t\t\tsetLineWidth( material.linewidth );\r\n\t\t\tsetLineCap( material.linecap );\r\n\t\t\tsetLineJoin( material.linejoin );\r\n\r\n\t\t\tif ( material.vertexColors !== THREE.VertexColors ) {\r\n\r\n\t\t\t\tsetStrokeStyle( material.color.getStyle() );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar colorStyle1 = element.vertexColors[ 0 ].getStyle();\r\n\t\t\t\tvar colorStyle2 = element.vertexColors[ 1 ].getStyle();\r\n\r\n\t\t\t\tif ( colorStyle1 === colorStyle2 ) {\r\n\r\n\t\t\t\t\tsetStrokeStyle( colorStyle1 );\r\n\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\ttry {\r\n\r\n\t\t\t\t\t\tvar grad = _context.createLinearGradient(\r\n\t\t\t\t\t\t\tv1.positionScreen.x,\r\n\t\t\t\t\t\t\tv1.positionScreen.y,\r\n\t\t\t\t\t\t\tv2.positionScreen.x,\r\n\t\t\t\t\t\t\tv2.positionScreen.y\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tgrad.addColorStop( 0, colorStyle1 );\r\n\t\t\t\t\t\tgrad.addColorStop( 1, colorStyle2 );\r\n\r\n\t\t\t\t\t} catch ( exception ) {\r\n\r\n\t\t\t\t\t\tgrad = colorStyle1;\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tsetStrokeStyle( grad );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_context.stroke();\r\n\t\t\t_elemBox.expandByScalar( material.linewidth * 2 );\r\n\r\n\t\t} else if ( material.isLineDashedMaterial ) {\r\n\r\n\t\t\tsetLineWidth( material.linewidth );\r\n\t\t\tsetLineCap( material.linecap );\r\n\t\t\tsetLineJoin( material.linejoin );\r\n\t\t\tsetStrokeStyle( material.color.getStyle() );\r\n\t\t\tsetLineDash( [ material.dashSize, material.gapSize ] );\r\n\r\n\t\t\t_context.stroke();\r\n\r\n\t\t\t_elemBox.expandByScalar( material.linewidth * 2 );\r\n\r\n\t\t\tsetLineDash( [] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction renderFace3( v1, v2, v3, uv1, uv2, uv3, element, material ) {\r\n\r\n\t\t_this.info.render.vertices += 3;\r\n\t\t_this.info.render.faces ++;\r\n\r\n\t\tsetOpacity( material.opacity );\r\n\t\tsetBlending( material.blending );\r\n\r\n\t\t_v1x = v1.positionScreen.x; _v1y = v1.positionScreen.y;\r\n\t\t_v2x = v2.positionScreen.x; _v2y = v2.positionScreen.y;\r\n\t\t_v3x = v3.positionScreen.x; _v3y = v3.positionScreen.y;\r\n\r\n\t\tdrawTriangle( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y );\r\n\r\n\t\tif ( ( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial ) && material.map === null ) {\r\n\r\n\t\t\t_diffuseColor.copy( material.color );\r\n\t\t\t_emissiveColor.copy( material.emissive );\r\n\r\n\t\t\tif ( material.vertexColors === THREE.FaceColors ) {\r\n\r\n\t\t\t\t_diffuseColor.multiply( element.color );\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_color.copy( _ambientLight );\r\n\r\n\t\t\t_centroid.copy( v1.positionWorld ).add( v2.positionWorld ).add( v3.positionWorld ).divideScalar( 3 );\r\n\r\n\t\t\tcalculateLight( _centroid, element.normalModel, _color );\r\n\r\n\t\t\t_color.multiply( _diffuseColor ).add( _emissiveColor );\r\n\r\n\t\t\tmaterial.wireframe === true\r\n\t\t\t\t ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )\r\n\t\t\t\t : fillPath( _color );\r\n\r\n\t\t} else if ( material.isMeshBasicMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial ) {\r\n\r\n\t\t\tif ( material.map !== null ) {\r\n\r\n\t\t\t\tvar mapping = material.map.mapping;\r\n\r\n\t\t\t\tif ( mapping === THREE.UVMapping ) {\r\n\r\n\t\t\t\t\t_uvs = element.uvs;\r\n\t\t\t\t\tpatternPath( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _uvs[ uv1 ].x, _uvs[ uv1 ].y, _uvs[ uv2 ].x, _uvs[ uv2 ].y, _uvs[ uv3 ].x, _uvs[ uv3 ].y, material.map );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( material.envMap !== null ) {\r\n\r\n\t\t\t\tif ( material.envMap.mapping === THREE.SphericalReflectionMapping ) {\r\n\r\n\t\t\t\t\t_normal.copy( element.vertexNormalsModel[ uv1 ] ).applyMatrix3( _normalViewMatrix );\r\n\t\t\t\t\t_uv1x = 0.5 * _normal.x + 0.5;\r\n\t\t\t\t\t_uv1y = 0.5 * _normal.y + 0.5;\r\n\r\n\t\t\t\t\t_normal.copy( element.vertexNormalsModel[ uv2 ] ).applyMatrix3( _normalViewMatrix );\r\n\t\t\t\t\t_uv2x = 0.5 * _normal.x + 0.5;\r\n\t\t\t\t\t_uv2y = 0.5 * _normal.y + 0.5;\r\n\r\n\t\t\t\t\t_normal.copy( element.vertexNormalsModel[ uv3 ] ).applyMatrix3( _normalViewMatrix );\r\n\t\t\t\t\t_uv3x = 0.5 * _normal.x + 0.5;\r\n\t\t\t\t\t_uv3y = 0.5 * _normal.y + 0.5;\r\n\r\n\t\t\t\t\tpatternPath( _v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _uv1x, _uv1y, _uv2x, _uv2y, _uv3x, _uv3y, material.envMap );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t_color.copy( material.color );\r\n\r\n\t\t\t\tif ( material.vertexColors === THREE.FaceColors ) {\r\n\r\n\t\t\t\t\t_color.multiply( element.color );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmaterial.wireframe === true\r\n\t\t\t\t\t ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )\r\n\t\t\t\t\t : fillPath( _color );\r\n\r\n\t\t\t}\r\n\r\n\t\t} else if ( material.isMeshNormalMaterial ) {\r\n\r\n\t\t\t_normal.copy( element.normalModel ).applyMatrix3( _normalViewMatrix );\r\n\r\n\t\t\t_color.setRGB( _normal.x, _normal.y, _normal.z ).multiplyScalar( 0.5 ).addScalar( 0.5 );\r\n\r\n\t\t\tmaterial.wireframe === true\r\n\t\t\t\t ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )\r\n\t\t\t\t : fillPath( _color );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t_color.setRGB( 1, 1, 1 );\r\n\r\n\t\t\tmaterial.wireframe === true\r\n\t\t\t\t ? strokePath( _color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin )\r\n\t\t\t\t : fillPath( _color );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t\/\/\r\n\r\n\tfunction drawTriangle( x0, y0, x1, y1, x2, y2 ) {\r\n\r\n\t\t_context.beginPath();\r\n\t\t_context.moveTo( x0, y0 );\r\n\t\t_context.lineTo( x1, y1 );\r\n\t\t_context.lineTo( x2, y2 );\r\n\t\t_context.closePath();\r\n\r\n\t}\r\n\r\n\tfunction strokePath( color, linewidth, linecap, linejoin ) {\r\n\r\n\t\tsetLineWidth( linewidth );\r\n\t\tsetLineCap( linecap );\r\n\t\tsetLineJoin( linejoin );\r\n\t\tsetStrokeStyle( color.getStyle() );\r\n\r\n\t\t_context.stroke();\r\n\r\n\t\t_elemBox.expandByScalar( linewidth * 2 );\r\n\r\n\t}\r\n\r\n\tfunction fillPath( color ) {\r\n\r\n\t\tsetFillStyle( color.getStyle() );\r\n\t\t_context.fill();\r\n\r\n\t}\r\n\r\n\tfunction textureToPattern( texture ) {\r\n\r\n\t\tif ( texture.version === 0 ||\r\n\t\t\ttexture instanceof THREE.CompressedTexture ||\r\n\t\t\ttexture instanceof THREE.DataTexture ) {\r\n\r\n\t\t\treturn {\r\n\t\t\t\tcanvas: undefined,\r\n\t\t\t\tversion: texture.version\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\tvar image = texture.image;\r\n\r\n\t\tif ( image.complete === false ) {\r\n\r\n\t\t\treturn {\r\n\t\t\t\tcanvas: undefined,\r\n\t\t\t\tversion: 0\r\n\t\t\t};\r\n\r\n\t\t}\r\n\r\n\t\tvar repeatX = texture.wrapS === THREE.RepeatWrapping || texture.wrapS === THREE.MirroredRepeatWrapping;\r\n\t\tvar repeatY = texture.wrapT === THREE.RepeatWrapping || texture.wrapT === THREE.MirroredRepeatWrapping;\r\n\r\n\t\tvar mirrorX = texture.wrapS === THREE.MirroredRepeatWrapping;\r\n\t\tvar mirrorY = texture.wrapT === THREE.MirroredRepeatWrapping;\r\n\r\n\t\t\/\/\r\n\r\n\t\tvar canvas = document.createElement( 'canvas' );\r\n\t\tcanvas.width = image.width * ( mirrorX ? 2 : 1 );\r\n\t\tcanvas.height = image.height * ( mirrorY ? 2 : 1 );\r\n\r\n\t\tvar context = canvas.getContext( '2d' );\r\n\t\tcontext.setTransform( 1, 0, 0, - 1, 0, image.height );\r\n\t\tcontext.drawImage( image, 0, 0 );\r\n\r\n\t\tif ( mirrorX === true ) {\r\n\r\n\t\t\tcontext.setTransform( - 1, 0, 0, - 1, image.width, image.height );\r\n\t\t\tcontext.drawImage( image, - image.width, 0 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( mirrorY === true ) {\r\n\r\n\t\t\tcontext.setTransform( 1, 0, 0, 1, 0, 0 );\r\n\t\t\tcontext.drawImage( image, 0, image.height );\r\n\r\n\t\t}\r\n\r\n\t\tif ( mirrorX === true && mirrorY === true ) {\r\n\r\n\t\t\tcontext.setTransform( - 1, 0, 0, 1, image.width, 0 );\r\n\t\t\tcontext.drawImage( image, - image.width, image.height );\r\n\r\n\t\t}\r\n\r\n\t\tvar repeat = 'no-repeat';\r\n\r\n\t\tif ( repeatX === true && repeatY === true ) {\r\n\r\n\t\t\trepeat = 'repeat';\r\n\r\n\t\t} else if ( repeatX === true ) {\r\n\r\n\t\t\trepeat = 'repeat-x';\r\n\r\n\t\t} else if ( repeatY === true ) {\r\n\r\n\t\t\trepeat = 'repeat-y';\r\n\r\n\t\t}\r\n\r\n\t\tvar pattern = _context.createPattern( canvas, repeat );\r\n\r\n\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\r\n\r\n\t\treturn {\r\n\t\t\tcanvas: pattern,\r\n\t\t\tversion: texture.version\r\n\t\t};\r\n\r\n\t}\r\n\r\n\tfunction patternPath( x0, y0, x1, y1, x2, y2, u0, v0, u1, v1, u2, v2, texture ) {\r\n\r\n\t\tvar pattern = _patterns[ texture.id ];\r\n\r\n\t\tif ( pattern === undefined || pattern.version !== texture.version ) {\r\n\r\n\t\t\tpattern = textureToPattern( texture );\r\n\t\t\t_patterns[ texture.id ] = pattern;\r\n\r\n\t\t}\r\n\r\n\t\tif ( pattern.canvas !== undefined ) {\r\n\r\n\t\t\tsetFillStyle( pattern.canvas );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tsetFillStyle( 'rgba( 0, 0, 0, 1)' );\r\n\t\t\t_context.fill();\r\n\t\t\treturn;\r\n\r\n\t\t}\r\n\r\n\t\t\/\/ http:\/\/extremelysatisfactorytotalitarianism.com\/blog\/?p=2120\r\n\r\n\t\tvar a, b, c, d, e, f, det, idet,\r\n\t\t\toffsetX = texture.offset.x \/ texture.repeat.x,\r\n\t\t\toffsetY = texture.offset.y \/ texture.repeat.y,\r\n\t\t\twidth = texture.image.width * texture.repeat.x,\r\n\t\t\theight = texture.image.height * texture.repeat.y;\r\n\r\n\t\tu0 = ( u0 + offsetX ) * width;\r\n\t\tv0 = ( v0 + offsetY ) * height;\r\n\r\n\t\tu1 = ( u1 + offsetX ) * width;\r\n\t\tv1 = ( v1 + offsetY ) * height;\r\n\r\n\t\tu2 = ( u2 + offsetX ) * width;\r\n\t\tv2 = ( v2 + offsetY ) * height;\r\n\r\n\t\tx1 -= x0; y1 -= y0;\r\n\t\tx2 -= x0; y2 -= y0;\r\n\r\n\t\tu1 -= u0; v1 -= v0;\r\n\t\tu2 -= u0; v2 -= v0;\r\n\r\n\t\tdet = u1 * v2 - u2 * v1;\r\n\r\n\t\tif ( det === 0 ) return;\r\n\r\n\t\tidet = 1 \/ det;\r\n\r\n\t\ta = ( v2 * x1 - v1 * x2 ) * idet;\r\n\t\tb = ( v2 * y1 - v1 * y2 ) * idet;\r\n\t\tc = ( u1 * x2 - u2 * x1 ) * idet;\r\n\t\td = ( u1 * y2 - u2 * y1 ) * idet;\r\n\r\n\t\te = x0 - a * u0 - c * v0;\r\n\t\tf = y0 - b * u0 - d * v0;\r\n\r\n\t\t_context.save();\r\n\t\t_context.transform( a, b, c, d, e, f );\r\n\t\t_context.fill();\r\n\t\t_context.restore();\r\n\r\n\t}\r\n\r\n\t\/*\r\n\tfunction clipImage( x0, y0, x1, y1, x2, y2, u0, v0, u1, v1, u2, v2, image ) {\r\n\r\n\t\t\/\/ http:\/\/extremelysatisfactorytotalitarianism.com\/blog\/?p=2120\r\n\r\n\t\tvar a, b, c, d, e, f, det, idet,\r\n\t\twidth = image.width - 1,\r\n\t\theight = image.height - 1;\r\n\r\n\t\tu0 *= width; v0 *= height;\r\n\t\tu1 *= width; v1 *= height;\r\n\t\tu2 *= width; v2 *= height;\r\n\r\n\t\tx1 -= x0; y1 -= y0;\r\n\t\tx2 -= x0; y2 -= y0;\r\n\r\n\t\tu1 -= u0; v1 -= v0;\r\n\t\tu2 -= u0; v2 -= v0;\r\n\r\n\t\tdet = u1 * v2 - u2 * v1;\r\n\r\n\t\tidet = 1 \/ det;\r\n\r\n\t\ta = ( v2 * x1 - v1 * x2 ) * idet;\r\n\t\tb = ( v2 * y1 - v1 * y2 ) * idet;\r\n\t\tc = ( u1 * x2 - u2 * x1 ) * idet;\r\n\t\td = ( u1 * y2 - u2 * y1 ) * idet;\r\n\r\n\t\te = x0 - a * u0 - c * v0;\r\n\t\tf = y0 - b * u0 - d * v0;\r\n\r\n\t\t_context.save();\r\n\t\t_context.transform( a, b, c, d, e, f );\r\n\t\t_context.clip();\r\n\t\t_context.drawImage( image, 0, 0 );\r\n\t\t_context.restore();\r\n\r\n\t}\r\n\t*\/\r\n\r\n\t\/\/ Hide anti-alias gaps\r\n\r\n\tfunction expand( v1, v2, pixels ) {\r\n\r\n\t\tvar x = v2.x - v1.x, y = v2.y - v1.y,\r\n\t\t\tdet = x * x + y * y, idet;\r\n\r\n\t\tif ( det === 0 ) return;\r\n\r\n\t\tidet = pixels \/ Math.sqrt( det );\r\n\r\n\t\tx *= idet; y *= idet;\r\n\r\n\t\tv2.x += x; v2.y += y;\r\n\t\tv1.x -= x; v1.y -= y;\r\n\r\n\t}\r\n\r\n\t\/\/ Context cached methods.\r\n\r\n\tfunction setOpacity( value ) {\r\n\r\n\t\tif ( _contextGlobalAlpha !== value ) {\r\n\r\n\t\t\t_context.globalAlpha = value;\r\n\t\t\t_contextGlobalAlpha = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setBlending( value ) {\r\n\r\n\t\tif ( _contextGlobalCompositeOperation !== value ) {\r\n\r\n\t\t\tif ( value === THREE.NormalBlending ) {\r\n\r\n\t\t\t\t_context.globalCompositeOperation = 'source-over';\r\n\r\n\t\t\t} else if ( value === THREE.AdditiveBlending ) {\r\n\r\n\t\t\t\t_context.globalCompositeOperation = 'lighter';\r\n\r\n\t\t\t} else if ( value === THREE.SubtractiveBlending ) {\r\n\r\n\t\t\t\t_context.globalCompositeOperation = 'darker';\r\n\r\n\t\t\t} else if ( value === THREE.MultiplyBlending ) {\r\n\r\n\t\t\t\t_context.globalCompositeOperation = 'multiply';\r\n\r\n\t\t\t}\r\n\r\n\t\t\t_contextGlobalCompositeOperation = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setLineWidth( value ) {\r\n\r\n\t\tif ( _contextLineWidth !== value ) {\r\n\r\n\t\t\t_context.lineWidth = value;\r\n\t\t\t_contextLineWidth = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setLineCap( value ) {\r\n\r\n\t\t\/\/ \"butt\", \"round\", \"square\"\r\n\r\n\t\tif ( _contextLineCap !== value ) {\r\n\r\n\t\t\t_context.lineCap = value;\r\n\t\t\t_contextLineCap = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setLineJoin( value ) {\r\n\r\n\t\t\/\/ \"round\", \"bevel\", \"miter\"\r\n\r\n\t\tif ( _contextLineJoin !== value ) {\r\n\r\n\t\t\t_context.lineJoin = value;\r\n\t\t\t_contextLineJoin = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setStrokeStyle( value ) {\r\n\r\n\t\tif ( _contextStrokeStyle !== value ) {\r\n\r\n\t\t\t_context.strokeStyle = value;\r\n\t\t\t_contextStrokeStyle = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setFillStyle( value ) {\r\n\r\n\t\tif ( _contextFillStyle !== value ) {\r\n\r\n\t\t\t_context.fillStyle = value;\r\n\t\t\t_contextFillStyle = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction setLineDash( value ) {\r\n\r\n\t\tif ( _contextLineDash.length !== value.length ) {\r\n\r\n\t\t\t_context.setLineDash( value );\r\n\t\t\t_contextLineDash = value;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\/**\r\n * @author mrdoob \/ http:\/\/mrdoob.com\/\r\n * @author supereggbert \/ http:\/\/www.paulbrunt.co.uk\/\r\n * @author julianwa \/ https:\/\/github.com\/julianwa\r\n *\/\r\n\r\nTHREE.RenderableObject = function () {\r\n\r\n\tthis.id = 0;\r\n\r\n\tthis.object = null;\r\n\tthis.z = 0;\r\n\tthis.renderOrder = 0;\r\n\r\n};\r\n\r\n\/\/\r\n\r\nTHREE.RenderableFace = function () {\r\n\r\n\tthis.id = 0;\r\n\r\n\tthis.v1 = new THREE.RenderableVertex();\r\n\tthis.v2 = new THREE.RenderableVertex();\r\n\tthis.v3 = new THREE.RenderableVertex();\r\n\r\n\tthis.normalModel = new THREE.Vector3();\r\n\r\n\tthis.vertexNormalsModel = [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ];\r\n\tthis.vertexNormalsLength = 0;\r\n\r\n\tthis.color = new THREE.Color();\r\n\tthis.material = null;\r\n\tthis.uvs = [ new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2() ];\r\n\r\n\tthis.z = 0;\r\n\tthis.renderOrder = 0;\r\n\r\n};\r\n\r\n\/\/\r\n\r\nTHREE.RenderableVertex = function () {\r\n\r\n\tthis.position = new THREE.Vector3();\r\n\tthis.positionWorld = new THREE.Vector3();\r\n\tthis.positionScreen = new THREE.Vector4();\r\n\r\n\tthis.visible = true;\r\n\r\n};\r\n\r\nTHREE.RenderableVertex.prototype.copy = function ( vertex ) {\r\n\r\n\tthis.positionWorld.copy( vertex.positionWorld );\r\n\tthis.positionScreen.copy( vertex.positionScreen );\r\n\r\n};\r\n\r\n\/\/\r\n\r\nTHREE.RenderableLine = function () {\r\n\r\n\tthis.id = 0;\r\n\r\n\tthis.v1 = new THREE.RenderableVertex();\r\n\tthis.v2 = new THREE.RenderableVertex();\r\n\r\n\tthis.vertexColors = [ new THREE.Color(), new THREE.Color() ];\r\n\tthis.material = null;\r\n\r\n\tthis.z = 0;\r\n\tthis.renderOrder = 0;\r\n\r\n};\r\n\r\n\/\/\r\n\r\nTHREE.RenderableSprite = function () {\r\n\r\n\tthis.id = 0;\r\n\r\n\tthis.object = null;\r\n\r\n\tthis.x = 0;\r\n\tthis.y = 0;\r\n\tthis.z = 0;\r\n\r\n\tthis.rotation = 0;\r\n\tthis.scale = new THREE.Vector2();\r\n\r\n\tthis.material = null;\r\n\tthis.renderOrder = 0;\r\n\r\n};\r\n\r\n\/\/\r\n\r\nTHREE.Projector = function () {\r\n\r\n\tvar _object, _objectCount, _objectPool = [], _objectPoolLength = 0,\r\n\t\t_vertex, _vertexCount, _vertexPool = [], _vertexPoolLength = 0,\r\n\t\t_face, _faceCount, _facePool = [], _facePoolLength = 0,\r\n\t\t_line, _lineCount, _linePool = [], _linePoolLength = 0,\r\n\t\t_sprite, _spriteCount, _spritePool = [], _spritePoolLength = 0,\r\n\r\n\t\t_renderData = { objects: [], lights: [], elements: [] },\r\n\r\n\t\t_vector3 = new THREE.Vector3(),\r\n\t\t_vector4 = new THREE.Vector4(),\r\n\r\n\t\t_clipBox = new THREE.Box3( new THREE.Vector3( - 1, - 1, - 1 ), new THREE.Vector3( 1, 1, 1 ) ),\r\n\t\t_boundingBox = new THREE.Box3(),\r\n\t\t_points3 = new Array( 3 ),\r\n\r\n\t\t_viewMatrix = new THREE.Matrix4(),\r\n\t\t_viewProjectionMatrix = new THREE.Matrix4(),\r\n\r\n\t\t_modelMatrix,\r\n\t\t_modelViewProjectionMatrix = new THREE.Matrix4(),\r\n\r\n\t\t_normalMatrix = new THREE.Matrix3(),\r\n\r\n\t\t_frustum = new THREE.Frustum(),\r\n\r\n\t\t_clippedVertex1PositionScreen = new THREE.Vector4(),\r\n\t\t_clippedVertex2PositionScreen = new THREE.Vector4();\r\n\r\n\t\/\/\r\n\r\n\tthis.projectVector = function ( vector, camera ) {\r\n\r\n\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\r\n\t\tvector.project( camera );\r\n\r\n\t};\r\n\r\n\tthis.unprojectVector = function ( vector, camera ) {\r\n\r\n\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\r\n\t\tvector.unproject( camera );\r\n\r\n\t};\r\n\r\n\tthis.pickingRay = function () {\r\n\r\n\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\r\n\r\n\t};\r\n\r\n\t\/\/\r\n\r\n\tvar RenderList = function () {\r\n\r\n\t\tvar normals = [];\r\n\t\tvar colors = [];\r\n\t\tvar uvs = [];\r\n\r\n\t\tvar object = null;\r\n\t\tvar material = null;\r\n\r\n\t\tvar normalMatrix = new THREE.Matrix3();\r\n\r\n\t\tfunction setObject( value ) {\r\n\r\n\t\t\tobject = value;\r\n\t\t\tmaterial = object.material;\r\n\r\n\t\t\tnormalMatrix.getNormalMatrix( object.matrixWorld );\r\n\r\n\t\t\tnormals.length = 0;\r\n\t\t\tcolors.length = 0;\r\n\t\t\tuvs.length = 0;\r\n\r\n\t\t}\r\n\r\n\t\tfunction projectVertex( vertex ) {\r\n\r\n\t\t\tvar position = vertex.position;\r\n\t\t\tvar positionWorld = vertex.positionWorld;\r\n\t\t\tvar positionScreen = vertex.positionScreen;\r\n\r\n\t\t\tpositionWorld.copy( position ).applyMatrix4( _modelMatrix );\r\n\t\t\tpositionScreen.copy( positionWorld ).applyMatrix4( _viewProjectionMatrix );\r\n\r\n\t\t\tvar invW = 1 \/ positionScreen.w;\r\n\r\n\t\t\tpositionScreen.x *= invW;\r\n\t\t\tpositionScreen.y *= invW;\r\n\t\t\tpositionScreen.z *= invW;\r\n\r\n\t\t\tvertex.visible = positionScreen.x >= - 1 && positionScreen.x <= 1 &&\r\n\t\t\t\t\t positionScreen.y >= - 1 && positionScreen.y <= 1 &&\r\n\t\t\t\t\t positionScreen.z >= - 1 && positionScreen.z <= 1;\r\n\r\n\t\t}\r\n\r\n\t\tfunction pushVertex( x, y, z ) {\r\n\r\n\t\t\t_vertex = getNextVertexInPool();\r\n\t\t\t_vertex.position.set( x, y, z );\r\n\r\n\t\t\tprojectVertex( _vertex );\r\n\r\n\t\t}\r\n\r\n\t\tfunction pushNormal( x, y, z ) {\r\n\r\n\t\t\tnormals.push( x, y, z );\r\n\r\n\t\t}\r\n\r\n\t\tfunction pushColor( r, g, b ) {\r\n\r\n\t\t\tcolors.push( r, g, b );\r\n\r\n\t\t}\r\n\r\n\t\tfunction pushUv( x, y ) {\r\n\r\n\t\t\tuvs.push( x, y );\r\n\r\n\t\t}\r\n\r\n\t\tfunction checkTriangleVisibility( v1, v2, v3 ) {\r\n\r\n\t\t\tif ( v1.visible === true || v2.visible === true || v3.visible === true ) return true;\r\n\r\n\t\t\t_points3[ 0 ] = v1.positionScreen;\r\n\t\t\t_points3[ 1 ] = v2.positionScreen;\r\n\t\t\t_points3[ 2 ] = v3.positionScreen;\r\n\r\n\t\t\treturn _clipBox.intersectsBox( _boundingBox.setFromPoints( _points3 ) );\r\n\r\n\t\t}\r\n\r\n\t\tfunction checkBackfaceCulling( v1, v2, v3 ) {\r\n\r\n\t\t\treturn ( ( v3.positionScreen.x - v1.positionScreen.x ) *\r\n\t\t\t\t    ( v2.positionScreen.y - v1.positionScreen.y ) -\r\n\t\t\t\t    ( v3.positionScreen.y - v1.positionScreen.y ) *\r\n\t\t\t\t    ( v2.positionScreen.x - v1.positionScreen.x ) ) < 0;\r\n\r\n\t\t}\r\n\r\n\t\tfunction pushLine( a, b ) {\r\n\r\n\t\t\tvar v1 = _vertexPool[ a ];\r\n\t\t\tvar v2 = _vertexPool[ b ];\r\n\r\n\t\t\t\/\/ Clip\r\n\r\n\t\t\tv1.positionScreen.copy( v1.position ).applyMatrix4( _modelViewProjectionMatrix );\r\n\t\t\tv2.positionScreen.copy( v2.position ).applyMatrix4( _modelViewProjectionMatrix );\r\n\r\n\t\t\tif ( clipLine( v1.positionScreen, v2.positionScreen ) === true ) {\r\n\r\n\t\t\t\t\/\/ Perform the perspective divide\r\n\t\t\t\tv1.positionScreen.multiplyScalar( 1 \/ v1.positionScreen.w );\r\n\t\t\t\tv2.positionScreen.multiplyScalar( 1 \/ v2.positionScreen.w );\r\n\r\n\t\t\t\t_line = getNextLineInPool();\r\n\t\t\t\t_line.id = object.id;\r\n\t\t\t\t_line.v1.copy( v1 );\r\n\t\t\t\t_line.v2.copy( v2 );\r\n\t\t\t\t_line.z = Math.max( v1.positionScreen.z, v2.positionScreen.z );\r\n\t\t\t\t_line.renderOrder = object.renderOrder;\r\n\r\n\t\t\t\t_line.material = object.material;\r\n\r\n\t\t\t\tif ( object.material.vertexColors === THREE.VertexColors ) {\r\n\r\n\t\t\t\t\t_line.vertexColors[ 0 ].fromArray( colors, a * 3 );\r\n\t\t\t\t\t_line.vertexColors[ 1 ].fromArray( colors, b * 3 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_renderData.elements.push( _line );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tfunction pushTriangle( a, b, c ) {\r\n\r\n\t\t\tvar v1 = _vertexPool[ a ];\r\n\t\t\tvar v2 = _vertexPool[ b ];\r\n\t\t\tvar v3 = _vertexPool[ c ];\r\n\r\n\t\t\tif ( checkTriangleVisibility( v1, v2, v3 ) === false ) return;\r\n\r\n\t\t\tif ( material.side === THREE.DoubleSide || checkBackfaceCulling( v1, v2, v3 ) === true ) {\r\n\r\n\t\t\t\t_face = getNextFaceInPool();\r\n\r\n\t\t\t\t_face.id = object.id;\r\n\t\t\t\t_face.v1.copy( v1 );\r\n\t\t\t\t_face.v2.copy( v2 );\r\n\t\t\t\t_face.v3.copy( v3 );\r\n\t\t\t\t_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) \/ 3;\r\n\t\t\t\t_face.renderOrder = object.renderOrder;\r\n\r\n\t\t\t\t\/\/ use first vertex normal as face normal\r\n\r\n\t\t\t\t_face.normalModel.fromArray( normals, a * 3 );\r\n\t\t\t\t_face.normalModel.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t\tfor ( var i = 0; i < 3; i ++ ) {\r\n\r\n\t\t\t\t\tvar normal = _face.vertexNormalsModel[ i ];\r\n\t\t\t\t\tnormal.fromArray( normals, arguments[ i ] * 3 );\r\n\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\r\n\r\n\t\t\t\t\tvar uv = _face.uvs[ i ];\r\n\t\t\t\t\tuv.fromArray( uvs, arguments[ i ] * 2 );\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t_face.vertexNormalsLength = 3;\r\n\r\n\t\t\t\t_face.material = object.material;\r\n\r\n\t\t\t\t_renderData.elements.push( _face );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tsetObject: setObject,\r\n\t\t\tprojectVertex: projectVertex,\r\n\t\t\tcheckTriangleVisibility: checkTriangleVisibility,\r\n\t\t\tcheckBackfaceCulling: checkBackfaceCulling,\r\n\t\t\tpushVertex: pushVertex,\r\n\t\t\tpushNormal: pushNormal,\r\n\t\t\tpushColor: pushColor,\r\n\t\t\tpushUv: pushUv,\r\n\t\t\tpushLine: pushLine,\r\n\t\t\tpushTriangle: pushTriangle\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tvar renderList = new RenderList();\r\n\r\n\tfunction projectObject( object ) {\r\n\r\n\t\tif ( object.visible === false ) return;\r\n\r\n\t\tif ( object instanceof THREE.Light ) {\r\n\r\n\t\t\t_renderData.lights.push( object );\r\n\r\n\t\t} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points ) {\r\n\r\n\t\t\tif ( object.material.visible === false ) return;\r\n\t\t\tif ( object.frustumCulled === true && _frustum.intersectsObject( object ) === false ) return;\r\n\r\n\t\t\taddObject( object );\r\n\r\n\t\t} else if ( object instanceof THREE.Sprite ) {\r\n\r\n\t\t\tif ( object.material.visible === false ) return;\r\n\t\t\tif ( object.frustumCulled === true && _frustum.intersectsSprite( object ) === false ) return;\r\n\r\n\t\t\taddObject( object );\r\n\r\n\t\t}\r\n\r\n\t\tvar children = object.children;\r\n\r\n\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\r\n\r\n\t\t\tprojectObject( children[ i ] );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction addObject( object ) {\r\n\r\n\t\t_object = getNextObjectInPool();\r\n\t\t_object.id = object.id;\r\n\t\t_object.object = object;\r\n\r\n\t\t_vector3.setFromMatrixPosition( object.matrixWorld );\r\n\t\t_vector3.applyMatrix4( _viewProjectionMatrix );\r\n\t\t_object.z = _vector3.z;\r\n\t\t_object.renderOrder = object.renderOrder;\r\n\r\n\t\t_renderData.objects.push( _object );\r\n\r\n\t}\r\n\r\n\tthis.projectScene = function ( scene, camera, sortObjects, sortElements ) {\r\n\r\n\t\t_faceCount = 0;\r\n\t\t_lineCount = 0;\r\n\t\t_spriteCount = 0;\r\n\r\n\t\t_renderData.elements.length = 0;\r\n\r\n\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\r\n\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\r\n\r\n\t\t_viewMatrix.copy( camera.matrixWorldInverse );\r\n\t\t_viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );\r\n\r\n\t\t_frustum.setFromMatrix( _viewProjectionMatrix );\r\n\r\n\t\t\/\/\r\n\r\n\t\t_objectCount = 0;\r\n\r\n\t\t_renderData.objects.length = 0;\r\n\t\t_renderData.lights.length = 0;\r\n\r\n\t\tprojectObject( scene );\r\n\r\n\t\tif ( sortObjects === true ) {\r\n\r\n\t\t\t_renderData.objects.sort( painterSort );\r\n\r\n\t\t}\r\n\r\n\t\t\/\/\r\n\r\n\t\tvar objects = _renderData.objects;\r\n\r\n\t\tfor ( var o = 0, ol = objects.length; o <ol; o ++ ) { var object = objects[ o ].object; var geometry = object.geometry; renderList.setObject( object ); _modelMatrix = object.matrixWorld; _vertexCount = 0; if ( object instanceof THREE.Mesh ) { if ( geometry instanceof THREE.BufferGeometry ) { var attributes = geometry.attributes; var groups = geometry.groups; if ( attributes.position === undefined ) continue; var positions = attributes.position.array; for ( var i = 0, l = positions.length; i <l; i += 3 ) { renderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ); } if ( attributes.normal !== undefined ) { var normals = attributes.normal.array; for ( var i = 0, l = normals.length; i <l; i += 3 ) { renderList.pushNormal( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ); } } if ( attributes.uv !== undefined ) { var uvs = attributes.uv.array; for ( var i = 0, l = uvs.length; i <l; i += 2 ) { renderList.pushUv( uvs[ i ], uvs[ i + 1 ] ); } } if ( geometry.index !== null ) { var indices = geometry.index.array; if ( groups.length> 0 ) {\r\n\r\n\t\t\t\t\t\t\tfor ( var g = 0; g < groups.length; g ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tvar group = groups[ g ];\r\n\r\n\t\t\t\t\t\t\t\tfor ( var i = group.start, l = group.start + group.count; i < l; i += 3 ) {\r\n\r\n\t\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i += 3 ) {\r\n\r\n\t\t\t\t\t\t\t\trenderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length \/ 3; i < l; i += 3 ) {\r\n\r\n\t\t\t\t\t\t\trenderList.pushTriangle( i, i + 1, i + 2 );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\t\tvar vertices = geometry.vertices;\r\n\t\t\t\t\tvar faces = geometry.faces;\r\n\t\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\r\n\r\n\t\t\t\t\t_normalMatrix.getNormalMatrix( _modelMatrix );\r\n\r\n\t\t\t\t\tvar material = object.material;\r\n\r\n\t\t\t\t\tvar isMultiMaterial = Array.isArray( material );\r\n\r\n\t\t\t\t\tfor ( var v = 0, vl = vertices.length; v < vl; v ++ ) {\r\n\r\n\t\t\t\t\t\tvar vertex = vertices[ v ];\r\n\r\n\t\t\t\t\t\t_vector3.copy( vertex );\r\n\r\n\t\t\t\t\t\tif ( material.morphTargets === true ) {\r\n\r\n\t\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\r\n\t\t\t\t\t\t\tvar morphInfluences = object.morphTargetInfluences;\r\n\r\n\t\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\r\n\r\n\t\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\r\n\r\n\t\t\t\t\t\t\t\tif ( influence === 0 ) continue;\r\n\r\n\t\t\t\t\t\t\t\tvar target = morphTargets[ t ];\r\n\t\t\t\t\t\t\t\tvar targetVertex = target.vertices[ v ];\r\n\r\n\t\t\t\t\t\t\t\t_vector3.x += ( targetVertex.x - vertex.x ) * influence;\r\n\t\t\t\t\t\t\t\t_vector3.y += ( targetVertex.y - vertex.y ) * influence;\r\n\t\t\t\t\t\t\t\t_vector3.z += ( targetVertex.z - vertex.z ) * influence;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trenderList.pushVertex( _vector3.x, _vector3.y, _vector3.z );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\r\n\r\n\t\t\t\t\t\tvar face = faces[ f ];\r\n\r\n\t\t\t\t\t\tmaterial = isMultiMaterial === true\r\n\t\t\t\t\t\t\t ? object.material[ face.materialIndex ]\r\n\t\t\t\t\t\t\t : object.material;\r\n\r\n\t\t\t\t\t\tif ( material === undefined ) continue;\r\n\r\n\t\t\t\t\t\tvar side = material.side;\r\n\r\n\t\t\t\t\t\tvar v1 = _vertexPool[ face.a ];\r\n\t\t\t\t\t\tvar v2 = _vertexPool[ face.b ];\r\n\t\t\t\t\t\tvar v3 = _vertexPool[ face.c ];\r\n\r\n\t\t\t\t\t\tif ( renderList.checkTriangleVisibility( v1, v2, v3 ) === false ) continue;\r\n\r\n\t\t\t\t\t\tvar visible = renderList.checkBackfaceCulling( v1, v2, v3 );\r\n\r\n\t\t\t\t\t\tif ( side !== THREE.DoubleSide ) {\r\n\r\n\t\t\t\t\t\t\tif ( side === THREE.FrontSide && visible === false ) continue;\r\n\t\t\t\t\t\t\tif ( side === THREE.BackSide && visible === true ) continue;\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_face = getNextFaceInPool();\r\n\r\n\t\t\t\t\t\t_face.id = object.id;\r\n\t\t\t\t\t\t_face.v1.copy( v1 );\r\n\t\t\t\t\t\t_face.v2.copy( v2 );\r\n\t\t\t\t\t\t_face.v3.copy( v3 );\r\n\r\n\t\t\t\t\t\t_face.normalModel.copy( face.normal );\r\n\r\n\t\t\t\t\t\tif ( visible === false && ( side === THREE.BackSide || side === THREE.DoubleSide ) ) {\r\n\r\n\t\t\t\t\t\t\t_face.normalModel.negate();\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_face.normalModel.applyMatrix3( _normalMatrix ).normalize();\r\n\r\n\t\t\t\t\t\tvar faceVertexNormals = face.vertexNormals;\r\n\r\n\t\t\t\t\t\tfor ( var n = 0, nl = Math.min( faceVertexNormals.length, 3 ); n < nl; n ++ ) {\r\n\r\n\t\t\t\t\t\t\tvar normalModel = _face.vertexNormalsModel[ n ];\r\n\t\t\t\t\t\t\tnormalModel.copy( faceVertexNormals[ n ] );\r\n\r\n\t\t\t\t\t\t\tif ( visible === false && ( side === THREE.BackSide || side === THREE.DoubleSide ) ) {\r\n\r\n\t\t\t\t\t\t\t\tnormalModel.negate();\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tnormalModel.applyMatrix3( _normalMatrix ).normalize();\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_face.vertexNormalsLength = faceVertexNormals.length;\r\n\r\n\t\t\t\t\t\tvar vertexUvs = faceVertexUvs[ f ];\r\n\r\n\t\t\t\t\t\tif ( vertexUvs !== undefined ) {\r\n\r\n\t\t\t\t\t\t\tfor ( var u = 0; u < 3; u ++ ) {\r\n\r\n\t\t\t\t\t\t\t\t_face.uvs[ u ].copy( vertexUvs[ u ] );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t_face.color = face.color;\r\n\t\t\t\t\t\t_face.material = material;\r\n\r\n\t\t\t\t\t\t_face.z = ( v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z ) \/ 3;\r\n\t\t\t\t\t\t_face.renderOrder = object.renderOrder;\r\n\r\n\t\t\t\t\t\t_renderData.elements.push( _face );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( object instanceof THREE.Line ) {\r\n\r\n\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\r\n\r\n\t\t\t\tif ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\t\tvar attributes = geometry.attributes;\r\n\r\n\t\t\t\t\tif ( attributes.position !== undefined ) {\r\n\r\n\t\t\t\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length; i < l; i += 3 ) {\r\n\r\n\t\t\t\t\t\t\trenderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ( attributes.color !== undefined ) {\r\n\r\n\t\t\t\t\t\t\tvar colors = attributes.color.array;\r\n\r\n\t\t\t\t\t\t\tfor ( var i = 0, l = colors.length; i < l; i += 3 ) {\r\n\r\n\t\t\t\t\t\t\t\trenderList.pushColor( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ( geometry.index !== null ) {\r\n\r\n\t\t\t\t\t\t\tvar indices = geometry.index.array;\r\n\r\n\t\t\t\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i += 2 ) {\r\n\r\n\t\t\t\t\t\t\t\trenderList.pushLine( indices[ i ], indices[ i + 1 ] );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\tvar step = object instanceof THREE.LineSegments ? 2 : 1;\r\n\r\n\t\t\t\t\t\t\tfor ( var i = 0, l = ( positions.length \/ 3 ) - 1; i < l; i += step ) {\r\n\r\n\t\t\t\t\t\t\t\trenderList.pushLine( i, i + 1 );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\t\tvar vertices = object.geometry.vertices;\r\n\r\n\t\t\t\t\tif ( vertices.length === 0 ) continue;\r\n\r\n\t\t\t\t\tv1 = getNextVertexInPool();\r\n\t\t\t\t\tv1.positionScreen.copy( vertices[ 0 ] ).applyMatrix4( _modelViewProjectionMatrix );\r\n\r\n\t\t\t\t\tvar step = object instanceof THREE.LineSegments ? 2 : 1;\r\n\r\n\t\t\t\t\tfor ( var v = 1, vl = vertices.length; v < vl; v ++ ) {\r\n\r\n\t\t\t\t\t\tv1 = getNextVertexInPool();\r\n\t\t\t\t\t\tv1.positionScreen.copy( vertices[ v ] ).applyMatrix4( _modelViewProjectionMatrix );\r\n\r\n\t\t\t\t\t\tif ( ( v + 1 ) % step > 0 ) continue;\r\n\r\n\t\t\t\t\t\tv2 = _vertexPool[ _vertexCount - 2 ];\r\n\r\n\t\t\t\t\t\t_clippedVertex1PositionScreen.copy( v1.positionScreen );\r\n\t\t\t\t\t\t_clippedVertex2PositionScreen.copy( v2.positionScreen );\r\n\r\n\t\t\t\t\t\tif ( clipLine( _clippedVertex1PositionScreen, _clippedVertex2PositionScreen ) === true ) {\r\n\r\n\t\t\t\t\t\t\t\/\/ Perform the perspective divide\r\n\t\t\t\t\t\t\t_clippedVertex1PositionScreen.multiplyScalar( 1 \/ _clippedVertex1PositionScreen.w );\r\n\t\t\t\t\t\t\t_clippedVertex2PositionScreen.multiplyScalar( 1 \/ _clippedVertex2PositionScreen.w );\r\n\r\n\t\t\t\t\t\t\t_line = getNextLineInPool();\r\n\r\n\t\t\t\t\t\t\t_line.id = object.id;\r\n\t\t\t\t\t\t\t_line.v1.positionScreen.copy( _clippedVertex1PositionScreen );\r\n\t\t\t\t\t\t\t_line.v2.positionScreen.copy( _clippedVertex2PositionScreen );\r\n\r\n\t\t\t\t\t\t\t_line.z = Math.max( _clippedVertex1PositionScreen.z, _clippedVertex2PositionScreen.z );\r\n\t\t\t\t\t\t\t_line.renderOrder = object.renderOrder;\r\n\r\n\t\t\t\t\t\t\t_line.material = object.material;\r\n\r\n\t\t\t\t\t\t\tif ( object.material.vertexColors === THREE.VertexColors ) {\r\n\r\n\t\t\t\t\t\t\t\t_line.vertexColors[ 0 ].copy( object.geometry.colors[ v ] );\r\n\t\t\t\t\t\t\t\t_line.vertexColors[ 1 ].copy( object.geometry.colors[ v - 1 ] );\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t_renderData.elements.push( _line );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( object instanceof THREE.Points ) {\r\n\r\n\t\t\t\t_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );\r\n\r\n\t\t\t\tif ( geometry instanceof THREE.Geometry ) {\r\n\r\n\t\t\t\t\tvar vertices = object.geometry.vertices;\r\n\r\n\t\t\t\t\tfor ( var v = 0, vl = vertices.length; v < vl; v ++ ) {\r\n\r\n\t\t\t\t\t\tvar vertex = vertices[ v ];\r\n\r\n\t\t\t\t\t\t_vector4.set( vertex.x, vertex.y, vertex.z, 1 );\r\n\t\t\t\t\t\t_vector4.applyMatrix4( _modelViewProjectionMatrix );\r\n\r\n\t\t\t\t\t\tpushPoint( _vector4, object, camera );\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( geometry instanceof THREE.BufferGeometry ) {\r\n\r\n\t\t\t\t\tvar attributes = geometry.attributes;\r\n\r\n\t\t\t\t\tif ( attributes.position !== undefined ) {\r\n\r\n\t\t\t\t\t\tvar positions = attributes.position.array;\r\n\r\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length; i < l; i += 3 ) {\r\n\r\n\t\t\t\t\t\t\t_vector4.set( positions[ i ], positions[ i + 1 ], positions[ i + 2 ], 1 );\r\n\t\t\t\t\t\t\t_vector4.applyMatrix4( _modelViewProjectionMatrix );\r\n\r\n\t\t\t\t\t\t\tpushPoint( _vector4, object, camera );\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( object instanceof THREE.Sprite ) {\r\n\r\n\t\t\t\t_vector4.set( _modelMatrix.elements[ 12 ], _modelMatrix.elements[ 13 ], _modelMatrix.elements[ 14 ], 1 );\r\n\t\t\t\t_vector4.applyMatrix4( _viewProjectionMatrix );\r\n\r\n\t\t\t\tpushPoint( _vector4, object, camera );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( sortElements === true ) {\r\n\r\n\t\t\t_renderData.elements.sort( painterSort );\r\n\r\n\t\t}\r\n\r\n\t\treturn _renderData;\r\n\r\n\t};\r\n\r\n\tfunction pushPoint( _vector4, object, camera ) {\r\n\r\n\t\tvar invW = 1 \/ _vector4.w;\r\n\r\n\t\t_vector4.z *= invW;\r\n\r\n\t\tif ( _vector4.z >= - 1 && _vector4.z <= 1 ) {\r\n\r\n\t\t\t_sprite = getNextSpriteInPool();\r\n\t\t\t_sprite.id = object.id;\r\n\t\t\t_sprite.x = _vector4.x * invW;\r\n\t\t\t_sprite.y = _vector4.y * invW;\r\n\t\t\t_sprite.z = _vector4.z;\r\n\t\t\t_sprite.renderOrder = object.renderOrder;\r\n\t\t\t_sprite.object = object;\r\n\r\n\t\t\t_sprite.rotation = object.rotation;\r\n\r\n\t\t\t_sprite.scale.x = object.scale.x * Math.abs( _sprite.x - ( _vector4.x + camera.projectionMatrix.elements[ 0 ] ) \/ ( _vector4.w + camera.projectionMatrix.elements[ 12 ] ) );\r\n\t\t\t_sprite.scale.y = object.scale.y * Math.abs( _sprite.y - ( _vector4.y + camera.projectionMatrix.elements[ 5 ] ) \/ ( _vector4.w + camera.projectionMatrix.elements[ 13 ] ) );\r\n\r\n\t\t\t_sprite.material = object.material;\r\n\r\n\t\t\t_renderData.elements.push( _sprite );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t\/\/ Pools\r\n\r\n\tfunction getNextObjectInPool() {\r\n\r\n\t\tif ( _objectCount === _objectPoolLength ) {\r\n\r\n\t\t\tvar object = new THREE.RenderableObject();\r\n\t\t\t_objectPool.push( object );\r\n\t\t\t_objectPoolLength ++;\r\n\t\t\t_objectCount ++;\r\n\t\t\treturn object;\r\n\r\n\t\t}\r\n\r\n\t\treturn _objectPool[ _objectCount ++ ];\r\n\r\n\t}\r\n\r\n\tfunction getNextVertexInPool() {\r\n\r\n\t\tif ( _vertexCount === _vertexPoolLength ) {\r\n\r\n\t\t\tvar vertex = new THREE.RenderableVertex();\r\n\t\t\t_vertexPool.push( vertex );\r\n\t\t\t_vertexPoolLength ++;\r\n\t\t\t_vertexCount ++;\r\n\t\t\treturn vertex;\r\n\r\n\t\t}\r\n\r\n\t\treturn _vertexPool[ _vertexCount ++ ];\r\n\r\n\t}\r\n\r\n\tfunction getNextFaceInPool() {\r\n\r\n\t\tif ( _faceCount === _facePoolLength ) {\r\n\r\n\t\t\tvar face = new THREE.RenderableFace();\r\n\t\t\t_facePool.push( face );\r\n\t\t\t_facePoolLength ++;\r\n\t\t\t_faceCount ++;\r\n\t\t\treturn face;\r\n\r\n\t\t}\r\n\r\n\t\treturn _facePool[ _faceCount ++ ];\r\n\r\n\r\n\t}\r\n\r\n\tfunction getNextLineInPool() {\r\n\r\n\t\tif ( _lineCount === _linePoolLength ) {\r\n\r\n\t\t\tvar line = new THREE.RenderableLine();\r\n\t\t\t_linePool.push( line );\r\n\t\t\t_linePoolLength ++;\r\n\t\t\t_lineCount ++;\r\n\t\t\treturn line;\r\n\r\n\t\t}\r\n\r\n\t\treturn _linePool[ _lineCount ++ ];\r\n\r\n\t}\r\n\r\n\tfunction getNextSpriteInPool() {\r\n\r\n\t\tif ( _spriteCount === _spritePoolLength ) {\r\n\r\n\t\t\tvar sprite = new THREE.RenderableSprite();\r\n\t\t\t_spritePool.push( sprite );\r\n\t\t\t_spritePoolLength ++;\r\n\t\t\t_spriteCount ++;\r\n\t\t\treturn sprite;\r\n\r\n\t\t}\r\n\r\n\t\treturn _spritePool[ _spriteCount ++ ];\r\n\r\n\t}\r\n\r\n\t\/\/\r\n\r\n\tfunction painterSort( a, b ) {\r\n\r\n\t\tif ( a.renderOrder !== b.renderOrder ) {\r\n\r\n\t\t\treturn a.renderOrder - b.renderOrder;\r\n\r\n\t\t} else if ( a.z !== b.z ) {\r\n\r\n\t\t\treturn b.z - a.z;\r\n\r\n\t\t} else if ( a.id !== b.id ) {\r\n\r\n\t\t\treturn a.id - b.id;\r\n\r\n\t\t} else {\r\n\r\n\t\t\treturn 0;\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tfunction clipLine( s1, s2 ) {\r\n\r\n\t\tvar alpha1 = 0, alpha2 = 1,\r\n\r\n\t\t\/\/ Calculate the boundary coordinate of each vertex for the near and far clip planes,\r\n\t\t\/\/ Z = -1 and Z = +1, respectively.\r\n\r\n\t\t\tbc1near = s1.z + s1.w,\r\n\t\t\tbc2near = s2.z + s2.w,\r\n\t\t\tbc1far = - s1.z + s1.w,\r\n\t\t\tbc2far = - s2.z + s2.w;\r\n\r\n\t\tif ( bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0 ) {\r\n\r\n\t\t\t\/\/ Both vertices lie entirely within all clip planes.\r\n\t\t\treturn true;\r\n\r\n\t\t} else if ( ( bc1near < 0 && bc2near < 0 ) || ( bc1far < 0 && bc2far < 0 ) ) {\r\n\r\n\t\t\t\/\/ Both vertices lie entirely outside one of the clip planes.\r\n\t\t\treturn false;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t\/\/ The line segment spans at least one clip plane.\r\n\r\n\t\t\tif ( bc1near < 0 ) {\r\n\r\n\t\t\t\t\/\/ v1 lies outside the near plane, v2 inside\r\n\t\t\t\talpha1 = Math.max( alpha1, bc1near \/ ( bc1near - bc2near ) );\r\n\r\n\t\t\t} else if ( bc2near < 0 ) {\r\n\r\n\t\t\t\t\/\/ v2 lies outside the near plane, v1 inside\r\n\t\t\t\talpha2 = Math.min( alpha2, bc1near \/ ( bc1near - bc2near ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( bc1far < 0 ) {\r\n\r\n\t\t\t\t\/\/ v1 lies outside the far plane, v2 inside\r\n\t\t\t\talpha1 = Math.max( alpha1, bc1far \/ ( bc1far - bc2far ) );\r\n\r\n\t\t\t} else if ( bc2far < 0 ) {\r\n\r\n\t\t\t\t\/\/ v2 lies outside the far plane, v2 inside\r\n\t\t\t\talpha2 = Math.min( alpha2, bc1far \/ ( bc1far - bc2far ) );\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif ( alpha2 < alpha1 ) {\r\n\r\n\t\t\t\t\/\/ The line segment spans two boundaries, but is outside both of them.\r\n\t\t\t\t\/\/ (This can't happen when we're only clipping against just near\/far but good\r\n\t\t\t\t\/\/  to leave the check here for future usage if other clip planes are added.)\r\n\t\t\t\treturn false;\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t\/\/ Update the s1 and s2 vertices to match the clipped line segment.\r\n\t\t\t\ts1.lerp( s2, alpha1 );\r\n\t\t\t\ts2.lerp( s1, 1 - alpha2 );\r\n\r\n\t\t\t\treturn true;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\tif($('#home_wave').length > 0) {\r\n\t\tvar SEPARATION = 200, AMOUNTX = 40, AMOUNTY = 60;\r\n\t\tvar container, stats;\r\n\t\tvar camera, scene, renderer;\r\n\r\n\t\tvar particles, particle, count = 0;\r\n\r\n\t\tvar mouseX = 0, mouseY = 0;\r\n\r\n\t\tvar windowHalfX = window.innerWidth \/ 2;\r\n\t\tvar windowHalfY = window.innerHeight \/ 2;\r\n\r\n\r\n\t\tinit();\r\n\t\tanimate();\r\n\r\n\t}\r\n\r\n\r\n\tfunction init() {\r\n\r\n\t\tcontainer = $('#home_wave');\r\n\t\t\r\n\r\n\t\tcamera = new THREE.PerspectiveCamera( 65, window.innerWidth \/ window.innerHeight, 1, 10000 );\r\n\t\tcamera.position.z = 10000;\r\n\r\n\t\tscene = new THREE.Scene();\r\n\t\tscene.fog = new THREE.Fog( 0x1b1a1a, 2000, 10000 );\r\n\r\n\t\tparticles = new Array();\r\n\r\n\t\tvar PI2 = Math.PI * 2;\r\n\t\tvar material = new THREE.SpriteCanvasMaterial( {\r\n\r\n\t\t\tcolor: 0xffffff,\r\n\t\t\tprogram: function ( context ) {\r\n\r\n\t\t\t\tcontext.beginPath();\r\n\t\t\t\tcontext.arc( 0, 0, 0.5, 0, PI2, true );\r\n\t\t\t\tcontext.fill();\r\n\r\n\t\t\t}\r\n\r\n\t\t} );\r\n\r\n\t\tvar i = 0;\r\n\r\n\t\tfor ( var ix = 0; ix < AMOUNTX; ix ++ ) {\r\n\r\n\t\t\tfor ( var iy = 0; iy < AMOUNTY; iy ++ ) {\r\n\r\n\t\t\t\tparticle = particles[ i ++ ] = new THREE.Sprite( material );\r\n\t\t\t\tparticle.position.x = ix * SEPARATION - ( ( AMOUNTX * SEPARATION ) \/ 2 );\r\n\t\t\t\tparticle.position.z = iy * SEPARATION - ( ( AMOUNTY * SEPARATION ) \/ 2 );\r\n\t\t\t\tscene.add( particle );\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\trenderer = new THREE.CanvasRenderer();\r\n\t\trenderer.setPixelRatio( window.devicePixelRatio );\r\n\t\trenderer.setSize( window.innerWidth, window.innerHeight );\r\n\t\trenderer.setClearColor(scene.fog.color );\r\n\t\tcontainer.append( renderer.domElement );\r\n\r\n\t\t\/\/stats = new Stats();\r\n\t\t\/\/stats.domElement.style.position = 'absolute';\r\n\t\t\/\/stats.domElement.style.top = '0px';\r\n\t\t\/\/container.appendChild( stats.domElement );\r\n\r\n\r\n\r\n\t\t\/\/\r\n\r\n\t\twindow.addEventListener( 'resize', onWindowResize, false );\r\n\r\n\t}\r\n\r\n\tfunction onWindowResize() {\r\n\r\n\t\twindowHalfX = window.innerWidth \/ 2;\r\n\t\twindowHalfY = window.innerHeight \/ 2;\r\n\r\n\t\tcamera.aspect = window.innerWidth \/ window.innerHeight;\r\n\t\tcamera.updateProjectionMatrix();\r\n\r\n\t\trenderer.setSize( window.innerWidth, window.innerHeight );\r\n\r\n\t}\r\n\r\n\t\/\/\r\n\r\n\t\/\/\r\n\r\n\tfunction animate() {\r\n\r\n\t\trequestAnimationFrame( animate );\r\n\r\n\t\trender();\r\n\t\t\/\/stats.update();\r\n\r\n\t}\r\n\r\n\tfunction render() {\r\n\r\n\r\n\t\tcamera.position.set(0,355,122);\r\n\r\n\t\tvar i = 0;\r\n\r\n\t\tfor ( var ix = 0; ix < AMOUNTX; ix ++ ) {\r\n\r\n\t\t\tfor ( var iy = 0; iy < AMOUNTY; iy ++ ) {\r\n\r\n\t\t\t\tparticle = particles[ i++ ];\r\n\t\t\t\tparticle.position.y = ( Math.sin( ( ix + count ) * 0.3 ) * 50 ) +\r\n\t\t\t\t\t( Math.sin( ( iy + count ) * 0.5 ) * 50 );\r\n\t\t\t\tparticle.scale.x = particle.scale.y = ( Math.sin( ( ix + count ) * 0.3 ) + 1 ) * 4 +\r\n\t\t\t\t\t( Math.sin( ( iy + count ) * 0.5 ) + 1 ) * 4;\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\trenderer.render( scene, camera );\r\n\r\n\t\tcount += 0.1;\r\n\r\n\t}\r\n\r\n\r\n\r\n\r\n    });\r\n})(jQuery);\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-362b8e0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"362b8e0\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-thegem\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bd3c20d\" data-id=\"bd3c20d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6d51f82 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-spacer\" data-id=\"6d51f82\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-fbd1f9c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fbd1f9c\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-thegem\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bb44892\" data-id=\"bb44892\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bf6826b flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"bf6826b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"title-h2 elementor-heading-title elementor-size-default\">Integrated technical studies:<br> architectural and structural<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f19fb5 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"7f19fb5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>A coordinated approach between architecture and structural engineering allows for the development of comprehensive, optimized, and coherent projects from the earliest stages. From concept to implementation, every detail is carefully considered to ensure functionality, aesthetics, and safety.<br> Projects that combine aesthetics, functionality, and static safety, developed in coordination between architects and engineers, in compliance with NTC 2018 and Eurocodes. <\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7b96a0 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-thegem-quickfinders\" data-id=\"e7b96a0\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;thegem_elementor_preset&quot;:&quot;grid-basic-left-align&quot;,&quot;_animation_mobile&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"thegem-quickfinders.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n<div class=\"quickfinder row inline-row quickfinder-style-grid-basic-left-align\">\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-compress-arrows-alt\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-compress-arrows-alt\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tIntegration\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Seamless integration between architectural and structural design<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-rocket\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-rocket\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tOptimization\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Technical performance analysis and cost optimization<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-pencil-alt\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-pencil-alt\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tPersonalization\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Customized solutions based on intended use and urban planning constraints<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-users-cog\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-users-cog\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tMultidisciplinary team\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Internal multidisciplinary team with direct coordination<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"tgh-icon check2\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"tgh-icon check2\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tQuality control\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Quality control on drawings, calculations and documentation<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-mdi mdi-rotate-3d\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-mdi mdi-rotate-3d\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tFlexibility\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Approach oriented towards reducing variations during construction<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<main class=\"elementor-section elementor-top-section elementor-element elementor-element-a57729b elementor-section-boxed elementor-section-height-default elementor-section-height-default elementor-invisible\" data-id=\"a57729b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;animation&quot;:&quot;fadeIn&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-thegem\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-5e77107\" data-id=\"5e77107\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-945c14f flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-image\" data-id=\"945c14f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.ingexium.com\/wp-content\/uploads\/2025\/11\/Sostenibilita-progettazione-green-e-riqualificazioni.jpg\" class=\"attachment-full size-full wp-image-27189\" alt=\"\" srcset=\"https:\/\/www.ingexium.com\/wp-content\/uploads\/2025\/11\/Sostenibilita-progettazione-green-e-riqualificazioni.jpg 1024w, https:\/\/www.ingexium.com\/wp-content\/uploads\/2025\/11\/Sostenibilita-progettazione-green-e-riqualificazioni-300x300.jpg 300w, https:\/\/www.ingexium.com\/wp-content\/uploads\/2025\/11\/Sostenibilita-progettazione-green-e-riqualificazioni-150x150.jpg 150w, https:\/\/www.ingexium.com\/wp-content\/uploads\/2025\/11\/Sostenibilita-progettazione-green-e-riqualificazioni-768x768.jpg 768w, https:\/\/www.ingexium.com\/wp-content\/uploads\/2025\/11\/Sostenibilita-progettazione-green-e-riqualificazioni-256x256.jpg 256w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-a6dd9bc\" data-id=\"a6dd9bc\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d244c36 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"d244c36\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"title-h2 elementor-heading-title elementor-size-default\">Sustainability, green design and redevelopment<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b4cc39 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"6b4cc39\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>Design focused on reducing environmental impact and enhancing existing assets. From green architecture to energy efficiency upgrades, we offer solutions that combine comfort, savings, and durability.<br> Integrating passive solutions, eco-friendly materials, and energy analyses for low-impact buildings, with APE, CAM, and LEED certifications.<br> Restoration of historic and contemporary buildings using static consolidation, seismic retrofitting, and energy efficiency techniques, while preserving the original architectural features. <\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f783f33 elementor-icon-list--layout-traditional elementor-list-item-link-full_width flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-invisible elementor-widget elementor-widget-icon-list\" data-id=\"f783f33\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInRight&quot;}\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Design according to energy protocols (CAM, LEED, NZEB)<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">LCA (Life Cycle Assessment) analysis of materials and systems<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Building redevelopment with energy consumption reduction of up to 60%<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Recovery of historical heritage with compatible and reversible techniques<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Integrating renewable energy and home automation for smart buildings<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Management of tax and eco-bonuses procedures<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/main>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c27668b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c27668b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-thegem\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-cd3166d\" data-id=\"cd3166d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fdfe09a flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"fdfe09a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"title-h2 elementor-heading-title elementor-size-default\">BIM Methodology<br> and advanced 3D modeling<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-39d7cc6 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"39d7cc6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>Using BIM and digital models allows for the management of the entire project lifecycle. From real-time graphics to photorealistic rendering, we offer rapid and transparent decision-making tools for clients, companies, and professionals. <\/p><p>Digital project management through Building Information Modeling, with interactive 3D models, clash detection, and realistic renderings for sharing with stakeholders.<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0bc8042 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-thegem-quickfinders\" data-id=\"0bc8042\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;thegem_elementor_preset&quot;:&quot;vertical-4&quot;}\" data-widget_type=\"thegem-quickfinders.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n<div class=\"quickfinder quickfinder-style-vertical basic quickfinder-style-vertical-4\">\n\t\t\t<div class=\"quickfinder-item odd lazy-loading\">\n\t\t\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item align-to-icon\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tIntegrated BIM models\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>architecture, structures, systems<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<a href=\"#\" target=\"_blank\" rel=\"nofollow\" class=\"quickfinder-item-link\" aria-label=\"Read more\"><\/a>\n\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-hexagon\">\n\n\t\t\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-archway\" viewBox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-archway\" viewBox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t<div class=\"quickfinder-item even lazy-loading\">\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-hexagon\">\n\n\t\t\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-vr-cardboard\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-vr-cardboard\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item align-to-icon\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<h4 class=\"quickfinder-title title-h4 bold\">\n\t\t\t3D Rendering and AR\t\t<\/h4>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Augmented\/Virtual Reality Visualizations<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<a href=\"#\" target=\"_blank\" rel=\"nofollow\" class=\"quickfinder-item-link\" aria-label=\"Read more\"><\/a>\n\n\t\t\t\n\t\t<\/div>\n\t\t\t<div class=\"quickfinder-item odd lazy-loading\">\n\t\t\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item align-to-icon\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<h4 class=\"quickfinder-title title-h4 bold\">\n\t\t\tclash detection\t\t<\/h4>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Coordination of design interferences<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<a href=\"#\" target=\"_blank\" rel=\"nofollow\" class=\"quickfinder-item-link\" aria-label=\"Read more\"><\/a>\n\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-hexagon\">\n\n\t\t\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-compress-alt\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-compress-alt\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t<div class=\"quickfinder-item even lazy-loading\">\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-hexagon\">\n\n\t\t\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"tgh-icon cube\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"tgh-icon cube\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item align-to-icon\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<h4 class=\"quickfinder-title title-h4 bold\">\n\t\t\t5D BIM\t\t<\/h4>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Real-time cost and quantity updates<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<a href=\"#\" target=\"_blank\" rel=\"nofollow\" class=\"quickfinder-item-link\" aria-label=\"Read more\"><\/a>\n\n\t\t\t\n\t\t<\/div>\n\t\t\t<div class=\"quickfinder-item odd lazy-loading\">\n\t\t\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item align-to-icon\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<h4 class=\"quickfinder-title title-h4 bold\">\n\t\t\tIntegrated simulations\t\t<\/h4>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Energy and performance<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<a href=\"#\" target=\"_blank\" rel=\"nofollow\" class=\"quickfinder-item-link\" aria-label=\"Read more\"><\/a>\n\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-hexagon\">\n\n\t\t\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-mdi mdi-signal\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-mdi mdi-signal\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t<div class=\"quickfinder-item even lazy-loading\">\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-hexagon\">\n\n\t\t\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-back-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top\">\n\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner\">\n\t\t\t\t\t\t\t<div class=\"gem-icon-shape-hexagon-top-inner-before\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-server\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-server\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\n\t\t\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item align-to-icon\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<h4 class=\"quickfinder-title title-h4 bold\">\n\t\t\tDigital management\t\t<\/h4>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Digital archiving and management of project data (digital as-built)<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<a href=\"#\" target=\"_blank\" rel=\"nofollow\" class=\"quickfinder-item-link\" aria-label=\"Read more\"><\/a>\n\n\t\t\t\n\t\t<\/div>\n\t<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9586cc9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9586cc9\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-thegem\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8908765\" data-id=\"8908765\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3046545 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"3046545\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"title-h2 elementor-heading-title elementor-size-default\">Technological surveys and digital topography<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-be36140 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"be36140\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>Using BIM and digital models allows for the management of the entire project lifecycle. From real-time graphics to photorealistic rendering, we offer rapid and transparent decision-making tools for clients, companies, and professionals. <\/p><p>Digital project management through Building Information Modeling, with interactive 3D models, clash detection, and realistic renderings for sharing with stakeholders.<\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-662720a flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"662720a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<ul><li>3D surveys with high-precision laser scanners.<\/li><li>Aerial photogrammetry with ENAC-certified drones.<\/li><li>High-accuracy GPS topographic surveys.<\/li><li>Digital Terrain Modeling (DTM\/DSM).<\/li><li>CAD\/BIM output ready for design.<\/li><li>Deformation control and structural monitoring.<\/li><\/ul>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<main class=\"elementor-section elementor-top-section elementor-element elementor-element-716beac elementor-section-boxed elementor-section-height-default elementor-section-height-default elementor-invisible\" data-id=\"716beac\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;animation&quot;:&quot;fadeIn&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-thegem\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-475480f\" data-id=\"475480f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8a15097 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"8a15097\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"title-h2 elementor-heading-title elementor-size-default\">Construction Management and Construction Site Safety<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc35ca8 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-image\" data-id=\"bc35ca8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img width=\"556\" height=\"394\" src=\"https:\/\/www.ingexium.com\/wp-content\/uploads\/2018\/12\/slice-8.jpg\" class=\"attachment-full size-full wp-image-27206\" alt=\"\" srcset=\"https:\/\/www.ingexium.com\/wp-content\/uploads\/2018\/12\/slice-8.jpg 556w, https:\/\/www.ingexium.com\/wp-content\/uploads\/2018\/12\/slice-8-300x213.jpg 300w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-bb62ff1\" data-id=\"bb62ff1\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4f3e609 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-heading\" data-id=\"4f3e609\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"styled-subtitle elementor-heading-title elementor-size-default\">We guarantee the correct execution of the works, respecting deadlines, costs and safety regulations.  <\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7717f50 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"7717f50\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>Construction management is supported by safety coordination, with timely monitoring of all construction phases.<br> Operational and administrative oversight of construction sites, including safety coordination in accordance with Legislative Decree 81\/08 and management of compliance with deadlines, budgets, and quality standards. <\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52bf56d elementor-icon-list--layout-traditional elementor-list-item-link-full_width flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-invisible elementor-widget elementor-widget-icon-list\" data-id=\"52bf56d\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInRight&quot;}\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Constant presence and scheduled inspections<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Construction site accounting management and changes during construction<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Safety coordination according to Legislative Decree. 81\/2008<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Drafting and updating PSC, POS and DVR<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Material validation and on-site acceptance testing<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-square\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Single interface with company, supplier and client<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/main>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-793aa16 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"793aa16\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-thegem\"><div class=\"elementor-row\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-aa1e49c\" data-id=\"aa1e49c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b3f286c flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-invisible elementor-widget elementor-widget-heading\" data-id=\"b3f286c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<div class=\"title-h2 elementor-heading-title elementor-size-default\">Building practices and specialist consultancy<\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19a6b80 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-text-editor\" data-id=\"19a6b80\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\r\n\t\t\t\t\t\t<p>We support individuals, businesses, and professionals in managing building and permit procedures. From land registry procedures to landscape permits, we offer comprehensive and reliable technical services. Specialized technical support for urban planning permits, landscape permits, land transfers, and land registry updates, with direct contact with the relevant authorities.  <\/p>\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3038796 flex-horizontal-align-default flex-horizontal-align-tablet-default flex-horizontal-align-mobile-default flex-vertical-align-default flex-vertical-align-tablet-default flex-vertical-align-mobile-default elementor-widget elementor-widget-thegem-quickfinders\" data-id=\"3038796\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;thegem_elementor_preset&quot;:&quot;grid-basic-left-align&quot;}\" data-widget_type=\"thegem-quickfinders.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n<div class=\"quickfinder row inline-row quickfinder-style-grid-basic-left-align\">\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-elegant icon-documents-alt\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-elegant icon-documents-alt\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tTechnical practices\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Drafting and filing of CILA, SCIA, and Building Permits<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-elegant icon-documents\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-elegant icon-documents\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tLand registry practices\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Management of land registry procedures (registrations, subdivisions, transfers)<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"tgh-icon mountain\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"tgh-icon mountain\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tLandscaping practices\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Landscape reports and superintendency authorizations<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-elegant icon-house\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-elegant icon-house\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tCompliance\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Checking urban planning compliance and building amnesties<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-mdi mdi-gavel\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"gem-mdi mdi-gavel\"><\/i>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tLegal advice\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Technical and legal consultancy on land constraints and uses<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"lazy-loading  quickfinder-item inline-column col-md-4 col-sm-6 col-xs-12\">\n\n\t\t\t\n\t\t\t\t<div class=\"quickfinder-item-inner icon-top icon-horizontal-left icon-wrapping-inline centered-box button-bottom lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\"> \n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"quickfinder-icon-container\">\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n\t<div class=\"gem-qf-icon-image-wrapper lazy-loading-item\" data-ll-effect=\"clip\">\n\t\t\n\t\t\t<div class=\"gem-icon gem-icon-pack-fontawesome gem-icon-size-medium  gem-icon-shape-default\">\n\n\t\t\t\t\n\t\t\t\t<div class=\"icon-hover-bg fade\"><\/div>\n\n\t\t\t\t<div class=\"gem-icon-inner\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"padding-box-inner\">\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-1\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-user-check\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<span class=\"gem-icon-half-2\">\n\t\t\t\t\t\t\t\t\t<span class=\"back-angle\">\n\t\t\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-user-check\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t<\/div>\n\n\t\t\n\t\t\t<\/div>\n\n\t<div class=\"connector-container\">\n\t\t<span><\/span>\n\t<\/div>\n\n<\/div>\n\n\t\t\t\t\t\n\t\t\t\t\t<div class=\"quickfinder-item-info-wrapper\"> \n\t\t\t\t\t\t<div class=\"quickfinder-item-info lazy-loading-item\" data-ll-effect=\"fading\" data-ll-item-delay=\"200\">\n\t\n\t\t<div class=\"quickfinder-title title-h4 bold\">\n\t\t\tAssistance\t\t<\/div>\n\t\n\t\n\t\t<div class=\"quickfinder-description gem-text-output\">\n\t\t\t<p>Assistance in construction disputes and expert reports<\/p>\n\t\t<\/div>\n\t\n\t<\/div>\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\n\t\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div><\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Engineering &amp; Architecture Integrated design between form, function and structural behavior. Architectural and structural solutions for efficiency and durability Integrated&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-fullwidth.php","meta":{"footnotes":""},"class_list":["post-27181","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/www.ingexium.com\/en\/wp-json\/wp\/v2\/pages\/27181","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ingexium.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ingexium.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ingexium.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ingexium.com\/en\/wp-json\/wp\/v2\/comments?post=27181"}],"version-history":[{"count":1,"href":"https:\/\/www.ingexium.com\/en\/wp-json\/wp\/v2\/pages\/27181\/revisions"}],"predecessor-version":[{"id":27232,"href":"https:\/\/www.ingexium.com\/en\/wp-json\/wp\/v2\/pages\/27181\/revisions\/27232"}],"wp:attachment":[{"href":"https:\/\/www.ingexium.com\/en\/wp-json\/wp\/v2\/media?parent=27181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}